JavaWeb中的 請求轉發 和 重定向


請求轉發:forward();            重定向:sendRedirect()

來看具體實例:

在HTML頁面寫兩個a鏈接請求,這個就是get請求了,然后建立與請求對應的servlet,頁面代碼如下所示:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>請求轉發實例</title>
 6 </head>
 7 <body>
 8 <h2 style="text-align: center;">Forward測試頁面</h2>
 9 <a href="fowardServlet">foward請求</a>
10 <br/></br/>
11 <a href="sendServlet">send重定向</a>
12 </body>
13 </html>

然后建立 請求轉發ForWardServlet,並且在web.xml中配置,這個就不說了

 1 package com.servlet;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.RequestDispatcher;
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 public class ForwardServlet extends HttpServlet {
12     private static final long serialVersionUID = 1L;
13 
14     protected void doGet(HttpServletRequest request, HttpServletResponse response)
15             throws ServletException, IOException {
16         request.setAttribute("forward_name", "abcde");
17         System.out.println("請求轉發獲取的屬性:" + request.getAttribute("forward_name"));
18         System.out.println("ForwardServlet 的 doGet()方法");
19         // 轉發請求
20         String path = "testServlet";
21         RequestDispatcher requestDispatcher = request.getRequestDispatcher("/" + path);
22         requestDispatcher.forward(request, response);
23     }
24 
25 }

再建立 請求重定向SendServlet,並且在web.xml中配置,這個也就不說了

 1 package com.servlet;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 @WebServlet(name = "sendServlet", urlPatterns = "/sendServlet")
12 public class SendServlet extends HttpServlet {
13     private static final long serialVersionUID = 1L;
14 
15     protected void doGet(HttpServletRequest request, HttpServletResponse response)
16             throws ServletException, IOException {
17         request.setAttribute("send_name", "abcde");
18         System.out.println("重定向獲取的屬性:" + request.getAttribute("send_name"));
19         System.out.println("SendServlet 的doGet 方法");
20         String path = "testServlet";
21         response.sendRedirect(path);
22 
23     }
24 
25 }
然后建立path中所提到的 TestServlet
 1 package com.servlet;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.annotation.WebServlet;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 @WebServlet("/testServlet")
12 public class TestServlet extends HttpServlet {
13     private static final long serialVersionUID = 1L;
14 
15     protected void doGet(HttpServletRequest request, HttpServletResponse response)
16             throws ServletException, IOException {
17         // TODO Auto-generated method stub
18         System.out.println("TestServlet 的 doGet 方法");
19 
20         System.out.println("測試請求轉發獲取的屬性:" + request.getAttribute("forward_name"));
21 
22         System.out.println("測試重定向獲取的屬性:" + request.getAttribute("send_name"));
23     }
24 
25 }

好了,接下來就是看請求轉發和重定向的主要區別:

(1) 請求轉發forward 只有一次請求,而重定向是兩次請求:

(2)請求轉發:在最終的 servlet (TestServlet) 中,request和中轉的那個servlet(ForwardServlet)中的request對象是同一個對象

重定向:在最終的 servlet (TestServlet) 中,request和中轉的那個servlet(SendServlet)中的request對象不是同一個對象

(3)請求轉發:地址欄中的url是初次發起請求的地址

   重定向:地址欄中的url是最終響應的的那個地址

 (3)請求轉發:僅限於當前web應用內,"/"代表當前web應用的根目錄

 請求重定向:可以定向到任何資源,"/"代表當前web站點的根目錄


免責聲明!

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



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