web中的重定向與轉發


Redirect:重定向(客戶端重定向)
是HTTP協議規定的一種機制:當client向server發送一個請求,要求獲取一個資源時,在server接收到這個請求后發現請求的這個資源實際存放在另一個位置,於是server在返回的response中寫入那個請求資源的正確的URL,並設置reponse的狀態碼為301(表示這是一個要求瀏覽器重定向的response),當client接受到這個response后就會根據新的URL重新發起請求。重定向有一個典型的特症,即,當一個請求被重定向以后,最終瀏覽器上顯示的URL往往不再是開始時請求的那個URL了。
在Servlet里,實現客戶端重定向的方法是:response.sendRedirect()。
Dispatch(Forward):轉發(又稱為服務器端重定向
Dispatch(Forward) 指的是服務器在處理request的過程中將request先后委托多個servlet或jsp接替進行處理的過程。最為常見的是先由一個Servlet處理(比如實現業務邏輯的計算),然后forward給一個JSP進行視圖的渲染。在Servlet里,實現dispatch是通過RequestDispatchers來實現的,而這個類有兩個方法,一個是forward,另一個是include,相應的在JSP里實現dispatch的標簽也有兩個:<jsp:forward/>和<jsp:include/>.     不管是forward還是include,我們可以清楚的看到,從一個servlet或jsp向別一個servlet或jsp跳轉,request和reponse始終在期間傳遞,這是服務器端能實現dispatch模式的關鍵。換句話說,我們可以把request和reponse看作是一種資源,一系列的servlet和jsp都是在基於同一份資源完成它們職責范圍之內的計算。

兩者的區別是:

重定向是客戶端行為,轉發是服務器行為。

重定向過程:客戶瀏覽器發送http請求——》web服務器接受后發送302狀態碼響應及對應新的location給客戶瀏覽器——》客戶瀏覽器發現是302響應,則自動再發送一個新的http請求,請求url是新的location地址——》服務器根據此請求尋找資源並發送給客戶。在這里location可以重定向到任意URL,既然是瀏覽器重新發出了請求,則就沒有什么request傳遞的概念了。在客戶瀏覽器路徑欄顯示的是其重定向的路徑,客戶可以觀察到地址的變化的。重定向行為是瀏覽器做了至少兩次的訪問請求的。

轉發過程:客戶瀏覽器發送http請求——》web服務器接受此請求——》調用內部的一個方法在容器內部完成請求處理和轉發動作——》將目標資源發送給客戶;在這里,轉發的路徑必須是同一個web容器下的url,其不能轉向到其他的web路徑上去,中間傳遞的是自己的容器內的request。在客戶瀏覽器路徑欄顯示的仍然是其第一次訪問的路徑,也就是說客戶是感覺不到服務器做了轉發的。轉發行為是瀏覽器只做了一次訪問請求。


類別 概念 共享數據 應用
Redirect URL重新定向:可以是任意的URL 不能共享request里面的數據 一般用於用戶注銷登錄時返回主頁面和跳轉到其它的網站等等
Forward 頁面的轉發:只能是同一個Web應用程序的其他Web組件 轉發頁面和轉發到的頁面可以共性request里面的數據
一般用於用戶登錄的時候根據角色轉發到相應的模塊等等

 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM