forward 和redirect的區別

forward 方式:request.getRequestDispatcher(“/somePage.jsp”).forward(request,response );
redirect 方式:
redirect.sendRedirect(“/somePage.jsp”);
forward是服務器內部 重定向,程序收到重新定向到另一個程序,客戶機並不知道;redirect則是服務器收到請求後發送一個狀態頭給客戶,客戶將再請求一次,這裏多了兩次的網絡通信的來往。當然forward也有缺點,就是forward的頁面 路徑如果是相對路徑就有問題了。froward 會將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:低.

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