1.Request和Response概述
我們在創建Servlet時會覆蓋service()方法,或doGet()/doPost(),這些方法都有兩個參數,一個爲代表請求的request和代表響應的response。
service方法中的request的類型是ServletRequest,而doGet/doPost方法的request的類型是HttpServletRequest,HttpServletRequest是ServletRequest的子接口,功能和方法更加強大。
service方法中的response的類型是ServletResponse,而doGet/doPost方法的response的類型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口,功能和方法更加強大。
2.運行流程
3.通過抓包工具抓取Http請求和響應
因爲request代表請求,所以我們可以通過該對象分別獲得Http請求的請求行,請求頭和請求體
因爲response代表響應,所以我們可以通過該對象分別獲取Http響應的響應行,響應頭和響應體
4.通過request獲得請求行
獲得客戶端的請求方式:String getMethod()
獲得請求的資源:
request.getRequestURI()
request.getRequestURL()
request.getContextPath() ---web應用的名稱
request.getQueryString()---獲取get提交url地址後邊跟着的參數字符串
username=xxx&password=123456
request.getRemoteAddr() --- 獲得訪問的客戶端IP地址
5.通過request獲得請求頭
request.getHeader(String name)
請求頭中Referer字段的作用:獲取到訪問地址,從而進行判斷,可做爲防盜鏈。
6.通過request獲得請求體
請求體中的內容是通過post提交的請求參數,格式是:
username=xxx&password=123456&hobby=ball
以上面參數爲例,通過以下方法獲得請求參數:
String getParameter(String name)
String[] getParameterValues(String name)
Enumeration getParameterNames()
Map<String,String[]> getParameterMap()
解決post提交方式的亂碼:
request.setCharacterEncoding("UTF-8");
解決get提交的方式的亂碼:
parameter = new String(username.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是轉發的地址
request.getRequestDispatcher(path).forward(request,response)
注意:ServletContext域與Request域的生命週期比較?
ServletContext:
創建:服務器啓動
銷燬:服務器關閉
域的作用範圍:整個web應用
request:
創建:訪問時創建request
銷燬:響應結束request銷燬
域的作用範圍:一次請求中