再談Redirect(用戶端重新導向)和Dispatch(伺服器端重新導向)

來源:互聯網
上載者:User
這是兩個常常被放在一起進行比較的概念,今天對這兩個概念再重新回顧一下,前者發生在用戶端(瀏覽器),後者發生在伺服器端,因此也有人把前者稱為用戶端重新導向,把後者稱為伺服器端重新導向,雖然對於後者這種稱謂並不算貼切。本文原文連結:http://blog.csdn.net/bluishglc/article/details/7953614 轉載請註明出處! 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都是在基於同一份資源完成它們職責範圍之內的計算。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.