Servlet-請求轉發與重定向解釋及實現

請求轉發和重定向是Servlet中的兩種路徑跳轉的方法,我們一定要區分開它們。

請求轉發

請求轉發,見名知義,就是把Servlet接收到的請求轉發到其他地方。

請求轉發就相當於你找我,我幫你找他,比如下面,客戶端請求Servlet1,Servlet1幫客戶端轉發到Servlet2,再由Servlet2爲客戶端做出響應(當然,請求轉發不僅限於Servlet之間,還可以轉發到JSP,HTML):

在這裏插入圖片描述
在客戶端瀏覽器訪問Servlet1時,Servlet1處理完它的請求,就把請求對象和Servlet1的響應對象轉發到了Servlet2,待Servlet2處理完成後,才把響應對象返回給客戶端瀏覽器。在請求轉發的時候,客戶端瀏覽器的URL地址不會發生變化。

請求轉發採用以下代碼實現:

//請求轉發到指定路徑
request.getRequestDispatcher("轉發路徑").forward(request,response);

轉發的路徑一般來說爲相對路徑,如果在轉發路徑前添加/表示在該web應用的根路徑下找對應資源,如果轉發路徑之前不帶/,則在相對於該位置的路徑去找資源。

說起來是叫請求轉發,實際上把響應也發送到了轉發的路徑,大概是因爲請求轉發是請求對象來實現的吧,所以叫請求轉發。

當用戶訪問URL指定的組件時,該組件處理完成之後,將請求對象和響應對象交給另一個組件,另一個組件處理完成之後再直接響應返回客戶端,它是一個鏈式的連帶關係,不論中途被轉發過多少次,客戶端瀏覽器始終訪問的都是同一個請求地址。

請求轉發的特點:

  • 客戶端發出的請求被客戶端請求目標和轉發後的目標共享(這就可以在轉發前的Servlet的請求域中存放與轉發後的Servlet共享的數據)。
  • 客戶端請求目標Servlet產生的響應不會被髮送到客戶端,客戶端收到的響應是轉發後的目標產生的。

重定向

重定向就是爲客戶端瀏覽器重新返回一個地址,讓客戶端去訪問重新指定的地址,該機制是由HTTP協議所規定的。

重定向就相當於你找我,我告訴你應該去找他,然後你再去找他,如下客戶端請求Servlet1,Servlet1告訴客戶端需要重定向到Servlet2,客戶端再去訪問Servlet2,再由Servlet2向客戶端做出響應:

在這裏插入圖片描述
在客戶端請求Servlet1之後,Servlet1向客戶端返回需要重定向的響應結果,客戶端瀏覽器就立即加載指定的URL路徑,與此同時,瀏覽器的URL路徑就會發生對應的改變,再由該路徑爲瀏覽器做出響應。

重定向就相當於是爲客戶端重新指定一個方向,讓客戶端瀏覽器去訪問指定的資源,在這個過程中,客戶端瀏覽器的URL地址會發生相應的變化。

當用戶在瀏覽器中訪問某個URL指定的組件,該組件向客戶端瀏覽器返回狀態碼爲302(302就表示爲重定向)並且提供了另一個URL的響應結果,當瀏覽器接收到這種響應結果後,就會立即自動請求指定的URL,然後接收到該組件返回的響應結果。

重定向實現代碼:

//重定向到指定路徑
response.sendRedirect("路徑");

該路徑可以是絕對路徑(包含協議,主機名和端口的地址),也可以是相對路徑,如果在路徑前添加/表示在該web服務器的根路徑下找對應資源,如果路徑之前不帶/,則在相對於該位置的路徑去找資源。

重定向特點:

  • 重定向之前的組件與重定向之後的組件不共享一個請求對象,
  • 重定向是對服務器發起的再一次請求

請求轉發和重定向的區別

相同點:

  • 都能實現頁面的跳轉。

不同點:

請求轉發 重定向
請求服務器 一次 請求服務器兩次
瀏覽器URL不會改變 瀏覽器URL會改變
服務器行爲 客戶端行爲
目標必須是本站點的網址 目標可以是任何網站資源
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章