sendRedirect和forward方法的區別


sendRedirect()和forward()方法的區別

 

HttpServletResponse接口的sendRedirect()方法和RequestDispatcher接口的forward()方法都可以利用另外的資源(Servlet、JSP頁面或HTML文件)來為客戶端進行服務,但是這兩種方法有着本質上的區別。

 

下面分別給出sendRedirect()方法和forward()方法的工作原理圖:

 

 

 

交互過程如下:

1) 瀏覽器訪問Servlet1;

2) Servlet1想讓Servlet2為客戶端服務;

3) Servlet1調用sendRedirect()方法,將客戶端的請求重定向到Servlet2;

4) 瀏覽器訪問Servlet2;

5) Servlet2對客戶端的請求做出響應。

 

我們可以看出,調用sendRedirect()方法,實際上是告訴瀏覽器Servlet2所在的位置,讓瀏覽器重新訪問Servlet2。調用sendRedirect()方法,會在響應中設置Location響應報頭。要注意的是,這個過程對於用戶來說是透明的,瀏覽器會自動完成新的訪問。而瀏覽器地址欄顯示的URL是重定向之后的URL。

 

 

 

 

而forward()方法的交互過程如下:

1) 瀏覽器訪問Servlet1;

2) Servlet1想讓Servlet2對客戶端的請求進行響應,於是調用forward()方法,將請求轉發給Servlet2進行處理。

3) Servlet2對請求請出響應。

 

從上圖的交互過程可以看出,調用forward()方法,對瀏覽器來說是透明的,瀏覽器並不知道為其服務的Servlet已經換成Servlet2了,它只知道發出了一個請求,獲得了一個響應。而地址欄顯示的URL始終會是原始請求的URL。

 

此外,sendRedirect()方法和forward()方法還有一個區別,那就是sendRedirect()方法不但可以在位於同一主機上的不同Web應用程序之間進行重定向,而且可以將客戶端重定向到其他服務器上的Web應用程序資源。


免責聲明!

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



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