詳細的請求轉發與重定向的重要區別及使用場景選擇
阿新 • • 發佈:2018-12-10
請求轉發與重定向的區別及使用場景選擇
一、請求轉發:
伺服器行為: 因為它是程式碼與程式碼之間的資源跳轉
特點:
- 轉發的所有Servlet都是同一個請求,使用同一個request和response!
- 由最後一個Servlet完成響應體! 當前Servlet可以設定響應頭!(留頭不留體)
- 因為它是同一個request,以前request中存放的變數不會失效,就像把兩個頁面拼到了一起
二、重定向:
客戶端行為: 因為它是客戶端與客戶端之間的資源跳轉
特點:
- 重定向可以訪問自己web應用以外的資源(如:www.baidu.com
- 每次的重定向都是新的請求(request),以前的request中存放的變數全部失效,並進入一個新的request作用域。
三、請求轉發過程:
- JSP容器將使用一個內部的方法來呼叫目標頁面。
- 新的頁面繼續處理同一個請求。
- 而瀏覽器將不會知道這個過程。
四、重寫向過程:
- 第一個頁面通知瀏覽器傳送一個新的頁面請求。
- 由於重定向方式產生了一個新的請求。
- 經過一次重定向後,request內的物件將無法使用。
五、重要區別:
- 請求轉發是一個請求一次響應,而重定向是多次請求多次響應。
- 請求轉發位址列不變化
- 請求轉發只能轉發當前web應用,而重定向還可以訪問自己web應用以外的資源。
- 請求轉發效率高,因為是一個請求。
六、場景選擇:
- 一個請求跨多個Servlet,用請求轉發。
- 因為轉發只能訪問當前web的應用程式,所以需要訪問到另外一個web站點上的資源的情況,這個時候就只能使用重定向。
- 請求轉發比重定向速度快,因為是同一個請求,所以如果在使用轉發和重定向都無所謂的時候建議使用轉發。