- HttpServletRequest概述
我們在建立Servlet時會覆寫service()方法,或doGet()/doPost(),這些方法都有兩個參數,一個為代表請求的request和代表響應response。service()方法中寫了根據請求方式的不同調用doget()和dopost().
service方法中的request的類型是ServletRequest,而doGet/doPost方法的request類型HttpServletRequest,HttpServletRequest是ServletRequest的子接口,功能和方法更加強大.
request的運作流程

2、抓取http包,分别抓請求行,請求頭,請求體 (post請求方式才會有)
---------------通過request獲得請求行
獲得用戶端的請求方式:String getMethod()
String getContextPath() ---web應用的名稱
request.getRemoteAddr() --- 獲得通路的用戶端IP位址
--------------------通過request獲得請求頭
String getHeader(String name)
-----------------------通過request獲得請求體
String getParameter(String name)
String[] getParameterValues(String name)
Map<String,String[]> getParameterMap()
解決post送出方式的亂碼:request.setCharacterEncoding("UTF-8");
解決get送出的方式的亂碼:
parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");
3、request是一個域對象
request對象也是一個存儲資料的區域對象,是以也具有如下方法:
setAttribute(String name, Object o)
getAttribute(String name)
removeAttribute(String name)
request完成請求轉發
1、獲得請求轉發器----path是轉發的位址
RequestDispatcher getRequestDispatcher(String path)
2、通過轉發器對象轉發
requestDispathcer.forward(ServletRequest request, ServletResponse response)
面試題一 ServletContext域與Request域的生命周期比較?
ServletContext:
建立:伺服器啟動
銷毀:伺服器關閉
域的作用範圍:整個web應用
request:
建立:通路時建立request
銷毀:響應結束request銷毀
域的作用範圍:一次請求中
面試題二 轉發與重定向的差別?
1)重定向兩次請求,轉發一次請求
2)重定向位址欄的位址變化,轉發位址不變
3)重新定向可以通路外部網站 轉發隻能通路内部資源
4)轉發的性能要優于重定向
面試題三 用戶端位址與伺服器端位址的寫法?
用戶端位址:
是用戶端去通路伺服器的位址,伺服器外部的位址,特點:寫上web應用名 稱
eg: 直接輸入位址,重定向
伺服器端位址:
伺服器内部資源的跳轉的位址,特點:不需要寫web應用的名稱
eg: 轉發