天天看點

java中轉發和重定向的差別

**重定向:response.sendRedirect(“xxxx”)

轉 發 :request.getRequestDispatcher(“xxxx”).forward(request,response);**

下面簡單說一下其主要差別以及分别的作用:

差別:

1.請求次數

轉發:1次;重定向:2次。

2.URL位址

轉發:URL連結不變,簡單的讓使用者通路一個新的連結;重定向:URL連結已經變換,是伺服器要得到使用者的請求内容并需要進行一部分處理的。

3.對request作用域的影響

轉發:以前的request中存放的變量不會失效,就像把兩個頁面拼到了一起;

重定向:以前的request中存放的變量全部失效,并進入一個新的request作用域。

具體實作時分别作用差別:

1.

請求轉發:在伺服器元件收到使用者請求後。經過它的處理後有傳遞給了另一個元件,不修改使用者的請求碼。各元件處理完之後在傳回給使用者。主要适用與首頁架構中。

重定向:在伺服器元件收到使用者請求後。經過處理修改使用者請求。在傳回給使用者。這樣使用者再次使用這個請求就會被動的使用新的請求了。主要适用于重定向一般是為了防止使用者送出完資料後點浏覽器重新整理或點後退之後産生重複送出及防止表單的重複送出。

2.

通常情況下轉發更快,而且能保持request内的對象,是以他是第一選擇。但是由于在轉發之後,浏覽器中URL仍然指向開始頁面,此時如果重載目前頁面,開始頁面将會被重新調用。如果你不想看到這樣的情況,則選擇轉發。

3.

再對轉發請求的連結重新整理頁面時,頁面會回到執行轉發前的操作;如果是重定向時,則仍舊是送出目前頁面的表單。

4.

具體實作請求過程:

轉發:使用者請求–>伺服器–>元件(xx)–>伺服器–>使用者

重定向:使用者請求–>伺服器–>元件(xx)–>伺服器–>使用者–>新的請求