WBE15—HttpServletRequest

1.HttpServletRequest概述

我們在創建Servlet時會覆蓋service()方法,或doGet()/doPost(),這些方法都有兩個參數,一個爲代表請求的request和代表響應response。

service方法中的request的類型是ServletRequest,而doGet/doPost方法的request的類型是HttpServletRequest,HttpServletRequest是ServletRequest的子接口,功能和方法更加強大,今天我們學習HttpServletRequest。

2.request的運行流程

3.通過抓包工具抓取Http請求


因爲request代表請求,所以我們可以通過該對象分別獲得Http請求的請求行,請 求頭和請求體

4.通過request獲得請求行

獲得客戶端的請求方式:String getMethod()

獲得請求的資源:

    String getRequestURI() 

    StringBuffer getRequestURL() 

    String getContextPath() ---web應用的名稱

    String getQueryString() ---- get提交url地址後的參數字符串

    username=zhangsan&password=123

注意:request獲得客戶機(客戶端)的一些信息

request.getRemoteAddr() --- 獲得訪問的客戶端IP地址

5.通過request獲得請求頭

    long getDateHeader(String name)

    String getHeader(String name)

    Enumeration getHeaderNames()

    Enumeration getHeaders(String name)

    int getIntHeader(String name)

referer頭的作用:執行該此訪問的的來源

做防盜鏈

6.通過request獲得請求體

請求體中的內容是通過post提交的請求參數,格式是:

username=zhangsan&password=123&hobby=football&hobby=basketball

key ---------------------- value

    username [zhangsan]

    password [123]

    hobby [football,basketball]

以上面參數爲例,通過一下方法獲得請求參數:

    String getParameter(String name) 

    String[] getParameterValues(String name)

    Enumeration getParameterNames()

    Map<String,String[]> getParameterMap() 

注意:

    get請求方式的請求參數 上述的方法一樣可以獲得

    解決post提交方式的亂碼:request.setCharacterEncoding("UTF-8");

    解決get提交的方式的亂碼:

        parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");

7.request的其他功能

(1)request是一個域對象

request對象也是一個存儲數據的區域對象,所以也具有如下方法:

    setAttribute(String name, Object o)

    getAttribute(String name)

    removeAttribute(String name)

注意:request域的作用範圍:一次請求中

(2)request完成請求轉發

獲得請求轉發器----path是轉發的地址

    RequestDispatcher getRequestDispatcher(String path)

通過轉發器對象轉發

    requestDispathcer.forward(ServletRequest request, ServletResponse response)

注意:ServletContext域與Request域的生命週期比較?

    ServletContext:

        創建:服務器啓動

        銷燬:服務器關閉

     域的作用範圍:整個web應用

    request

        創建:訪問時創建request

        銷燬:響應結束request銷燬

            域的作用範圍:一次請求中

注意:轉發與重定向的區別?

    1)重定向兩次請求,轉發一次請求

    2)重定向地址欄的地址變化,轉發地址不變

    3)重新定向可以訪問外部網站 轉發只能訪問內部資源

    4)轉發的性能要優於重定向

注意:客戶端地址與服務器端地址的寫法?

客戶端地址:

    是客戶端去訪問服務器的地址,服務器外部的地址,特點:寫上web應用名

直接輸入地址:

        重定向

服務器端地址:

    服務器內部資源的跳轉的地址,特點:不需要寫web應用的名稱

        轉發

總結:

    request獲得行的內容

        request.getMethod()

        request.getRequestURI()

        request.getRequestURL()

        request.getContextPath()

        request.getRemoteAddr()

    request獲得頭的內容

        request.getHeader(name)

        request獲得體(請求參數)

        String request.getParameter(name)

        Map<String,String[]> request.getParameterMap();

        String[] request.getParameterValues(name);

注意:客戶端發送的參數 到服務器端都是字符串

獲得中文亂碼的解決:

    post:    request.setCharacterEncoding(“UTF-8”);

    get:

        parameter = new String(parameter.getBytes(“iso8859-1”),”UTF-8”);

request轉發和域

    request.getRequestDispatcher(轉發的地址).forward(req,resp);

    request.setAttribute(name,value)

    request.getAttribute(name)

發佈了70 篇原創文章 · 獲贊 20 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章