Request

HTTP

* 概念:Hyper Text Transfer Protocol 超文本傳輸協議
    * 傳輸協議:定義了,客戶端和服務器端通訊時,發送數據的格式
    * 特色:
        1. 基於TCP/IP的高級協議
        2. 默認端口號:80
        3. 基於請求/響應模型的:一次請求對應一次響應
        4. 無狀態的:每次請求之間相互獨立,不能交互數據

    * 歷史版本:
        * 1.0:每一次請求響應都會創建新的鏈接
        * 1.1:複用鏈接

* 請求消息數據格式
    1. 請求行
        請求方式 請求url 請求協議/版本
        GET /login.html HTTP/1.1

        * 請求方式:
            * HTTP協議有7中請求方式,經常使用的有2種
                * GET:
                    1. 請求參數在請求行中,在url後。
                    2. 請求的url長度有限制的
                    3. 不太安全
                * POST:
                    1. 請求參數在請求體中
                    2. 請求的url長度沒有限制的
                    3. 相對安全
    2. 請求頭:客戶端瀏覽器告訴服務器一些信息
        請求頭名稱: 請求頭值
        * 常見的請求頭:
            1. User-Agent:瀏覽器告訴服務器,我訪問你使用的瀏覽器版本信息
                * 能夠在服務器端獲取該頭的信息,解決瀏覽器的兼容性問題

            2. Referer:http://localhost/login.html
                * 告訴服務器,我(當前請求)從哪裏來?
                    * 做用:
                        1. 防盜鏈:
                        2. 統計工做:
    3. 請求空行
        空行,就是用於分割POST請求的請求頭,和請求體的。
    4. 請求體(正文):
        * 封裝POST請求消息的請求參數的

    * 字符串格式:
        POST /login.html    HTTP/1.1
        Host: localhost
        User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
        Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
        Accept-Encoding: gzip, deflate
        Referer: http://localhost/login.html
        Connection: keep-alive
        Upgrade-Insecure-Requests: 1
        
        username=zhangsan   

* 響應消息數據格式

Request:

1. request對象和response對象的原理
    1. request和response對象是由服務器建立的。咱們來使用它們
    2. request對象是來獲取請求消息,response對象是來設置響應消息

2. request對象繼承體系結構: 
    ServletRequest      --  接口
        |   繼承
    HttpServletRequest  -- 接口
        |   實現
    org.apache.catalina.connector.RequestFacade 類(tomcat)

3. request功能:
    1. 獲取請求消息數據
        1. 獲取請求行數據
            * GET /day14/demo1?name=zhangsan HTTP/1.1
            * 方法:
                1. 獲取請求方式 :GET
                    * String getMethod()  
                2. (*)獲取虛擬目錄:/day14
                    * String getContextPath()
                3. 獲取Servlet路徑: /demo1
                    * String getServletPath()
                4. 獲取get方式請求參數:name=zhangsan
                    * String getQueryString()
                5. (*)獲取請求URI:/day14/demo1
                    * String getRequestURI():       /day14/demo1
                    * StringBuffer getRequestURL()  :http://localhost/day14/demo1

                    * URL:統一資源定位符 : http://localhost/day14/demo1    中華人民共和國
                    * URI:統一資源標識符 : /day14/demo1                    共和國
                
                6. 獲取協議及版本:HTTP/1.1
                    * String getProtocol()

                7. 獲取客戶機的IP地址:
                    * String getRemoteAddr()
                
        2. 獲取請求頭數據
            * 方法:
                * (*)String getHeader(String name):經過請求頭的名稱獲取請求頭的值
                * Enumeration<String> getHeaderNames():獲取全部的請求頭名稱
            
        3. 獲取請求體數據:
            * 請求體:只有POST請求方式,纔有請求體,在請求體中封裝了POST請求的請求參數
            * 步驟:
                1. 獲取流對象
                    *  BufferedReader getReader():獲取字符輸入流,只能操做字符數據
                    *  ServletInputStream getInputStream():獲取字節輸入流,能夠操做全部類型數據
                        * 在文件上傳知識點後講解

                2. 再從流對象中拿數據

    2. 其餘功能:
        1. 獲取請求參數通用方式:不論get仍是post請求方式均可以使用下列方法來獲取請求參數
            1. String getParameter(String name):根據參數名稱獲取參數值    username=zs&password=123
            2. String[] getParameterValues(String name):根據參數名稱獲取參數值的數組  hobby=xx&hobby=game
            3. Enumeration<String> getParameterNames():獲取全部請求的參數名稱
            4. Map<String,String[]> getParameterMap():獲取全部參數的map集合

            * 中文亂碼問題:
                * get方式:tomcat 8 已經將get方式亂碼問題解決了
                * post方式:會亂碼
                    * 解決:在獲取參數前,設置request的編碼request.setCharacterEncoding("utf-8");



        2. 請求轉發:一種在服務器內部的資源跳轉方式
            1. 步驟:
                1. 經過request對象獲取請求轉發器對象:RequestDispatcher getRequestDispatcher(String path)
                2. 使用RequestDispatcher對象來進行轉發:forward(ServletRequest request, ServletResponse response) 

            2. 特色:
                1. 瀏覽器地址欄路徑不發生變化
                2. 只能轉發到當前服務器內部資源中。
                3. 轉發是一次請求

        3. 共享數據:
            * 域對象:一個有做用範圍的對象,能夠在範圍內共享數據
            * request域:表明一次請求的範圍,通常用於請求轉發的多個資源中共享數據
            * 方法:
                1. void setAttribute(String name,Object obj):存儲數據
                2. Object getAttitude(String name):經過鍵獲取值
                3. void removeAttribute(String name):經過鍵移除鍵值對

        4. 獲取ServletContext:
            * ServletContext getServletContext()
相關文章
相關標籤/搜索