1. 程式人生 > >servlet裏的forward和redirect的區別

servlet裏的forward和redirect的區別

路徑 網上 std 信息 ati jsp 語法 問題 邏輯 服務器端

forward方式:request.getRequestDispatcher("/somePage.jsp").forwardrequest, response);
redirect方式:response.sendRedirect("/somePage.jsp");
forward是服務器內部重定向,程序收到請求後重新定向到另一個程序,客戶機並不知道;redirect則是服務器收到請求後發送一個狀態頭給客戶,客戶將再請求一次,這裏多了兩次網絡通信的來往。當然forward也有缺點,就是forward的頁面的路徑如果是相對路徑就會有些問題了。 forward 會將 request state , bean 等等信息帶往下一個 jsp
redirect 是送到 client 端後再一次 request , 所以資料不被保留.
使用 forward 你就可以用 getAttribute() 來取的前一個 jsp 所放入的 bean 等等資料

在網上看到一些帖子,總結了一些區別,可以從以下幾個方面來看:

1.從地址欄顯示來說

forward是服務器請求資源,服務器直接訪問目標地址的URL

,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裏來的,所以它的地址欄還是原來的地址.

redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.所以redirect等於客戶端向服務器端發出兩次request,同時也接受兩次response。

2.從數據共享來說

forward:轉發頁面和轉發到的頁面可以共享request裏面的數據.
redirect:不能共享數據.

redirect不僅可以重定向到當前應用程序的其他資源,還可以重定向到同一個站點上的其他應用程序中的資源,甚至是使用絕對URL重定向到其他站點的資源.

forward,方法只能在同一個Web應用程序內的資源之間轉發請求
.forward 是服務器內部的一種操作.
redirect 是服務器通知客戶端,讓客戶端重新發起請求.

所以,你可以說 redirect 是一種間接的請求, 但是你不能說"一個請求是屬於forward還是redirect "


3.從運用地方來說

forward:一般用於用戶登陸的時候,根據角色轉發到相應的模塊.

redirect:一般用於用戶註銷登陸時返回主頁面和跳轉到其它的網站等.

4.從效率來說
forward:高.
redirect:低.

5.jsp 語法

<jsp:forward page={"relativeurl" | "<%= expression %>"} />

或者這樣寫:

<jsp:forward page={"relativeurl" | "<%= expression %>"} >


<jsp:param name="parametername" value="{parametervalue | <%= expression %>}" />+


</jsp:forward>

servlet裏的forward和redirect的區別