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 }
請求轉發:留頭不留體

請求包含:留頭又留體