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