Java web基礎總結五之—— HttpServletRequest與HttpServletResponse

來源:互聯網
上載者:User

標籤:java web   redirect   httpservletrequest   httpservletresponse   forward   

Java web基礎總結五之—— HttpServletRequest與HttpServletResponse

         在前面總結過,每當用戶端給Web伺服器發送一個http請求,web伺服器就會針對每一次請求,分別建立一個用於代表請求的request對象、和代表響應的response對象。request和response對象就代表請求和響應,所以我們可以通過request對象獲得請求相關的資料和操作。通過response對象進行對響應相關的資料封裝和一些其他的操作。

一.HttpServletRequest與HttpServletResponse的實作類別

       我們會發現,HttpServletRequest與HttpServletResponse都是介面,那麼它們在啟動並執行時候的實作類別是什嗎?是由誰負責執行個體化它們的實作類別呢?

     通過對上一篇文章的HelloWorldServlet進行調試,可以得到答案。HelloWorldServlet的部分代碼的如下所示:


     這張圖是調試時獲得的:


         通過上面的圖我們可以看到,HttpServletRequest與HttpServletResponse的對象req,resp的實際的類型是RequestFacade和ResponseFacade。這兩個類都是org.apache.catalina.connector包下面的。也就是我使用的web伺服器tomcat的兩個類。所以還是由web容器來負責執行個體化HttpServletRequest與HttpServletResponse的對象。

二.HttpServletRequest簡介

     HttpServletRequest對象代表用戶端的請求,當用戶端通過HTTP協議訪問伺服器時,HTTP要求標頭中的所有資訊都封裝在這個對象中。

     request常用的方法和操作:

1.獲得用戶端的資訊

getRequestURL方法返回用戶端發出請求時的完整URL。

getRequestURI方法返回請求行中的資源名部分,去掉主機名稱的部分。

getRemoteAddr方法返回傳出請求的客戶機的IP地址

getRemoteHost方法返回傳出請求的客戶機的完整主機名稱

getRemotePort方法返回客戶機所使用的連接埠號碼

getLocalAddr方法返回WEB伺服器的IP地址。

getLocalName方法返回WEB伺服器的主機名稱

getMethod得到客戶機請求方式,如GET,POST

2.獲得要求標頭的一些方法

getHead(name)方法

getHeaders(String name)方法

getHeaderNames方法

3.獲得請求參數,也就是用戶端提交的資料的一些方法。

getParameter(name)方法

getParameterValues(String name)方法

getParameterNames方法

getParameterMap方法 

 

4.HttpServletRequest實現轉寄

        請求轉寄指一個web資源收到用戶端請求後,通知伺服器去調用另外一個web資源進行處理。request對象提供了一個getRequestDispatcher方法,該方法返回一個RequestDispatcher對象,調用這個對象的forward方法可以實現請求轉寄。

5. request域

         request對象同時也是一個域對象,我們通過request對象在實現轉寄時,可以把資料通過request對象帶給其它web資源處理。下面是常用的一些對域中的屬性的操作的方法:

setAttribute方法

getAttribute方法 

removeAttribute方法

getAttributeNames方法

6. Request的getParameter和getAttribute方法的區別。

       由於request也是一個域對象,所以既可以從它獲得參數,即Parameter。也可以獲得域中的屬性。但是他們的意義是完全不一樣的。

        getParameter(String  name)獲得用戶端傳送給伺服器的參數值,該參數是由name指定的,通常是表單中的參數。而且參數只能是字串形式的鍵值對。

         getAttribute(String  name):返回有name 指定的屬性值,如果指定的屬性值不存在,則會返回一個null值。這裡存放的也是一個鍵值對,不同的是,這裡的值可以是任意的類型。

 

三.HttpServletResponse簡介

   HttpServletResponse則是對伺服器的響應對象。這個對象中封裝了向用戶端發送資料、發送回應標頭,發送響應狀態代碼的方法。

   

response常用的方法和操作:

1.常用的方法

addCookie(Cookie cookie)  向用戶端寫入Cookie

addHeader(java.lang.String name, java.lang.String value) 寫入給定的回應標頭

encodeURL(java.lang.Stringurl) 預設cookie中包含Session ID,如果用戶端不支援 Cookie,就在參數 url 中加入 Session ID 資訊,可以解決使用者禁用cookie的問題。

setStatus(intsc)  設定響應的狀態代碼。

 

2. getOutputStream和getWriter方法的區別

getOutputStream和getWriter方法分別用於得到輸出位元據、輸出文本資料的ServletOuputStream、Printwriter對象。getOutputStream和getWriter這兩個方法互斥,調用了其中的任何一個方法後,就不能再調用另一方法。 

這兩個方法寫入的資料會作為響應訊息的本文,與響應狀態行和各回應標頭組合後輸出到用戶端。Serlvet的service方法結束後,web容器將檢查getWriter或getOutputStream方法返回的輸出資料流對象是否已經調用過close方法,如果沒有,web容器將調用close方法關閉該輸出資料流對象。

3. HttpServletResponse實現重新導向

       重新導向指的是一個web資源收到用戶端請求後,web伺服器通知用戶端去訪問另外一個web資源,這稱之為請求重新導向。實現方式是調用response.sendRedirect()方法。實現的原理就是給用戶端返回了302狀態代碼和location頭。

 

四.轉寄forward和重新導向Redirect的區別

        轉寄是在伺服器端實現的。一個web資源收到用戶端請求後,通知伺服器去調用另外一個web資源進行處理,稱之為請求轉寄。調用RequestDispatcher.forward 方法的請求轉寄過程結束後,瀏覽器地址欄保持初始的URL地址不變。

        而重新導向是在用戶端實現的。一個web資源收到用戶端請求後,通知用戶端的瀏覽器去訪問另外一個web資源,稱之為請求重新導向。所以調用HttpServletResponse.sendRedirect方法重新導向的訪問過程結束後,瀏覽器地址欄中顯示的URL會發生改變,由初始的URL地址變成重新導向的目標URL。

         RequestDispatcher.forward方法只能將請求轉寄給同一個WEB應用中的其他資源; sendRedirect方法還可以重新導向到同一個網站上的其他應用程式中的資源,甚至是使用絕對URL重新導向到其他網站的資源。

         HttpServletResponse.sendRedirect方法對瀏覽器的請求直接作出響應,響應的結果就是告訴瀏覽器去重新發出對另外一個URL的訪問請求;RequestDispatcher.forward方法在伺服器端將請求轉寄給另外一個資源,相當過程於對用戶端不可見。

         RequestDispatcher.forward方法的調用者與被調用者之間共用相同的request對象和response對象,它們屬於同一個訪問請求和響應過程;而HttpServletResponse.sendRedirect方法調用者與被調用者使用各自的request對象和response對象,它們屬於兩個獨立的訪問請求和響應過程。也就是說,重新導向產生了新的request對象和response對象。

Java web基礎總結五之—— HttpServletRequest與HttpServletResponse

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.