3 回答

TA貢獻(xiàn)1829條經(jīng)驗 獲得超13個贊
戶向服務(wù)器發(fā)送了一次HTTP請求,該請求肯能會經(jīng)過多個信息資源處理以后才返回給用戶,各個信息資源使用請求轉(zhuǎn)發(fā)機(jī)制相互轉(zhuǎn)發(fā)請求,但是用戶是感覺不到請求轉(zhuǎn)發(fā)的。根據(jù)轉(zhuǎn)發(fā)方式的不同,可以區(qū)分為直接請求轉(zhuǎn)發(fā)(Forward)和間接請求轉(zhuǎn)發(fā)(Redirect)兩種有何區(qū)別呢?
1.從地址欄顯示來說
forward是服務(wù)器請求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器.瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容從哪里來的,所以它的地址欄還是原來的地址.
redirect是服務(wù)端根據(jù)邏輯,發(fā)送一個狀態(tài)碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.
2.從數(shù)據(jù)共享來說
forward:轉(zhuǎn)發(fā)頁面和轉(zhuǎn)發(fā)到的頁面可以共享request里面的數(shù)據(jù).
redirect:不能共享數(shù)據(jù).
3.從運用地方來說
forward:一般用于用戶登陸的時候,根據(jù)角色轉(zhuǎn)發(fā)到相應(yīng)的模塊.
redirect:一般用于用戶注銷登陸時返回主頁面和跳轉(zhuǎn)到其它的網(wǎng)站等.
4.從效率來說
forward:高.
redirect:低.

TA貢獻(xiàn)1891條經(jīng)驗 獲得超3個贊
forward是容器中控制權(quán)的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會顯示出轉(zhuǎn)向后的地址,他是不會改變Request的值,如果你需要在下一個頁面中能從中獲取新的信息的話,你可以Request.setAttribute()來放置一些標(biāo)志,這樣從下一個頁面中獲取。
redirect是完全的跳轉(zhuǎn),瀏覽器將會得到跳轉(zhuǎn)的地址,并重新發(fā)送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。所以,forward更加高效,在forward可以滿足需要時,盡量使用Request Dispatcher.forward()方法,并且,這樣也有助于隱藏實際的鏈接。在有些情況下,比如,需要跳轉(zhuǎn)到一個其它服務(wù)器上的資源,則必須使用 HttpServletResponse.sendRequest()方法。

TA貢獻(xiàn)1824條經(jīng)驗 獲得超8個贊
在Servlet中兩種實現(xiàn):
forward方式:request.getRequestDispatcher("/somePage.jsp").forward(request, response);
redirect方式:response.sendRedirect("/somePage.jsp");
forward是服務(wù)器內(nèi)部重定向,程序收到請求后重新定向到另一個程序,客戶機(jī)并不知道;redirect則是服務(wù)器收到請求后發(fā)送一個狀態(tài)頭給客戶,客戶將再請求一次,這里多了兩次網(wǎng)絡(luò)通信的來往。當(dāng)然forward也有缺點,就是forward的頁面的路徑如果是相對路徑就會有些問題了。
forward 會將 request state , bean 等等信息帶往下一個 jsp
redirect 是送到 client 端后再一次 request , 所以資料不被保留.
使用 forward 你就可以用 getAttribute() 來取的前一個 jsp 所放入的 bean 等等資料
- 3 回答
- 0 關(guān)注
- 1104 瀏覽
添加回答
舉報