1. 程式人生 > >詳細的請求轉發與重定向的重要區別及使用場景選擇

詳細的請求轉發與重定向的重要區別及使用場景選擇

請求轉發與重定向的區別及使用場景選擇

一、請求轉發:

伺服器行為: 因為它是程式碼與程式碼之間的資源跳轉

特點:

  • 轉發的所有Servlet都是同一個請求,使用同一個request和response!
  • 最後一個Servlet完成響應體! 當前Servlet可以設定響應頭!(留頭不留體)
  • 因為它是同一個request,以前request中存放的變數不會失效,就像把兩個頁面拼到了一起

二、重定向:

客戶端行為: 因為它是客戶端與客戶端之間的資源跳轉

特點:

  • 重定向可以訪問自己web應用以外的資源(如:www.baidu.com
    )。
  • 每次的重定向都是新的請求(request),以前的request中存放的變數全部失效,並進入一個新的request作用域。

三、請求轉發過程:

  1. JSP容器將使用一個內部的方法來呼叫目標頁面。
  2. 新的頁面繼續處理同一個請求。
  3. 而瀏覽器將不會知道這個過程。

四、重寫向過程:

  1. 第一個頁面通知瀏覽器傳送一個新的頁面請求
  2. 由於重定向方式產生了一個新的請求。
  3. 經過一次重定向後,request內的物件將無法使用。

五、重要區別:

  • 請求轉發是一個請求一次響應,而重定向是多次請求多次響應。
  • 請求轉發位址列不變化
    ,而重定向會顯示請求的地址。
  • 請求轉發只能轉發當前web應用,而重定向還可以訪問自己web應用以外的資源。
  • 請求轉發效率高,因為是一個請求。

六、場景選擇:

  1. 一個請求跨多個Servlet,用請求轉發。
  2. 因為轉發只能訪問當前web的應用程式,所以需要訪問到另外一個web站點上的資源的情況,這個時候就只能使用重定向。
  3. 請求轉發比重定向速度快,因為是同一個請求,所以如果在使用轉發和重定向都無所謂的時候建議使用轉發。