Forword與sendRedirect的區別

2022-09-02 06:45:11 字數 1243 閱讀 8063

二、本質區別

解釋一

一句話,**是伺服器行為,重定向是客戶端行為。為什麼這樣說呢,這就要看兩個動作的工作流程:

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

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

解釋二

重定向,其實是兩次request

第一次,客戶端request   a,伺服器響應,並response回來,告訴瀏覽器,你應該去b。這個時候ie可以看到位址變了,而且歷史的回退按鈕也亮了。重定向可以訪問自己web應用以外的資源。在重定向的過程中,傳輸的資訊會被丟失。

例子:response.sendredirect("loginsuccess.jsp");

請求**是伺服器內部把對乙個request/response的處理權,移交給另外乙個

對於客戶端而言,它只知道自己最早請求的那個a,而不知道中間的b,甚至c、d。傳輸的資訊不會丟失。

例子:requestdispatcher dis=request.getrequestdispatcher(「loginsuccess.jsp」);

dis.forward(request,response);

解釋三

假設你去辦理某個執照

重定向:你先去了a局,a局的人說:「這個事情不歸我們管,去b局」,然後,你就從a退了出來,自己乘車去了b局。

**:你先去了a局,a局看了以後,知道這個事情其實應該b局來管,但是他沒有把你退回來,而是讓你坐一會兒,自己到後面辦公室聯絡了b的人,讓他們辦好後,送了過來。

forword與redirect的區別

1.從位址列顯示來說 forward是伺服器請求資源,伺服器直接訪問目標位址的url,把那個url的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道伺服器傳送的內容從 來的,所以它的位址列還是原來的位址.redirect是服務端根據邏輯,傳送乙個狀態碼,告訴瀏覽器重新去請求那個位址.所...

forword與redirect的區別

forward是伺服器內部重定向,程式收到請求後重新定向到另乙個程式,客戶機並不知道 redirect則是伺服器收到請求後傳送乙個狀態頭給客戶,客戶將再請求一次,這裡多了兩次網路通訊的來往。當然 forward也有缺點,就是forward的頁面的路徑如果是相對路徑就會有些問題了。forward 會將...

forword和redirect的區別

forword和redirect是servlet的兩種主要跳轉方式 1 forword 請求 伺服器行為 伺服器內部的重定向,客戶端並不知曉其操作 位址列不變,伺服器獲取跳轉頁面傳給客戶,使用者位址列不變。兩者的區別可以舉個例子闡述 redirect 兩次請求,位址列變。同樣是問小李借錢,小李說沒錢...