理解客戶端重定向(Redirect)和服務端重定向(Dispatch)


這是兩個常常被放在一起進行比較的概念,今天對這兩個概念再重新回顧一下, 前者發生在客戶端(瀏覽器),后者發生在服務器端?,因此也有人把前者稱為客戶端重定向,把后者稱為服務器端重定向,雖然對於后者這種稱謂並不算貼切。本文原文鏈接: http://blog.csdn.net/bluishglc/article/details/7953614 轉載請注明出處!
 
Redirect(客戶端重定向)
 
標准意義上的“重定向”指的是 HTTP重定向,它是HTTP協議規定的一種機制。這種機制是這樣工作的: (沒有涉及request,只有response)
  1. 當client向server發送一個請求、要求獲取一個資源時,
  2. 在server接收到這個請求后發現請求的這個資源實際存放在另一個位置
  3. 於是server在返回的response中寫入那個請求資源的正確的URL,並設置reponse的狀態碼為301(表示這是一個要求瀏覽器重定向的response)
  4. 當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都是在 基於同一份資源(同一組request和response對象)完成它們職責范圍之內的計算。

 

 

 

 

 

注:此圖原圖引自《Head First Servlets and JSP》


免責聲明!

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



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