http請求HttpServletRequest詳解
目錄
3. ServletContext域與Request域的生命週期比較?
1. HttpServletRequest概述
我們在建立Servlet時會覆蓋service()方法,或doGet()/doPost(),這些方法都有兩個引數,一個為代表請求的request和代表響應response。 service方法中的request的型別是ServletRequest,而doGet/doPost方法的request的型別是HttpServletRequest,HttpServletRequest是ServletRequest的子介面.
2. request的執行流程
3. 抓包獲取的http請求資訊
request代表請求, 可以通過該物件分別獲取http請求的請求行, 請求頭, 請求體
4. 通過requestd物件獲得 "請求行"
獲得請求的資源: 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 : n. 參照頁,引用頁; 推薦人
作用: 執行該此訪問的來源 , 做防盜鏈時使用 該資訊
6. 通過request 獲得請求體
request 請求的概念是 通過post提交的請求引數的, 若果是get 則沒有請求體(直接跟在 ? 後邊 , 多個引數用 & 連線 )
格式:
username=zhangsan&password=123&hobby=football&hobby=basketball
key ---------------------- value
username [zhangsan]
password [123]
hobby [football,basketball]
以上述為例子: 獲取請求引數 (get 和 post 都可以通過以下方式獲得) :
String getParameter(String name)
String[] getParameterValues(String name)
Enumeration getParameterNames()
Map<String,String[]> getParameterMap()
注: 亂碼處理 (括號內的是我個人拙見) :
• 解決post提交方式的亂碼 (引數還在請求體中, 可以先行設定編碼,然後通過瀏覽器處理後 直接就是utf8的編碼):
request.setCharacterEncoding("UTF-8");
• 解決get提交的方式的亂碼 (因為get方式是直接在連結過邊加的不經過瀏覽器處理, 得到的是原編碼, 想要改變編碼需要有先解碼再編碼的過程):
String name = request.getParameter("name");
name = new String(name.getBytes("ISO-8859-1"),"UTF-8");
附加 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)
3. ServletContext
域與
Request
域的生命週期比較?
ServletContext : 建立--> 伺服器啟動 ; 銷燬--> 伺服器關閉 ; 域的作用範圍--> 整個web應用
request : 建立--> 訪問時建立request ;
銷燬-->響應結束
request銷燬 ;
域的作用範圍--> 一次請求中
4. 轉發與重定向的區別?
• 重定向是 兩次請求, 轉發是一次請求
• 重定向位址列的地址變化, 轉發地址不發生變化
• 重定向可以訪問外部網站 , 轉發只能訪問內部的網站
• 轉發的效能要優於重定向
5. 客戶端地址與伺服器端的地址的寫法?
• 客戶端訪問服務端需要加上 web應用的名稱.
• 伺服器內部訪問資源 , 內部的跳轉地址, 不需要寫web應用的名稱
18/12/6 18:00 雨