forward與redirect都是用于引導客戶端的請求到另一個頁面或另一個Servlet中的,二者的區別總結如下:
1.RequestDispatcher.forward()
服務端跳轉,無條件立即執行,后面代碼不再執行;
轉發頁面和轉發到的頁面可以共享request里面的數據;
forward效率高;
通常在servlet中使用;
容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向后的地址,地址欄不改變;
無法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同時forward()無法在后面帶參數傳遞,比如 servlet?name=frank,這樣不行,可以程序內通過response.setAttribute("name",name)來傳至下一個頁 面;
一般用于用戶登陸的時候,根據角色轉發到相應的模塊
注意:forward動作發生時,如果已經有文本被寫入輸出流而且頁面沒有設置緩沖 ,將拋出IllegalStateException異常。
2.response.sendRedirect()
客戶斷跳轉,所有代碼執行完后再執行跳轉;
用戶請求不被發送到下一個頁面,不能共享數據,必須重新設置參數;
redirect效率低;
通常在jsp中使用;
完全的跳轉,瀏覽器將會得到跳轉的地址,并重新發送請求鏈接,這樣,從瀏覽器的地址欄中可以看到跳轉后的鏈接地址;
可以帶參數傳遞,比如servlet?name=frank傳至下個頁面,同時它可以重定向至不同的主機上,sendRedirect()可以重定向有frame.的jsp文件;
一般用于用戶注銷登陸時返回主頁面和跳轉到其它的網站等
注意:response.sendRedirect之后,應該緊跟一句return;
response.sendRedirect是通過瀏覽器來做轉向的,所以只有在頁面處理完成后,才會有實際的動作。既然你已經要做轉向了,那么后的輸出還有什么意義呢?而且有可能會因為后面的輸出導致轉向失敗。
http://yilin.iteye.com/blog/893998
posted on 2012-02-22 13:39
wilsonyq 閱讀(344)
評論(0) 編輯 收藏 所屬分類:
javaweb