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的訪問請求);請求轉發中老闆並不知道是誰完成了該專案(瀏覽器只知道發出請求和得到相應結果,並不知道伺服器內部發生了轉換行為)