http請求用法詳解--requset

目錄
    一、http請求格式
    二、獲取經常使用信息
    三、獲取HTTP請求頭信息
    四、獲取請求URL
    五、獲取請求參數
    六、請求轉發和請求包含
    七、request域
    八、請求轉發 和 響應重定向 的區別
===============================================================================================
一、request --> 封裝了客戶端全部的請求數據!
    請求格式:
    --------------------------------------------------------------------------------------------
    |   * 請求首行:        例如:GET /hello/index.jsp HTTP/1.1
    |   * 請求頭:          例如:Host:localhost
    |   * 空行:
    |   * 請求體:  (GET沒體,POST纔有請求體)
    ---------------------------------------------------------------------------------------------
    截取的請求信息:
    --------------------- 請求信息以下 -----------------------------------------------------------
    |    GET /hello/index.jsp HTTP/1.1
    |    Host: localhost
    |    User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
    |    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    |    Accept-Language: zh-cn,zh;q=0.5
    |    Accept-Encoding: gzip, deflate
    |    Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
    |    Connection: keep-alive
    |    Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98[請求頭,請求頭由key/value組成。]
    |               [這個位置是空行,雖然沒有東西,但很重要。若是有請求體,那麼請求體在空行的下面]
    --------------------- GET請求沒有請求體,結束 -------------------------------------------------html

  請求協議中的數據均可以經過request對象來獲取!
二、獲取經常使用信息
        > 獲取客戶端IP:request.getRemoteAddr()  --> 192.168.18.8  案例:封鎖IP
    > 請求方式:request.getMethod()  --> GET 或 POST
三、獲取HTTP請求頭信息
    > String getHeader(String name),適用於單值頭 (經常使用)
    > Enumeration<String> getHeaders(String name),適用於多值請求頭 (瞭解)
    > int getIntHeader(String name),適用於單值int類型的請求頭 (瞭解)
    > long getDateHeader(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 getRequestURL():獲取請求URL,等於不包含參數的整個請求路徑。http://localhost:8080/day10_2/AServlet
    > String getRequestURI():獲取請求URI,等於項目名+Servlet路徑。/day10_2/AServlet服務器

五、獲取請求參數
    請求參數是由客戶端發送給服務器的!有多是在請求體中(POST),也多是在URL以後(GET)
    請求參數:有一個參數一個值的,還有一個參數多個值!
    > String getParameter(String name):獲取指定名稱的請求參數值,適用於單值請求參數。(經常使用)
    > String[] getParameterValues(String name):獲取指定名稱的請求參數值,適用於多值請求參數
    > Enumeration<String> getParameterNames():獲取全部請求參數名稱
    > Map<String,String[]> getParameterMap():獲取全部請求參數,其中key爲參數名,value爲參數值。(經常使用)
    案例:超連接參數
    案例:表單數據session

六、請求轉發和請求包含
    RequestDispatcher rd = request.getRequestDispatcher("/BServlet");
    使用request獲取RequestDispatcher對象,方法的參數是被轉發或包含的Servlet的Servlet路徑
    請求轉發:rd.forward(request,response);(經常使用)
    請求包含:rd.include(request,response);(瞭解)
    有時一個請求須要多個Servlet協做才能完成,因此須要在一個Servlet跳到另外一個Servlet,須要使用轉發或包含。
    * 請求轉發:由下一個Servlet完成響應體!當前Servlet能夠設置響應頭!(留頭不留體)
    * 請求包含:由兩個Servlet共同未完成響應體!(都留)
    不管是請求轉發仍是請求包含,都在一個請求範圍內!使用同一個request和response!
app

七、request域
    Servlet中三大域對象:request(ServletRequest)、session(HttpSession)、application(ServletContext),
    都有以下三個方法:
        * 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域中的數據,必需要使用轉發!
        <> 須要地址欄發生變化,那麼必須使用響應重定向!  jsp

                            302,響應重定向spa

相關文章
相關標籤/搜索