轉發和重定向區別

在進行web開發時,跳轉是最多見的,今天在這裏來學習下2種跳轉:web

第一種是request.getRequestDispatcher().forward(request,response):瀏覽器

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

二、在先後兩次執行後,地址欄不變,還是當前文件的地址。session

三、不能轉向到本web應用以外的頁面和網站,因此轉向的速度要快。學習

四、URL中所包含的「/」表示應用程序(項目)的路徑。網站

 

第二種是response.sendRedirect():url

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

二、在先後兩次執行後,地址欄發生改變,是目標文件的地址。htm

三、能夠轉向到本web應用以外的頁面和網站,因此轉向的速度相對要慢。對象

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

 

特殊的應用:對數據進行修改、刪除、添加操做的時候,應該用response.sendRedirect()。若是是採用了request.getRequestDispatcher().forward(request,response),那麼操做先後的地址欄都不會發生改變,仍然是修改的控制器,若是此時再對當前頁面刷新的話,就會從新發送一次請求對數據進行修改,這也就是有的人在刷新一次頁面就增長一條數據的緣由。

 

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

一、能夠選擇session,但要在第二個文件中刪除;

二、能夠在請求的url中帶上參數,如"add.htm?id=122"

 怎麼選擇是重定向仍是轉發呢?一般狀況下轉發更快,並且能保持request內的對象,因此他是第一選擇。可是因爲在轉發以後,瀏覽器中URL仍然指向開始頁面,此時若是重載當前頁面,開始頁面將會被從新調用。若是你不想看到這樣的狀況,則選擇轉發。

相關文章
相關標籤/搜索