天天看點

forward與redirect的差別(SpringMVC )2 redirect3. forward和redirect的差別

參考部落格位址:

https://www.cnblogs.com/lexiaofei/p/7044429.html?utm_source=itdadao&utm_medium=referral

參考部落格位址: 

https://blog.csdn.net/senmon2004/article/details/654049

下面是關于forward和redirect方式的差別(SpringMVC中):

1  forward

 forward方式相當于request.getRequestDispatcher().forward(request,response)。 

 外部特征:浏覽器位址顯示的路徑是轉發前的路徑。 

工作方式是這樣: 

forward 發生在伺服器内部,在前一個控制器處理完畢後,直接進入下一個控制器處理, 并将最後的response發給浏覽器. 

這種方式的特點: 

A.轉發前後是同一個request,後一個控制器可共享前一個控制器的參數與屬性; 

B.因為是同一個request,攔截器隻會攔截前一個url,如果前一個url在映射時未配置到攔截器攔截,則攔截後一個

   url,即隻攔截一次; 

C.最後傳回到浏覽器後,因為位址欄顯示的是轉發前的url,是以重新整理頁面時會依次執行前後兩個控制器.

2 redirect

redirect方式相當于”response.sendRedirect()”,就是服務端根據邏輯,發送一個狀态碼,告訴浏覽器重新去請求那個位址

外部特征:浏覽器位址顯示的路徑是轉發後的路徑。 

工作方式是這樣的: 

redirect就是服務端根據邏輯,發送一個狀态碼,告訴浏覽器重新去請求那個位址(伺服器端會首先發一個response給浏覽器, 然後浏覽器收到這個response後再發一個requeset給伺服器),然後伺服器發新的response給浏覽器. 這時頁面收到的request對象是重新從浏覽器發來的,一般來說浏覽器會用剛才請求的所有參數重新請求,是以session,request參數都可以擷取

這種方式的特點: 

A.在轉發前後有兩個不同的request對象,轉發前後的兩個控制器在request上的參數(request.getParameter())

   和 request屬性(request.getAttribute())不能共享; 

B.如果轉發前後的兩個控制器都配置在spring 攔截器範圍内,這樣攔截器會攔截前後兩個request,即會攔截兩次; 

C.最後傳回到浏覽器後,因為位址欄顯示的是轉發後的url,是以重新整理頁面時隻會執行後面的url映射的控制器. 

  • 舉例如下:

a頁面-------->b頁面(-->代表兩種方法的一種)

a 頁 面裡有一個 動 作: request.setAttribute("temp",object);   Response.forward()---->用 這 個方法到達 b,可以在b裡通 過 request.getAttribute("temp")得到存 儲 的 object 對 象, 這 個方法 擴 大了 request裡儲存的 值 的作用範 圍 ; Response.redirect()---->用 這 個方法到達 b,object 對 象将 丢 失。   如果想到達b 頁 面(無 論 是哪個方法)而有想得到 object 對 象, 則 最好将 object 對 象儲存在 request.getSession()裡,也就是Session 對 象 裡

3. forward和redirect的差別

forward僅是容器中控制權的轉向,在用戶端浏覽器位址欄中不會顯示出轉向後的位址;

redirect則是完全的跳轉,浏覽器将會得到跳轉的位址,并重新發送請求連結。這樣,從浏覽器的位址欄中可以看到跳轉後的連結位址。

是以,forward更加高效,在forward可以滿足需要時,盡量使用forward()方法,并且,這樣也有助于隐藏實際的連結。

在有些情況下,比如,需要跳轉到一個其它伺服器上的資源,則必須使用sendRedirect()方法。

4. 小提示

  •  如果邏輯視圖名為 hello,架構通過 forward 的方式轉發到了 /WEB-INF/jsp/hello.jsp。
  • 如果邏輯視圖名是 /hello,架構還是轉發到了 /WEB-INF/jsp/hello.jsp,即 /WEB-INF/jsp//hello.jsp 等同于 /WEB-INF/jsp/hello.jsp。 
    forward與redirect的差別(SpringMVC )2 redirect3. forward和redirect的差別

繼續閱讀