求轉發和包含之練習求及_第1頁
求轉發和包含之練習求及_第2頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、請求及包含練習通過上一節對 HYPERLINK ././轉發和包含介紹/文檔/轉發和包含介紹.doc 請求及轉發的介紹,我們對請求轉發和請求包含有了一定的了解,為了更深入的理解請求轉發和請求包含,下面通過兩個案例分別對請求轉發和請求包含進行講解,案例詳情請參考 HYPERLINK ./代碼/轉發和包含案例詳解.doc 轉發和包含案例詳解,案例源代碼請點擊此處下載,具體如下所示:請求轉發練習通過上一節的學習,我們知道,請求轉發有一個特性就是“留頭不留體”,這個特性是針對請求鏈中的第一個Servlet。下面通過一個案例來詳細了解,具體步驟如下:(1)創建web應用Example10,在該應用下新建

2、一個Servlet類,OneServlet,主要代碼如例1-1所示:例1-1 OneServlet.javapublic class OneServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException System.out.println(OneServlet.); /在OneServlet中設置響應頭 response.setHeader(one, hello); /使用res

3、ponse向瀏覽器輸出響應體 response.getWriter().write(hello OneServlet); /由OneServlet轉發到TwoServlet request.getRequestDispatcher(/TwoServlet).forward(request, response);在OneServlet中,首先在控制臺打印“OneServlet .”,這里需要注意的是,在控制臺打印信息和向瀏覽器端輸出響應信息是不一樣的,大家不要弄混淆了。然后設置名為“one“的響應頭,我們可以通過HttpWatch工具來查看該響應頭是否發送給了瀏覽器。接著向瀏覽器端輸出響應體,最

4、后再轉發給TwoServlet。(2)再次新建一個Servlet類,TwoServlet,主要代碼如下所示:public class TwoServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException System.out.println(TwoServlet.); /使用response向瀏覽器端輸出響應 response.getWriter().write(hello Two

5、Servlet);在TwoServlet中,先在控制臺打印“TwoServlet .”,然后再向瀏覽器端輸出響應“hello TwoServlet”。.(3)將Example10發布到Tomcat服務器中,然后啟動服務器,在瀏覽器端輸入:http:/localhost:8080/Example10/OneServlet,并使用HttpWatch抓包工具,瀏覽器顯示結果如圖1-1所示:圖1-1 瀏覽器顯示結果圖1-1中,只輸出了TwoServlet的響應內容,OneServlet的響應內容并沒有輸出,響應內容存放在response的緩沖區中(以后們會詳細講解),在請求轉發時,response緩沖

6、區的內容會被清空,因此OneServlet的內容不會響應在瀏覽器端。(4)HttpWatch抓包工具抓取結果如圖1-2所示:圖1-2 抓取響應(5)控制臺打印結果如圖1-3所示:圖1-3 控制臺打印結果以上案例的運行結果驗證了請求轉發的“留頭不留體”的特點。還有一種情況,OneServlet可以在瀏覽器端輸出響應,但是一旦輸出,就會拋出異常,如下所示:(6)修改OneServlet類的doGet()方法,如例1-3所示:public void doGet(HttpServletRequest request, HttpServletResponse response)throws Servle

7、tException, IOException System.out.println(OneServlet.); /在OneServlet中設置響應頭 response.setHeader(one, hello); /使用response向瀏覽器輸出響應體 for(int i=0;i1024*24+1;i+) response.getWriter().write(hello); /response.getWriter().write(hello OneServlet); /由OneServlet轉發到TwoServlet request.getRequestDispatcher(/TwoSer

8、vlet).forward(request, response);例1-3中,對OneServlet的doGet()方法進行了修改,使用response向瀏覽器端輸出24kb的響應體,然后再轉發到TwoServlet中。response緩沖區中的內容如果超過了8kb,就會向瀏覽器端輸出。(7)重新啟動服務器,在瀏覽器端重新訪問OneServlet,瀏覽器顯示結果如圖1-4所示:圖1-4 瀏覽器顯示結果(8)圖1-4中,瀏覽器顯示的是OneServlet的響應體內容,而TwoServlet響應體的內容并沒有在瀏覽器端輸出,控制臺出現如圖1-5所示:圖1-5 控制臺異常打印由圖1-5所示可知,當O

9、neServlet向瀏覽器輸出響應,TwoServlet的響應就不會輸出到瀏覽器端,并且會拋出異常,原因是由于在轉發之前,response已經向瀏覽器端做出了響應。大家在以后的開發中,如果使用請求轉發就盡量不要在請求鏈中的第一個Servlet,如OneServlet,向瀏覽器響應響應體。請求包含練習請求包含和請求轉發都是在一個請求中,涉及多個Servlet,其中請求轉發的特點是“留頭不留體”,而請求包含的特點是“留頭又留體”。下面通過一個案例來詳細了解:(1)在Example10中,新建一個Servlet類,ThreeServlet ,主要代碼如例1-4所示:例1-4 ThreeServlet

10、.javapublic class ThreeServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException System.out.println(ThreeServlet.); /設置響應頭 response.setHeader(Three, hello); /設置響應體 response.getWriter().write(hello ThreeServlet); /請求包含F

11、ourServlet request.getRequestDispatcher(/FourServlet).include(request, response);在例1-4中,首先在控制臺上打印“ThreeServlet.”,接著設置響應頭,然后設置響應體,最后請求包含FourServlet 。(2)再次新建一個Servlet類,FourServlet,主要代碼如例1-5所示:例1-5 FourServlet.javapublic class FourServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException System.out.println(FourServlet.); response.getWriter().write(hello FourServlet);(3)重新啟動服

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論