頁面的轉發與重定向

請求轉發:

瀏覽器首先發請求傳送到ServletA,ServletA進過處理之後把請求傳遞到ServletB,由ServletB進行繼續處理最後輸出響應,這個傳遞的過程稱之為請求轉發。
這裡寫圖片描述

原理:

瀏覽器首先發請求傳送到ServletA進行處理,由於ServletA由於某種原因無法進行處理,也可能是設計的需求,所以交給ServletB繼續進行服務這個時候ServletA就會呼叫forward()將請求轉發給ServletB進行處理。

定義:

將當前的request和response物件交給指定的web元件處理。

說明:

其實在ServletA在呼叫請求轉發的過程中,對於瀏覽器來說是透明的,瀏覽器並不知道為其服務的ServletA已經轉化為ServletB,對於瀏覽器來說只是發出了一個請求然後獲得一次響應。

注意:

在請求轉發的過程中,瀏覽器的URL地址是不會變的。

轉發物件RequestDispatcher:

1.要做請求轉發首先要獲取轉發物件,然後呼叫轉發物件的forward()
2.*RequestDispatcher:轉發物件,它是由Servlet容器自動建立的,主要封裝一個由路徑所標識的伺服器資源
–forward():請求轉發到對應的伺服器資源進行請求處理
–include():把請求傳送給另外的web元件之後,原有的元件與被轉發的元件都可以輸出響應資訊
3.可以通過兩種方式獲取轉發物件RequestDispatcher:
(1.通過HttpServletRequest獲取,也就是說從當前的請求中獲取轉發物件;
(2.通過ServletContext獲取。

請求重定向:

使用者請求用於登陸請求的ServletA,伺服器端想在使用者登入成功之後直接進入到使用者的頁面,也就是說伺服器端在ServletA處理完之後,ServletB繼續為使用者進行服務,
此時ServletA用了sendRedirect()將客戶端的請求重定向到ServletB,這個過程就是請求重定向的過程。
這裡寫圖片描述

定義:

*伺服器的Servlet通過response物件傳送給瀏覽器一個新URL地址,讓其重新請求。
*兩次請求,兩次響應

重定向使用者登入舉例:

例子:

平時上網的時候訪問某些網站都有一個使用者登入的流程,其實就是使用者傳送一個登陸請求,然後伺服器端返回一個登陸響應,在登陸驗證完成之後,瀏覽器通常會跳轉到另外一個頁面,並且瀏覽器的位址列也改變了,我們只做了一次請求,會出現另外一個頁面。

原因:

在我們登陸完成之後,伺服器端向瀏覽器返回另外一個URL地址的響應資訊,瀏覽器接收到該響應資訊之後會自動的請求伺服器端返回的URL地址,最後伺服器端返回對應的跳轉結果,這樣使用者就進入了另外的一個頁面。

轉發和重定向的區別

轉發

a、轉發不會改變瀏覽器的位址列
b、轉發共享同一個request
c、轉發只能在同一個web應用中使用
d、使用轉發跳轉時,跳轉是在伺服器端實現的,客戶端瀏覽器並不知道該瀏覽的動作。
如下圖:
這裡寫圖片描述

重定向:

a、重定向會改變瀏覽器的位址列
b、重定向不共享request
c、可以重定向到任意URL
d、使用重定向跳轉的社會化,跳轉實在客戶端實現的,也就是說客戶端瀏覽器實際上請求了兩次伺服器
如下圖:
這裡寫圖片描述

一句話總結:轉發是伺服器行為,重定向是客戶端行為