請求轉發和請求包含和重定向之間的區別


 

 1 package com.sn.servlet.forward;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.annotation.WebServlet;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 /**
11  * Servlet implementation class OneServlet
12  */
13 @WebServlet("/OneServlet")
14     /**
15      * 請求轉發和請求包含和重定向之間的區別
16      * @author Administrator
17      *
18      */
19 public class OneServlet extends HttpServlet {
20     /**
21      *   1.response:服務器端向客戶端發送數據,主要設置一些響應。
22      *   2.request:訪問任何客戶端,可以用post方法傳遞參數和get方法發出請求。
23      *   3.get和post在表單中既可以是get請求,也可以是post請求。
24      *   注意:請求轉發和請求包含都是一個請求。
25      *   4.請求轉發:留頭不留體
26      *   5.請求包含:留頭又留體
27      *
28      *   6.servlet中的三大域對象分別是:
29      *   1)、Request
30      *   2)、Session
31      *   3)、application
32      *   共同點:都有這三個方法:
33      *   void setAttribute(String name,Object value);儲存一個對象 
34      *     Object getAttribute(String name);獲取數據 
35      *   void removeAttribute(String name);移除屬性 
36      *   注意:如果一個servlet中存儲了一個對象,然后重定向后,然后在獲取數據,是不可以獲取到的,因為已經被重定向了,他會在新的servlet創建一個新的request。
37      *          如果在一個servlet中存儲了一個對象,請求轉發和請求包含都可以使用getAttribute獲取數據,因為是只有一個請求。
38      *   三個域對象都可以存放數據。
39      *   注意:request可以存放數據,但是只會在一個請求范圍內。
40      *   7.請求轉發和重定向之間的區別:
41      *   >請求轉發是一個請求一個響應,重定向是兩次請求兩次響應
42      *   >請求轉發瀏覽器地址欄不會發生變,重定向的瀏覽器地址欄會發生變化
43      *   >請求轉發只能轉發到本項目的其他serlvet中,重定向不但可以重定向到本項目的其他servlet中還可以重定向到其他項目
44      *   >請求轉發是服務端行為,只要給出轉發的servlet路徑,重定向需要給requestURI和項目名
45      *   >請求轉發效率能搞,因為只有一次請求
46      *   總結:通過學習了請求轉發,掌握了以上知識點,這些以后會經常用到。一定要弄清楚服務器端和客戶端。
47      *   
48      */
49     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
50         System.out.println("OneServlet");  //打印在控制台
51         response.setHeader("vip", "VIP");  //設置響應頭
52         response.getWriter().print("OneServlet......");  //設置響應體,主要是向瀏覽器輸出
53         request.setAttribute("name", "wangcai");   //setAttribute:設置屬性及屬性值,屬性:name,屬性值:wangcai
54         //request.getRequestDispatcher("/TwoServlet").forward(request, response);  //請求轉發。forward:轉發
55         request.getRequestDispatcher("/TwoServlet").include(request, response);  //請求包含。include:包含
56     }
57 
58 }
 1 package com.sn.servlet.forward;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.annotation.WebServlet;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 /**
11  * Servlet implementation class TwoServlet
12  */
13 @WebServlet("/TwoServlet")
14 public class TwoServlet extends HttpServlet {
15     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
16         System.out.println("TwoServlet");  //打印在控制台
17         String s = (String) request.getAttribute("name");  //通過屬性名獲取屬性值,因為是obj,所以需要強轉
18         response.getWriter().print(s);  //設置響應體,向瀏覽器輸出
19     }
20 
21 }
請求轉發:留頭不留體

 請求包含:留頭又留體

 

 
         

 

 


免責聲明!

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



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