這是兩個常常被放在一起進行比較的概念,,今天對這兩個概念再重新回顧一下,前者發(fā)生在客戶端(瀏覽器),后者發(fā)生在服務器端,,因此也有人把前者稱為客戶端重定向,把后者稱為服務器端重定向,,雖然對于后者這種稱謂并不算貼切,。本文原文鏈接:http://blog.csdn.net/bluishglc/article/details/7953614 轉載請注明出處! Redirect(客戶端重定向) 標準意義上的“重定向”指的是HTTP重定向,,它是HTTP協議規(guī)定的一種機制,。這種機制是這樣工作的:當client向server發(fā)送一個請求,要求獲取一個資源時,,在server接收到這個請求后發(fā)現請求的這個資源實際存放在另一個位置,,于是server在返回的response中寫入那個請求資源的正確的URL,并設置reponse的狀態(tài)碼為301(表示這是一個要求瀏覽器重定向的response),當client接受到這個response后就會根據新的URL重新發(fā)起請求,。重定向有一個典型的特癥,,即,當一個請求被重定向以后,,最終瀏覽器上顯示的URL往往不再是開始時請求的那個URL了,。這就是重定向的由來。 http重定向的一種典型應用是防止表單重復提交,,其原理是:假如當前是一個用戶信息編輯頁面,表單通過Post提交給saveUser.action, 當該請求提交后,,可返回一個重定向的response,地址可以是viewUser.action,即定向到用戶詳情頁面(不能修改和提交)。當然這種防止頁面重復提交的方法作用是有限的,, 如果用戶返回表單頁面,,重新提交表單,或是用戶在服務器端響應到達之前,,多次點擊提交按鈕(可通過JavaScript控制提交按鈕點擊次數)等等,。 在Servlet里,實現客戶端重定向的方法是:response.sendRedirect() Dispatch(服務器端重定向) Dispatch(Forward)指的是服務器在處理request的過程中將request先后委托多個servlet或jsp接替進行處理的過程,。最為常見的是先由一個Servlet處理(比如實現業(yè)務邏輯的計算),,然后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都是在基于同一份資源完成它們職責范圍之內的計算,。 注:此圖原圖引自《Head First Servlets and JSP》 |
|
來自: 歸葉米古 > 《java web》