forward和redirect的區別

2021-08-26 19:50:19 字數 1663 閱讀 5174

1.從位址列顯示來說

forward是伺服器請求資源,伺服器直接訪問目標位址的url,把那個url的響應內容讀取過來,然後把這些內容

再發給瀏覽器.瀏覽器根本不知道伺服器傳送的內容從**來的,所以它的位址列還是原來的位址.

redirect是服務端根據邏輯,傳送乙個狀態碼,告訴瀏覽器重新去請求那個位址.所以位址列顯示的是新的url.所 以redirect等於客戶端向伺服器端發出兩次request,同時也接受兩次response。

誰能解釋一下這兩段話的意思,尤其是後一段的2次????

回答列表:

redirect:a訪問b,若想訪問c,需由b返回給a乙個引數,由a去訪問c,過程是a-->b-->a-->c,位址列的位址是c。2次的意思是指一次訪問b,一次訪問c

通俗的說:

當乙個客戶端訪問伺服器端的乙個jsp(本質上就是乙個servlet),當呼叫response.sendredirect,實際上它做的是從伺服器端往客戶端發乙個指令,告訴ie把位址攔自動變成第2個頁面,並點一下轉到那個按鈕,客戶端接到這個指令後馬上去訪問第2個jsp,第2個jsp再把算出的結果返回客戶端。。。。。。

forward 當乙個客戶端訪問伺服器端的乙個jsp(本質上就是乙個servlet),在伺服器端直接轉到第2個jsp,讓第2個jsp(實際上是servlet)來處理客戶端的請求,請求處理完把結果直接返回到客戶端。(可以轉了好幾次,客戶端不知道。。。。最後乙個反給客戶端)

區別:

response.sendredirect

使用同乙個request 是不同的request

forward後的語句不會繼續傳送給客戶端 send後的語句會繼續執行,除非return

速度快 速度慢

伺服器內部轉換 需要到客戶端的往返,可以轉到任何頁面

可以傳引數 可以傳引數,直接寫在url後面

位址攔沒有變化 位址攔有變化

forward體現在請求**。。。也就意味著你的請求引數a-->b-->c 以頁面也可以獲得a到b的請求引數

response.sendredirect 重定向 到c頁面時 a--b的引數就得不到了。。是乙個新的請求

後面的意思是: 伺服器叫客服端** 就是再你自己的電腦上** 不是伺服器**

forward僅是容器中控制權的轉向,在客戶端瀏覽器位址列中不會顯示出轉向後的位址;

所以,forward更加高效,在forward可以滿足需要時,盡量使用forward()方法,並且,這樣也有助於隱藏實際的鏈結。

在有些情況下,比如,需要跳轉到乙個其它伺服器上的資源,則必須使用sendredirect()方法。

我感覺也是,能用forward是伺服器間的請求跳轉!redirect是重定向!相當於直接在瀏覽器輸入位址!

forward和redirect的區別

關鍵是redirect是重新返回客戶端,重定向

而forword是可以是內部把請求進行轉向,不用返回客戶端

redirect裡的2次的概念應該是這樣的:

第一次request: 客戶端 請求-> 伺服器

第一次response: 伺服器 redirect(url)-> 客戶端

第二次request: 客戶端 根據redirect的url再次請求 伺服器

第二次response: 伺服器直接去獲取(url)的內容。

來自:[url]

JAVA中Forward和Redirect的區別

forward和redirect代表了兩種請求 方式 直接 和間接 使用者向伺服器傳送了一次http請求,這個請求可能被直接請求 forward 和間接請求 redirect 兩種 方式有何區別呢?直接 就相當於 a找b借錢,b沒有,b去找c借,並告訴c把錢給a 間接 就相當於 a找b借錢,b沒有,...

jsp中的forward和redirect的區別

一 呼叫方式 我們知道,在servlet中呼叫 重定向的語句如下 request.getrequestdispatcher new.jsp forward request,response 到new.jsp response.sendredirect new.jsp 重定向到new.jsp 在jsp...

forward和sendredirect的區別

sendredirect forward 是不同的 request 雖然是不同的物件,但是,可以取到上乙個頁面的內容 send 後的語句會繼續執行,除非 return forward 後的語句不會繼續傳送給客戶端 速度慢 速度快 需要到客戶端的往返,可以轉到任何頁面,伺服器內部轉換,位址列有變化 位...