HttpServletRequest(request的一些API)
一、request的運行流程
首先,自己寫一個web工程,也就是建一個工程;當(dāng)把該web工程發(fā)布到Tomcat服務(wù)器當(dāng)中,可以讓外界訪問,這就成了一個web應(yīng)用。
在客戶端輸入一個網(wǎng)站,是web應(yīng)用資源的地址URL,該請求會在瀏覽器客戶端自動生成一個http請求,然后客戶端會將相應(yīng)的請求發(fā)送到相應(yīng)的服務(wù)器內(nèi)部,服務(wù)器首先由Tomcat引擎接收該請求,然后Tomcat引擎會分析http協(xié)議上的請求行,該請求行上面有請求方式,根據(jù)請求方式是get還是post從而確定調(diào)用是doGet方法還是doPost方法,請求行上面有地址,Tomcat會幫你找該地址在的Tomcat服務(wù)器內(nèi)部的某一個web應(yīng)用(Tomcat容器中web-app下可以存放多個web應(yīng)用),找到對應(yīng)的web應(yīng)用之后,開始創(chuàng)建對象,默認(rèn)第一次訪問創(chuàng)建對象,默認(rèn)調(diào)用servlet方法,重寫servlet方法之后會調(diào)用doGet方法或者doPost方法,當(dāng)調(diào)用doGet方法的時候,需要兩個參數(shù)。一個是request,一個是response,這兩個參數(shù),誰去調(diào)用改doGet方法管提供這個倆個參數(shù),doGet方法由Tomcat引擎負(fù)責(zé)調(diào)用,它在調(diào)用的時候,幫你創(chuàng)建兩個對象,一個是request代表請求,一個是response代表響應(yīng)。其中request內(nèi)部封裝http請求的所有內(nèi)容;response是空的,因為它代表響應(yīng),response有自己的緩沖區(qū),可以向緩沖區(qū)里面添加內(nèi)容,可以添加響應(yīng)行、響應(yīng)頭、響應(yīng)體(分別有對應(yīng)的方法),添加完成之后,Tomcat引擎會獲取緩沖區(qū)內(nèi)容,會組裝成http響應(yīng)的東西,然后發(fā)送到客戶端,通過裝包也可看到,客戶端獲得這些內(nèi)容會自動根據(jù)響應(yīng)進行解析,最終在頁面上顯示響應(yīng)體的內(nèi)容。
二、ServletContext域和Request域的生命周期
ServletContext
創(chuàng)建:服務(wù)器啟動
銷毀:服務(wù)器關(guān)閉
域的作用范圍:整個web應(yīng)用
Request
創(chuàng)建: 訪問時創(chuàng)建request對象
銷毀:響應(yīng)結(jié)束request銷毀
(生命周期為一瞬間)
域的作用范圍:一次請求中
三、轉(zhuǎn)發(fā)和重定向的區(qū)別
1).重定向兩次請求 轉(zhuǎn)發(fā)一次請求
2).重定向的地址欄的地址變化 轉(zhuǎn)發(fā)的地址不變
3).重定向可以訪問外部網(wǎng)站 轉(zhuǎn)發(fā)不能訪問外部網(wǎng)站,只能訪問內(nèi)部資源
4).轉(zhuǎn)發(fā)的性能要優(yōu)于重定向
四、客戶端地址與服務(wù)器端地址的區(qū)別
客戶端地址:是客戶端去訪問服務(wù)器的地址,服務(wù)器外部的地址
客戶端地址必須寫上web應(yīng)用的名稱,代表要去Tomcat容器中去找哪個web應(yīng)用
例如:
直接輸入地址
重定向
也就是,只要是服務(wù)器外部跳出服務(wù)器,然后再去訪問服務(wù)器內(nèi)部的資源,豆角客戶端地址
服務(wù)器端地址:是服務(wù)器內(nèi)部資源跳轉(zhuǎn)訪問的地址
不需要寫web應(yīng)用的名稱
例如:
轉(zhuǎn)發(fā)
總結(jié):
request獲得請求行的內(nèi)容
獲得請求方式:request.getMethod();
獲得請求資源:request.getRequestURI();
request.getRequestURL();這個長,協(xié)議、主機名、端口都有
動態(tài)獲得web應(yīng)用的名稱:request.getContextPath();
獲得客戶機的一些信息:request.getRemoteAddr();
request獲得請求頭的內(nèi)容
request.getHeader(name);
request獲得請求體(請求參數(shù))
request.getParameter(name);//返回值為String
request.getParameterMap();//將所有的數(shù)據(jù)以Map形式封裝,返回值為Map<String ,String[]>
request.getParameterValues(name);//返回值為String[]字符串?dāng)?shù)組
注意: 客戶端發(fā)送的參數(shù),到服務(wù)器端獲得后都是字符串
獲得中文亂碼 的解決:
post提交: request.setCharacterEncoding("UTF-8");
get提交: parameter = new String(parameter.getBytes("iso8859-1"),"UTF-8");//先用iso8859-1默認(rèn)編碼再用UTF-8解碼
request轉(zhuǎn)發(fā)和域
轉(zhuǎn)發(fā):request.getRequestDispather(轉(zhuǎn)發(fā)的地址,服務(wù)器內(nèi)部的地址,不需要web應(yīng)用名稱).forward(request, response);
例如:request.getRequestDispatcher("/login.jsp").forward(request, response);
存:request.setAttribute(name,value);
取:request.getAttribute(name,value);//取的時候需要強轉(zhuǎn)一下
總結(jié)
以上是生活随笔為你收集整理的HttpServletRequest(request的一些API)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DNF精致的装备合成器能合CC吗?
- 下一篇: 信阳治疗女性卵巢多囊最好的医院推荐