1. 程式人生 > >Servlet應用中重定向與請求轉發的區別

Servlet應用中重定向與請求轉發的區別

  • 首先重定向和請求轉發的區別在大多數面試題裡面會考到,這篇文章是總結一下個人的理解。本文不講程式碼

第一,我們要明白這兩個東西的作用。Servlet在對客戶端請求的資料處理完成後,會向客戶端返回相應的響應結果(Servlet辦事兒)。

關於重定向

含義:重定向是指由原請求地址重新定位到某個新地址,原有的請求失效,客戶端看到的是新的請求返回的相應結果。

打個比喻:一個老闆(客戶端)想幹一件事兒,便把這件事兒傳給下面的經理(伺服器),經理把這件事兒交給員工A(ServletA),員工A有事兒,但員工A知道員工B(ServletB)能夠勝任這件事兒(也可以外包出去,外包出去的話相當於利用應用程式中的其他資源),便對經理說員工B能幹這件事兒,經理再反饋給老闆,老闆在對經理說,事兒不大你看著辦吧,辦好就行。經理再傳到員工B那兒去,員工B幹完了,然後再依次反饋到上級。

從上面,我們知道了這件事兒包含了兩次請求傳遞,並且老闆也知道是員工B完成了這件事兒,因此客戶端瀏覽器上的地址為員工B的名字,即轉發的位址列發生改變。

關於請求轉發

含義:請求轉發是指將請求再轉發到其他地址,轉發過程中使用的是同一個請求,轉發的位址列內容不變。

打個比喻:一個老闆(客戶端)想幹一件事兒,便把這件事兒傳給下面的經理(伺服器),經理把這件事兒交給員工A(ServletA),但是呢員工A不能勝任,但是也不想放棄這次千載難逢的機會,員工A便狐假虎威讓員工B把這件事兒幹了,員工B幹完了,反饋給了經理(這時的經理馬虎大意了,還以為是員工A完成了這個專案),經理再反饋到老闆

從上面,我們知道了這件事兒只包含了一次請求傳遞,並且由於經理的馬虎大意使老闆知道是員工A完成了這件事兒,因此客戶端瀏覽器上的地址為員工A的名字,即轉發的位址列不變。

總結

我們要知道的區別:

1.請求次數不一樣
2.響應之後,位址列是否發生改變
3.重定向的響應結果可以“外包”出去;請求轉發的相應結果只能靠同一個WEB應用中的元件(一個公司裡面的員工)
4.重定向對瀏覽器的請求直接作出響應,響應結果是告訴老闆找另外一個員工完成專案(讓瀏覽器去重新發出對另外一個URL的訪問請求);請求轉發中老闆並不知道是誰完成了該專案(瀏覽器只知道發出請求和得到相應結果,並不知道伺服器內部發生了轉換行為)