forward和redirect的區(qū)別是什么 Forward和Redirect原理
大家都知道Forward和Redirect都是處理客戶端請求并負(fù)責(zé)轉(zhuǎn)發(fā)的,那么他們的原理與區(qū)別又是什么呢?
原理示意圖:
如上圖所示為直接轉(zhuǎn)發(fā)(Forward)和間接轉(zhuǎn)發(fā)(Redirect)的工作原理示意圖。很明顯,當(dāng)用戶發(fā)出請求的時候,對于Forward(直接轉(zhuǎn)發(fā))是服務(wù)器直接請求資源,把內(nèi)容響應(yīng)給用戶,這個過程只有一次請求,即只有一個request對象。而對于Redirect(間接轉(zhuǎn)發(fā)),是服務(wù)器反饋給瀏覽器讓它重新再發(fā)起一次請求,這個過程中有兩次請求,即有兩個request對象。我們可以說Forward是一種服務(wù)器行為,而Redirect是一種客戶端行為。
那么他們有什么區(qū)別呢?
源代碼方法不同:Forward對應(yīng)的是RequestDispatcher類的forward()方法,而Redirect對應(yīng)的是HttpServletRequest類的sendRedirect()方法。
瀏覽器的地址欄顯示不同:當(dāng)用戶發(fā)起請求服務(wù)器響應(yīng)回來之后,F(xiàn)orward的地址欄的URL是不變的,而Redirect的地址欄會發(fā)生改變。
數(shù)據(jù)共享不同:對于Forward,轉(zhuǎn)發(fā)到的頁面是可以共享request里面的數(shù)據(jù),因為調(diào)用者和被調(diào)用者之間共享相同的request對象和response對象;而Redirect則不可以,因為調(diào)用者和被調(diào)用者屬于兩個獨立的請求-響應(yīng)過程。
內(nèi)部機制不同:Forward只能將請求轉(zhuǎn)發(fā)給同一個Web應(yīng)用中的組件,而Redirect可以重新定向到同一站點不同應(yīng)用程序中的資源,甚至可以定向到一絕對的URL。
處理效率不同:Forward的效率比Redirect高。
還有大家在書寫代碼的時候,要記住Redirect跳轉(zhuǎn)后必須加上return,不然頁面雖然跳轉(zhuǎn)了,但是還會執(zhí)行跳轉(zhuǎn)后面的語句,forward是執(zhí)行了跳轉(zhuǎn)頁面,下面的代碼是不會在執(zhí)行的。