JAVA學習之路(3) request的總結

引言

在httpServlet類中,我們只需要調用doGet和doPost方法即可以實現對應的功能。對應這兩個方法,有兩個穿進去的參數對象,一個是response,一個是request。

通過對request和response的操作,實現對每次請求的處理。今天主要就是學習request的功能實現。

Request對請求行數據的操作

最重要的信息是:請求方式,請求url,請求協議

  • 獲取請求方式 :GET

    • String getMethod()
  • 獲取虛擬目錄:即是項目部署的根目錄

    • String getContextPath()
  • 獲取Servlet路徑: 就是當前對象相對於根目錄的路徑

    • String getServletPath()
  • 獲取get方式請求參數:即get方式傳遞的信息參數

    • String getQueryString()
  • 獲取請求URI:就是當前對象的絕對路徑(加上了根目錄)

    • String getRequestURI():
    • StringBuffer getRequestURL()

    注:URI和URL的區別:URL是URI的子集,URL強調是利用地址來唯一標識資源。

  • 獲取協議及版本:HTTP/1.1

    • String getProtocol()
  • 獲取客戶機的IP地址:

    • String getRemoteAddr()

Request對請求頭數據的操作

請求頭最重要信息:瀏覽器客戶端,訪問來源。

  • 獲取請求頭數據

    • 方法:
      • (*)String getHeader(String name):通過請求頭的名稱獲取請求頭的值
      • Enumeration getHeaderNames():獲取所有的請求頭名稱

    其中最重要的兩個name是User-Agent和Refere,分佈是瀏覽器客戶端,訪問來源。通過String getHeader(String name):通過請求頭的名稱獲取對應的值。

Request對請求頭數據的操作

  • 獲取請求體數據:

    • 請求體:只有POST請求方式,纔有請求體,在請求體中封裝了POST請求的請求參數
    • 步驟:
      1. 獲取流對象
        • BufferedReader getReader():獲取字符輸入流,只能操作字符數據
        • ServletInputStream getInputStream():獲取字節輸入流,可以操作所有類型數據
          • 在文件上傳知識點後講解
      2. 再從流對象中拿數據

    通用方式

    如果我們用上面的方法請求參數的話,可能需要根據post和get方法寫不同的代碼,java提供了通用的方式,使得我們只需要在get裏面寫這樣一行:

             this.doPost(request,response);
  1. String getParameter(String name):根據參數名稱獲取參數值

  2. String[] getParameterValues(String name):根據參數名稱獲取參數值的數組

  3. Enumeration getParameterNames():獲取所有請求的參數名稱

    這裏的Enumeration應當視爲一種迭代器,使用迭代器的方式進行操作。如:

    Enumeration<String> parameterNames = request.getParameterNames();
            while (parameterNames.hasMoreElements())
            {
                String s = parameterNames.nextElement();
                String parameterValues = request.getParameter(s);
                request.setAttribute(s,parameterValues);
                System.out.println(s+":"+parameterValues);
            }
    

​ 4. Map<String,String[]> getParameterMap():獲取所有參數的map集合

中文亂碼問題

get方式:換用tomcat8及以上。

post方式:在獲取參數前,設置request的編碼

       request.setCharacterEncoding("utf-8");

請求轉發

定義:服務器內部的資源跳轉

用處:一個項目有多個servlet,可能需要多個servlet完成一個任務,數據可能再多個servlet多次跳轉。

相關函數:

 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/demoq");
 requestDispatcher.forward(request,response);

第一行是聲明一個轉發對象,該轉發對象有一個forward方法,可以繼續調用另外一個servlet,不過在瀏覽器的地址欄是不會改變的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章