天天看點

forward和redirect的差別,rorward,redirect,轉發與重定向

 問:

1.從位址欄顯示來說

    forward是伺服器請求資源,伺服器直接通路目标位址的URL,把那個URL的響應内容讀取過來,然後把這些内容

再發給浏覽器.浏覽器根本不知道伺服器發送的内容從哪裡來的,是以它的位址欄還是原來的位址.

    redirect是服務端根據邏輯,發送一個狀态碼,告訴浏覽器重新去請求那個位址.是以位址欄顯示的是新的URL.所 以redirect等于用戶端向伺服器端發出兩次request,同時也接受兩次response。

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

回答清單:

forward:A通路B,B通路C,過程是A-->B-->C,此時打開的是C,但位址欄裡的位址是B的位址。

redirect:A通路B,若想通路C,需由B傳回給A一個參數,由A去通路C,過程是A-->B-->A-->C,位址欄的位址是C。2次的意思是指一次通路B,一次通路C

redirect先要傳回上一請求,然後在通路下一請求。

通俗的說:

當一個用戶端通路伺服器端的一個JSP(本質上就是一個SERVLET),當調用response.sendRedirect,實際上它做的是從伺服器端往用戶端發一個指令,告訴IE把位址攔自動變成第2個頁面,并點一下轉到那個按鈕,用戶端接到這個指令後馬上去通路第2個JSP,第2個JSP再把算出的結果傳回用戶端。。。。。。

forward  當一個用戶端通路伺服器端的一個JSP(本質上就是一個SERVLET),在伺服器端直接轉到第2個JSP,讓第2個JSP(實際上是SERVLET)來處理用戶端的請求,請求處理完把結果直接傳回到用戶端。(可以轉了好幾次,用戶端不知道。。。。最後一個反給用戶端)

差別:

<jsp:forward>                          response.sendRedirect

使用同一個request                        是不同的request

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

速度快                                      速度慢

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

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

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

forward展現在請求轉發。。。也就意味着你的請求參數a-->b-->c  以頁面也可以獲得a到b的請求參數

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

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

orward僅是容器中控制權的轉向,在用戶端浏覽器位址欄中不會顯示出轉向後的位址;

redirect則是完全的跳轉,浏覽器将會得到跳轉的位址,并重新發送請求連結。這樣,從浏覽器的位址欄中可以看到跳轉後的連結位址。

是以,forward更加高效,在forward可以滿足需要時,盡量使用forward()方法,并且,這樣也有助于隐藏實際的連結。

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

我感覺也是,能用Forward是伺服器間的請求跳轉!Redirect是重定向!相當于直接在浏覽器輸入位址!

forward和redirect的差別

關鍵是redirect是重新傳回用戶端,重定向

而forword是可以是内部把請求進行轉向,不用傳回用戶端

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

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

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

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

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

繼續閱讀