請求重定向和請求轉發
從含義上來講
請求重定向:從名字中可以看出來他的主要作用,對url重新定向,是一種客戶端的行為,response.sendRedirect( ) 從本質上來將等於兩次請求,前一次請求url物件不會儲存,位址列的URL地址會改變。
請求轉發:是一種伺服器的行為,request.getRequestDispatcher().forward(request,response),是一次請求,轉發後物件會儲存下來,位址列的URL地址不會改變。
客戶端跳轉時用HttPservletResopse物件的sendRedirect函式實現,伺服器端跳轉是使用RequestDispather物件的forward方法實現的。這兩者之間的區別主要體現在三個方面:
1. 使用伺服器端跳轉時,客戶瀏覽器的位址列並不會顯示目標地址的URL,而是用客戶端跳轉時,位址列當中會顯示目標資源的URL;
2. 伺服器端跳轉是由客戶端傳送一個請求,請求一個伺服器資源——如JSP和Servlet——,這個資源又將請求轉到另一個伺服器資源,然後再給客戶端傳送一個響應,也就是說伺服器端跳轉是客戶端傳送一次請求,伺服器端給出一次響應;
客戶端跳轉的流程則不同。客戶端同樣是傳送一個請求給伺服器端資源,這個伺服器資源會首先給客戶端一個響應,客戶端再根據這個響應當中所包含的地址,再次向伺服器端傳送一個請求,也就是說客戶端跳轉是兩次請求,兩次響應;(客戶端請求到達服務端,服務端返回一個 “去訪問其他連結” 的迴應,客戶端依此迴應,第二次去訪問。所以:1.客戶端根據迴應地址又跳轉了一次,2.第二次跳轉後,已經出了request的屬性範圍
3. 在進行客戶端跳轉和伺服器端跳轉時,都需要指定目標資源的URL,如果這個路徑以“”開始。在客戶端跳轉當中“”代表的是應用伺服器根目錄,而在伺服器端跳轉當中代表的是應用程式根目錄。
詳細解釋: