web程序開發時常見的兩種跳轉

request.getRequestDispatcher().forward(request,response)和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中帶上參數,如"add.htm?id=122"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章