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