forward內部跳轉 和redirect重新導向跳轉的區別

來源:互聯網
上載者:User

1.從地址欄顯示來說

forward是伺服器請求資源,伺服器直接存取目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道伺服器發送的內容從哪裡來的,所以它的地址欄還是原來的地址,可以傳遞request屬性,實際上是對RequestDispather介面的封裝.(例如,A訪問B,B訪問C,過程是A-->B-->C,頁面開啟的是C,但是地址欄裡仍是B的地址,Request中有數次請求只有一次,因為forward的可以是內部把請求進行轉向,不用返回用戶端.)

redirect是服務端根據邏輯,發送一個狀態代碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.(例如,到c頁面時  a--b的參數就得不到了,是一個新的請求)

2.從資料共用來說

forward:轉寄頁面和轉寄到的頁面可以共用

request裡面的資料.redirect:不能共用資料.

3.從運用地方來說

forward:一般用於使用者登陸的時候,根據角色轉寄到相應的模組.

redirect:一般用於使用者登出登陸時返回首頁面和跳轉到其它的網站等.

4.從效率來說

forward:高.

redirect:低.

 

總結-----------------------------------------------------------------------------------

區別:
<jsp:forward>                                             response.sendRedirect
使用同一個request                                        是不同的request
forward後的語句不會繼續發送給用戶端        send後的語句會繼續執行,除非return
速度快                                                            速度慢
伺服器內部轉換                                             需要到用戶端的往返,可以轉到任何頁面
可以傳參數                                                    可以傳參數,直接寫在url後面
地址攔沒有變化                                             地址攔有變化

應用情境:

forward僅是容器中控制權的轉向,在用戶端瀏覽器地址欄中不會顯示出轉向後的地址;
redirect則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求連結。這樣,從瀏覽器的地址欄中可以看到跳轉後的連結地址。
所以,forward更加高效,在forward可以滿足需要時,盡量使用forward()方法,並且,這樣也有助於隱藏實際的連結。
在有些情況下,比如,需要跳轉到一個其它伺服器上的資源,則必須使用sendRedirect()方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.