request.getRequestDispatcher()和response.sendRedirect()區別


request.getRequestDispatcher()和response.sendRedirect()區別

一.request.getRequestDispatcher().forward(request,response):

1、屬於轉發,也是服務器跳轉,相當於方法調用,在執行當前文件的過程中轉向執行目標文件,兩個文件(當前文件和目標文件)屬於同一次請求,前后頁共用一個request,可以通過此來傳遞一些數據或者session信息,request.setAttribute()和request.getAttribute()。

2、在前后兩次執行后,地址欄不變,仍是當前文件的地址。

3、不能轉向到本web應用之外的頁面和網站,所以轉向的速度要快。

4、URL中所包含的“/”表示應用程序(項目)的路徑。

 

二.response.sendRedirect():

1、屬於重定向,也是客戶端跳轉,相當於客戶端向服務端發送請求之后,服務器返回一個響應,客戶端接收到響應之后又向服務端發送一次請求,一共是2次請求,前后頁不共用一個request,不能讀取轉向前通過request.setAttribute()設置的屬性值。

2、在前后兩次執行后,地址欄發生改變,是目標文件的地址。

3、可以轉向到本web應用之外的頁面和網站,所以轉向的速度相對要慢。

4、URL種所包含的"/"表示根目錄的路徑。

 

特殊的應用:對數據進行修改、刪除、添加操作的時候,應該用response.sendRedirect()。如果是采用了request.getRequestDispatcher().forward(request,response),那么操作前后的地址欄都不會發生改變,仍然是修改的控制器,如果此時再對當前頁面刷新的話,就會重新發送一次請求對數據進行修改,這也就是有的人在刷新一次頁面就增加一條數據的原因。

 

如何采用第二種方式傳遞數據:

1、可以選擇session,但要在第二個文件中刪除;

2、可以在請求的url中帶上參數,如"edit.html?id=11"


免責聲明!

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



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