request

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

相關文章
相關標籤/搜索