轉發和重定向的區別

實際發生位置不同,地址欄不同

  • 轉發是發生在服務器的

    • 轉發是由服務器進行跳轉的,細心的朋友會發現,在轉發的時候,瀏覽器的地址欄是沒有發生變化的,在我訪問Servlet111的時候,即使跳轉到了Servlet222的頁面,瀏覽器的地址還是Servlet111的。也就是說瀏覽器是不知道該跳轉的動作,轉發是對瀏覽器透明的。通過上面的轉發時序圖我們也可以發現,實現轉發只是一次的http請求一次轉發中request和response對象都是同一個。這也解釋了,爲什麼可以使用request作爲域對象進行Servlet之間的通訊。
  • 重定向是發生在瀏覽器的

    • 重定向是由瀏覽器進行跳轉的,進行重定向跳轉的時候,瀏覽器的地址會發生變化的。曾經介紹過:實現重定向的原理是由response的狀態碼和Location頭組合而實現的。這是由瀏覽器進行的頁面跳轉實現重定向會發出兩個http請求request域對象是無效的,因爲它不是同一個request對象轉發和重定向的區別

      實際發生位置不同,地址欄不同

      • 轉發是發生在服務器的

        • 轉發是由服務器進行跳轉的,細心的朋友會發現,在轉發的時候,瀏覽器的地址欄是沒有發生變化的,在我訪問Servlet111的時候,即使跳轉到了Servlet222的頁面,瀏覽器的地址還是Servlet111的。也就是說瀏覽器是不知道該跳轉的動作,轉發是對瀏覽器透明的。通過上面的轉發時序圖我們也可以發現,實現轉發只是一次的http請求一次轉發中request和response對象都是同一個。這也解釋了,爲什麼可以使用request作爲域對象進行Servlet之間的通訊。
      • 重定向是發生在瀏覽器的

        • 重定向是由瀏覽器進行跳轉的,進行重定向跳轉的時候,瀏覽器的地址會發生變化的。曾經介紹過:實現重定向的原理是由response的狀態碼和Location頭組合而實現的。這是由瀏覽器進行的頁面跳轉實現重定向會發出兩個http請求request域對象是無效的,因爲它不是同一個request對象

轉發和重定向使用哪一個?

根據上面說明了轉發和重定向的區別也可以很容易概括出來。轉發是帶着轉發前的請求的參數的。重定向是新的請求

典型的應用場景:

  1. 轉發: 訪問 Servlet 處理業務邏輯,然後 forward 到 jsp 顯示處理結果,瀏覽器裏 URL 不變
  2. 重定向: 提交表單,處理成功後 redirect 到另一個 jsp,防止表單重複提交,瀏覽器裏 URL 變了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章