JavaWeb 之 HttpServletRequest 類


一、Request 對象和 Response 對象原理

  request和response對象是由服務器創建的,供我們使用的。

  request對象是來獲取請求消息,response對象是來設置響應消息。

  原理示意圖

二、Request 對象繼承體系結構

  

三、HttpServletRequest 接口

  每次只要有請求進入 Tomcat 服務器,Tomcat 服務器就會把請求過來的 HTTP 協議信息解析好到 Request 對象中,每次請求都創建一個 Request 對象,請求完成后該對象就銷毀了。

  然后傳遞到 service 方法(doGet 和 doPost)中供我們使用,通過 HttpServletRequest 對象,課獲取到所有請求信息。

三、HttpServletRequest 功能

  1、獲取請求消息數據

    (1)獲取請求行數據

       常用方法:

(1)String getMethod() :         獲取請求方式
(2)String getContextPath():     獲取虛擬目錄[重要]
(3)String getServletPath():     獲取 servlet 路徑
(4)String getQueryString():     獲取get方式請求參數
(5)String getRequestURI():      獲取請求URI[重要]
(6)StringBuffer getRequestURL():獲取請求的URL
(7)String getProtocol():        獲取協議及版本
(8)String getRemoteAddr():      獲取客戶端的IP地址
(9)String getRemoteHost(): 獲取客戶端的主機名

      注意

      URI:統一資源標識符;URL:統一資源定位符;兩者區別:URI 與 URL

      Demo:

1 請求行數據 GET /servletDemo/demo1?name=zhangsan HTTP/1.1
2 String getMethod(): 獲取到 GET 3 String getContextPath(): 獲取到 /servletDemo 4 String getServletPath(): 獲取到 /demo1 5 String getQueryString(): 獲取到 name=zhangsan 6 String getRequestURI(): 獲取到 /servletDemo/demo1 7 StringBuffer getRequestURL():獲取到 http://localhost/servletDemo/demo1 8 String getProtocol(): 獲取到 HTTP/1.1 9 String getRemoteAddr():      獲取到 請求機器的IP地址

    (2)獲取請求頭數據

      常用方法:

String getHeader(String name):       通過請求頭的名稱獲取請求頭的值[重要]
Enumeration<String> getHeaderNames():獲取所有的請求頭名稱

    (3)獲取請求體數據

        請求體:只有POST請求方式,才有請求體,在請求體重封裝了POST請求的請求參數

        步驟:

        ① 獲取流對象

BufferedReader getReader():         獲取字符輸入流,只能操作字符數據
ServletInputStream getInputStream():獲取字節輸入流,可以操作所有類型數據

        ② 從流對象中拿數據

        Demo:

 1  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  2         //1.獲取字符流
 3         BufferedReader br = request.getReader();  4 
 5         //2.讀取數據
 6         String line = null;  7         while((line = br.readLine()) != null) {  8             System.out.println(line);   // 請求參數username=zs&password=abc
 9  } 10     }

  2、獲取請求參數

    獲取請求參數通用方式:無論是 get 方式還是 post 請求方式都可以使用下列方法來獲取請求參數

    常用方法

(1)String getParameter(String name):           根據參數名稱獲取參數值    username=zs&password=abc
(2)String[] getParameterValues(String name):   根據參數名稱獲取參數值的數組  hobby=java&hobby=python
(3)Enumeration<String> getParameterNames():    獲取所有請求的參數名稱(相當於Iterator)
(4)Map<String,String[]> getParameterMap():     獲取所有參數的map集合,可以根據鍵(參數名)獲取值(參數值)

           注意

       ① get方式:Tomcat 8 已經將 get 方式亂碼問題解決了

       ② post 方式:獲取中文會產生亂碼

         解決方式:在獲取參數前,設置 request 的編碼與頁面編碼一致即可

request.setCharacterEncoding("utf-8");

  3、作為域對象存取數據

     域對象:一個有作用范圍的對象,可以在范圍內共享數據;

     Request 域:代表一次請求的范圍,一般用於請求轉發的多個資源中共享數據;

     常用方法

void setAttribute(String name,Object obj):存儲數據到request中
Object getAttitude(String name):通過鍵獲取值
void removeAttribute(String name):通過鍵移除鍵值對

  4、獲取請求轉發對象

    請求的轉發:指的是服務器收到請求后,從一次資源跳轉到另一個資源的操作叫請求轉發。

          注意:這是一種在服務器內部的資源跳轉方式,無法跳轉到外部的資源。

    實現步驟:

      ① 通過 request 對象獲取請求轉發器對象;

RequestDispatcher getRequestDispatcher(String path): 獲取請求轉發器對象,path為轉發到的路徑

       ② 使用 RequestDispatcher 對象來進行轉發

forward(ServletRequest request, ServletResponse response):轉發方法

     特點:

      ① 瀏覽器地址欄路徑不會發生變化;

      ② 只能轉發到自己工程的內部資源;

      ③ 轉發是一次請求,可以共享 Request 域中的數據;

      ④ 可以轉發到 WEB-INF 目錄下

    注意

      ① 從外部(瀏覽器)無法直接訪問 WEB-INF 目錄下的資源,但是可以通過請求轉發訪問到;

      ② 執行完跳轉的 servlet 的業務后,然后再回來繼續執行原來的 servlet 的業務。

    原理圖:

      

  5、獲取 ServletContext 對象  

      通過 getServletContext() 方法獲取 ServletContext 對象:

ServletContext servletContext = request.getServletContext();通過request 對象獲取 servletcontext 對象

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM