轉發:css
1 //forward(將 數據傳給下一個資源(servlet,jsp ,html等 ,把請求和響應的數據和參數設置帶過去 ) 2 request.getRequestDispatcher("/ok.jsp").forward(request, response);
重定向html
1 //重定向到 jsp頁面 2 response.sendRedirect(request.getContextPath()+"/redirect.jsp"); 3 response.sendRedirect("http://www.baidu.com");
servlet能夠直接跳轉到一個頁面:好比ok.jsp頁面
轉發和重定向 比 printwriter.print("")好, 不須要在servlet中拼裝html代碼 ,咱們只須要關注數據
請求轉發和重定向的區別
> 請求轉發是一個請求一次響應,而重定向是兩次請求兩次響應
> 請求轉發地址欄不變化,地址欄會發生改變【重定向會顯示後一個請求的地址】
> 請求轉發只能轉發到本項目其餘Servlet,而重定向不僅能重定向到本項目的其餘Servlet,還能定向到其餘項目
> 請求轉發是服務器端行爲,只需給出轉發的Servlet路徑,而重定向須要給出requestURI,即包含項目名!
> 請求轉發和重定向效率是轉發高!由於是一個請求!
<> 須要地址欄發生變化,那麼必須使用重定向!
<> 須要在下一個Servlet中獲取request域中的數據,必需要使用轉發!
>重定向的第二個請求必定是GET;
>重定向 沒法獲取 request對象中共享的數據, 由於是兩次請求和響應 ,request對象是一次請求和響應中共享request對象
代碼解釋:
轉發到ok.jspjava
1 <%@ page language="java" isELIgnored="false" import="java.util.*" pageEncoding="UTF-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9 <head> 10 <base href="<%=basePath%>"> 11 12 <title>My JSP 'ok.jsp' starting page</title> 13 <meta http-equiv="pragma" content="no-cache"> 14 <meta http-equiv="cache-control" content="no-cache"> 15 <meta http-equiv="expires" content="0"> 16 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 17 <meta http-equiv="description" content="This is my page"> 18 <!-- 19 <link rel="stylesheet" type="text/css" href="styles.css"> 20 --> 21 22 </head> 23 24 <body> 25 ${name } This is ok.JSP page....... <br> 26 </body> 27 </html>
轉發的測試java代碼:TestRequestDispatcher.java服務器
1 package boom.servlet; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 /** 10 * 測試請求轉發:<url-pattern>/TestRequestDispatcher 11 * 12 * @author Administrator 13 * 14 */ 15 public class TestRequestDispatcher extends HttpServlet { 16 @Override 17 protected void service(HttpServletRequest request, HttpServletResponse response) 18 throws ServletException, IOException { 19 // request存放數據 20 request.setAttribute("name", "servlet中設置存放的數據"); 21 // 轉發到ok.jsp頁面 22 //forward(將 數據傳給下一個資源(servlet,jsp ,html等 ,把請求和響應的數據和參數設置帶過去 ) 23 request.getRequestDispatcher("/ok.jsp").forward(request, response); 24 } 25 }
重定向到redirect.jspjsp
1 <%@ page language="java" isELIgnored="false" import="java.util.*" pageEncoding="UTF-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9 <head> 10 <base href="<%=basePath%>"> 11 12 <title>My JSP 'redirect.jsp' starting page</title> 13 14 <meta http-equiv="pragma" content="no-cache"> 15 <meta http-equiv="cache-control" content="no-cache"> 16 <meta http-equiv="expires" content="0"> 17 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 18 <meta http-equiv="description" content="This is my page"> 19 <!-- 20 <link rel="stylesheet" type="text/css" href="styles.css"> 21 --> 22 23 </head> 24 25 <body> 26 這是重定向的測試頁面This is redirect.jsp page. <br> 27 </body> 28 </html>
重定向的測試java代碼:TestRedirect.javaide
1 package boom.servlet; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 /** 10 * 測試重定向:/TestRedirect 11 * @author Administrator 12 * 13 */ 14 public class TestRedirect extends HttpServlet { 15 @Override 16 protected void service(HttpServletRequest request, HttpServletResponse response) 17 throws ServletException, IOException { 18 //request中存放數據 19 request.setAttribute("name", "測試重定向的數據"); 20 //重定向到 jsp頁面 21 //response.sendRedirect(request.getContextPath()+"/redirect.jsp"); 22 response.sendRedirect("http://www.baidu.com"); 23 24 //重定向的第二個請求必定是GET 25 String method = request.getMethod(); 26 System.out.println(method); 27 } 28 }