request --> 封裝了客戶端全部的請求數據!
請求行
請求頭
空行
請求體(GET沒體)瀏覽器
回憶一下http協議!請求協議中的數據均可以經過request對象來獲取!
* 獲取經常使用信息
> 獲取客戶端IP,案例:封IP。request.getRemoteAddr()
> 請求方式,request.getMethod(),多是POST也多是GET
* 獲取HTTP請求頭
> *****String getHeader(String name),適用於單值頭
> int getIntHeader(String name),適用於單值int類型的請求頭
> long getDateHeader(String name),適用於單值毫秒類型的請求頭
> Enumeration<String> getHeaders(String name),適用於多值請求頭服務器
案例:
> 經過User-Agent識別用戶瀏覽器類型
> 防盜鏈:若是請求不是經過本站的超連接發出的,發送錯誤狀態碼404。Referer這個請求頭,表示請求的來源!
* 獲取請求URL
http://localhost:8080/day10_2/AServlet?username=xxx&password=yyy
> String getScheme():獲取協議,http
> String getServerName():獲取服務器名,localhost
> String getServerPort():獲取服務器端口,8080
> *****String getContextPath():獲取項目名,/day10_2
> String getServletPath():獲取Servlet路徑,/AServlet
> String getQueryString():獲取參數部分,即問號後面的部分。username=xxx&password=yyy
> String getRequestURI():獲取請求URI,等於項目名+Servlet路徑。/day10_2/AServlet
> String getRequestURL():獲取請求URL,等於不包含參數的整個請求路徑。http://localhost:8080/day10_2/AServletsession
* 獲取請求參數:請求參數是由客戶端發送給服務器的!有多是在請求體中(POST),也多是在URL以後(GET)
請求參數:有一個參數一個值的,還有一個參數多個值!
> *****String getParameter(String name):獲取指定名稱的請求參數值,適用於單值請求參數
> String[] getParameterValues(String name):獲取指定名稱的請求參數值,適用於多值請求參數
> Enumeration<String> getParameterNames():獲取全部請求參數名稱
> *****Map<String,String[]> getParameterMap():獲取全部請求參數,其中key爲參數名,value爲參數值。
案例:超連接參數
案例:表單數據app
* 請求轉發和請求包含
RequestDispatcher rd = request.getRequestDispatcher("/MyServlet"); 使用request獲取RequestDispatcher對象,方法的參數是被轉發或包含的Servlet的Servlet路徑
請求轉發:*****rd.forward(request,response);
請求包含:rd.include(request,response);spa
有時一個請求須要多個Servlet協做才能完成,因此須要在一個Servlet跳到另外一個Servlet!
> 一個請求跨多個Servlet,須要使用轉發和包含。
> 請求轉發:由下一個Servlet完成響應體!當前Servlet能夠設置響應頭!(留頭不留體)
> 請求包含:由兩個Servlet共同未完成響應體!(都留)
> 不管是請求轉發仍是請求包含,都在一個請求範圍內!使用同一個request和response!
* request域
Servlet中三大域對象:request、session、application,都有以下三個方法:
> void setAttribute(String name, Object value)
> Object getAttribute(String name)
> void removeAttribute(String name);
> 同一請求範圍內使用request.setAttribute()、request.getAttribute()來傳值!前一個Servlet調用setAttribute()保存值,後一個Servlet調用getAttribute()獲取值。對象
* 請求轉發和重定向的區別
> 請求轉發是一個請求一次響應,而重定向是兩次請求兩次響應
> 請求轉發地址欄不變化,而重定向會顯示後一個請求的地址
> 請求轉發只能轉發到本項目其餘Servlet,而重定向不僅能重定向到本項目的其餘Servlet,還能定向到其餘項目
> 請求轉發是服務器端行爲,只需給出轉發的Servlet路徑,而重定向須要給出requestURI,即包含項目名!
> 請求轉發和重定向效率是轉發高!由於是一個請求!
<> 須要地址欄發生變化,那麼必須使用重定向!
<> 須要在下一個Servlet中獲取request域中的數據,必需要使用轉發!
------------------------------------------------------------------------------------------------------------------------------rem