3 回答

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

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

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