在web開發中,我們經常會遇到網頁跳轉,除了html的a標簽、表單提交等跳轉方法外,在一般的jsp開發中,這種網頁跳轉被稱作重定向,此次主要記錄jsp開發中的兩種重定向方式
|1. 利用response對象進行重定向,方法如下:
response.sendRedirect(目標網頁路徑)
目標網頁路徑既可以填相對路徑,也可以填絕對路徑(但是要填完整哦)
|2. 使用jsp動作指令實現重定向,方法如下:
<jsp:forward page="目標網頁路徑">
//<jsp:param value="" name=""> 可以對跳轉到指定頁面,並傳值
</jsp:forward>
|3. 使用這兩種方法跳轉, 具有很大的不同, 主要有以下幾個方面:
|3.1 從瀏覽器的地址顯示來看
forward方法屬於服務器端去請求資源,服務器直接訪問目標地址,並對該地址的相應內容進行讀取,再把讀取的內容發給瀏覽器,因此客戶端瀏覽器的地址不變。
redirect是告訴客戶端,使瀏覽器知道去請求哪一個地址,相當於客戶端重新請求一遍。所以地址顯示欄會變。
簡單來講, 使用forward跳轉某一頁面,但地址欄不變仍是服務器地址,但使用redirect則是直接去訪問某一頁面地址,所以地址欄會變。
|3.2 從數據共享來看
forward轉發的頁,以及轉發到的目標頁面能夠共享request里面的數據,而redirect轉發的頁以及轉發到的目標頁面不能共享request里面的數據。
|3.3 從功能來看
redirect能夠重定向到當前應用程序的其它資源,而且還能夠重定向到同一個站點的其他應用程序中的資源,甚至是使用絕對url重定向到其它站點的資源。比如,可以通過該方法跳轉到百度頁面。
<%
response.sendRedirect("https://www.baidu.com");
%>
forward方法只能在同一個web應用程序內的資源之間轉發請求,可以理解為服務器內部的一種操作。以下代碼運行時會報錯。
<jsp:forward page="https://baidu.com"></jsp:forward>
|3.4 從效率來看
forward效率較高,因為跳轉僅發生在服務器端。
redirect效率較低,因為類似於再進行了一次請求。
*特別提醒*: response.sendError()也是進行跳轉,他的作用是向客戶端發送http狀態碼的出錯信息。
常見錯誤代碼如下:
400 Bad Request, 請求出現語法錯誤
401 Unauthorized, 客戶試圖未經授權訪問受密碼保護的頁面
403 Forbidden, 資源不可用
404 Not Found, 無法找到指定位置的資源
500 Internal Server Error, 服務器遇到了無法預料的情況,不能完成客戶的請求。