1. 程式人生 > >客戶端重定向和服務端跳轉的區別

客戶端重定向和服務端跳轉的區別

區別

客戶端重定向: 這是HTTP協議規定的一種機制,瀏覽器的地址會發生變化,會發起新的請求,原先的request物件和reponse物件在新的請求裡面不可用。request物件和reponse物件是存在於服務端的物件,原先的請求已經結束了,這兩個物件在服務端都被釋放了

服務端跳轉:  就是在服務端將請求由當前servlet分發給另外一個servlet(JSP本質也是sevlet)進行處理,原先的request物件和reponse物件繼續可用

RequestDispatcher.forward方法只能將請求轉發給同一個WEB應用中的元件;

而HttpServletResponse.sendRedirect 方法不僅可以重定向到當前應用程式中的其他資源,還可以使用絕對URL重定向到其他站點的資源

Redirect(客戶端重定向) 標準意義上的“重定向”指的是HTTP重定向,它是HTTP協議規定的一種機制。這種機制是這樣工作的:當client向server傳送一個請求,要求獲取一個資源時,在server接收到這個請求後發現請求的這個資源實際存放在另一個位置,於是server在返回的response中寫入那個請求資源的正確的URL,並設定reponse的狀態碼為301(表示這是一個要求瀏覽器重定向的response),當client接受到這個response後就會根據新的URL重新發起請求。重定向有一個典型的特症,即,當一個請求被重定向以後,最終瀏覽器上顯示的URL往往不再是開始時請求的那個URL了。這就是重定向的由來。
http重定向的一種典型應用是防止表單重複提交,其原理是:假如當前是一個使用者資訊編輯頁面,表單通過Post提交給saveUser.action, 當該請求提交後,可返回一個重定向的response,地址可以是viewUser.action,即定向到使用者詳情頁面(不能修改和提交)。當然這種防止頁面重複提交的方法作用是有限的, 如果使用者返回表單頁面,重新提交表單,或是使用者在伺服器端響應到達之前,多次點選提交按鈕(可通過JavaScript控制提交按鈕點選次數)等等。 在Servlet裡,實現客戶端重定向的方法是:response.sendRedirect() Dispatch(伺服器端重定向)
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都是在基於同一份資源完成它們職責範圍之內的計算。