WBE15—HttpServletRequest
1.HttpServletRequest概述
我們?cè)趧?chuàng)建Servlet時(shí)會(huì)覆蓋service()方法,或doGet()/doPost(),這些方法都有兩個(gè)參數(shù),一個(gè)為代表請(qǐng)求的request和代表響應(yīng)response。
service方法中的request的類型是ServletRequest,而doGet/doPost方法的request的類型是HttpServletRequest,HttpServletRequest是ServletRequest的子接口,功能和方法更加強(qiáng)大,今天我們學(xué)習(xí)HttpServletRequest。
2.request的運(yùn)行流程
3.通過(guò)抓包工具抓取Http請(qǐng)求
因?yàn)?/span>request代表請(qǐng)求,所以我們可以通過(guò)該對(duì)象分別獲得Http請(qǐng)求的請(qǐng)求行,請(qǐng) 求頭和請(qǐng)求體
4.通過(guò)request獲得請(qǐng)求行
獲得客戶端的請(qǐng)求方式:String?getMethod()
獲得請(qǐng)求的資源:
????String?getRequestURI()?
????StringBuffer?getRequestURL()?
????String?getContextPath()?---web應(yīng)用的名稱
????String?getQueryString()?---- get提交url地址后的參數(shù)字符串
????username=zhangsan&password=123
注意:request獲得客戶機(jī)(客戶端)的一些信息
request.getRemoteAddr() --- 獲得訪問(wèn)的客戶端IP地址
5.通過(guò)request獲得請(qǐng)求頭
????long?getDateHeader(String?name)
????String?getHeader(String?name)
????Enumeration?getHeaderNames()
????Enumeration?getHeaders(String?name)
????int?getIntHeader(String?name)
referer頭的作用:執(zhí)行該此訪問(wèn)的的來(lái)源
做防盜鏈
6.通過(guò)request獲得請(qǐng)求體
請(qǐng)求體中的內(nèi)容是通過(guò)post提交的請(qǐng)求參數(shù),格式是:
username=zhangsan&password=123&hobby=football&hobby=basketball
key ---------------------- value
????username [zhangsan]
????password [123]
????hobby [football,basketball]
以上面參數(shù)為例,通過(guò)一下方法獲得請(qǐng)求參數(shù):
????String?getParameter(String?name)?
????String[]?getParameterValues(String?name)
????Enumeration?getParameterNames()
????Map<String,String[]>?getParameterMap()?
注意:
????get請(qǐng)求方式的請(qǐng)求參數(shù) 上述的方法一樣可以獲得
????解決post提交方式的亂碼:request.setCharacterEncoding("UTF-8");
????解決get提交的方式的亂碼:
????????parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");
7.request的其他功能
(1)request是一個(gè)域?qū)ο?/h4>
request對(duì)象也是一個(gè)存儲(chǔ)數(shù)據(jù)的區(qū)域?qū)ο?#xff0c;所以也具有如下方法:
????setAttribute(String?name, Object?o)
????getAttribute(String?name)
????removeAttribute(String?name)
注意:request域的作用范圍:一次請(qǐng)求中
(2)request完成請(qǐng)求轉(zhuǎn)發(fā)
獲得請(qǐng)求轉(zhuǎn)發(fā)器----path是轉(zhuǎn)發(fā)的地址
????RequestDispatcher?getRequestDispatcher(String?path)
通過(guò)轉(zhuǎn)發(fā)器對(duì)象轉(zhuǎn)發(fā)
????requestDispathcer.forward(ServletRequest?request, ServletResponse?response)
注意:ServletContext域與Request域的生命周期比較?
????ServletContext:
????????創(chuàng)建:服務(wù)器啟動(dòng)
????????銷毀:服務(wù)器關(guān)閉
?????域的作用范圍:整個(gè)web應(yīng)用
????request:
????????創(chuàng)建:訪問(wèn)時(shí)創(chuàng)建request
????????銷毀:響應(yīng)結(jié)束request銷毀
????????????域的作用范圍:一次請(qǐng)求中
注意:轉(zhuǎn)發(fā)與重定向的區(qū)別?
????1)重定向兩次請(qǐng)求,轉(zhuǎn)發(fā)一次請(qǐng)求
????2)重定向地址欄的地址變化,轉(zhuǎn)發(fā)地址不變
????3)重新定向可以訪問(wèn)外部網(wǎng)站 轉(zhuǎn)發(fā)只能訪問(wèn)內(nèi)部資源
????4)轉(zhuǎn)發(fā)的性能要優(yōu)于重定向
注意:客戶端地址與服務(wù)器端地址的寫法?
客戶端地址:
????是客戶端去訪問(wèn)服務(wù)器的地址,服務(wù)器外部的地址,特點(diǎn):寫上web應(yīng)用名 稱
直接輸入地址:
????????重定向
服務(wù)器端地址:
????服務(wù)器內(nèi)部資源的跳轉(zhuǎn)的地址,特點(diǎn):不需要寫web應(yīng)用的名稱
????????轉(zhuǎn)發(fā)
總結(jié):
????request獲得行的內(nèi)容
????????request.getMethod()
????????request.getRequestURI()
????????request.getRequestURL()
????????request.getContextPath()
????????request.getRemoteAddr()
????request獲得頭的內(nèi)容
????????request.getHeader(name)
????????request獲得體(請(qǐng)求參數(shù))
????????String request.getParameter(name)
????????Map<String,String[]> request.getParameterMap();
????????String[] request.getParameterValues(name);
注意:客戶端發(fā)送的參數(shù) 到服務(wù)器端都是字符串
獲得中文亂碼的解決:
????post:????request.setCharacterEncoding(“UTF-8”);
????get:
????????parameter = new String(parameter.getBytes(“iso8859-1”),”UTF-8”);
request轉(zhuǎn)發(fā)和域
????request.getRequestDispatcher(轉(zhuǎn)發(fā)的地址).forward(req,resp);
????request.setAttribute(name,value)
????request.getAttribute(name)
總結(jié)
以上是生活随笔為你收集整理的WBE15—HttpServletRequest的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 每日一题(9)—— 写一个标准宏MIN,
- 下一篇: MATLAB 显示输出数据的三种方式