首頁 > Java > java教程 > 主體

Java請求轉送和請求重定向有哪些區別

WBOY
發布: 2023-05-05 15:46:15
轉載
1849 人瀏覽過

前言

在Java 中,跳轉的實作方式有兩種:請求轉送和請求重定向,但二者是完全不同的,所以我們今天就來盤它。

請求轉送和請求重定向主要區別,包含以下5 點:

  • #定義不同

  • 跳轉方不同

  • 資料共享不同

  • #最終URL 位址不同

  • ##程式碼實作不同

接下來,我們一個一個來看。

1.定義不同

請求轉送(Forward):發生在服務端程式內部,當伺服器端收到一個客戶端的請求之後,會先將請求,轉送給目標位址,再將目標位址回傳的結果轉送給客戶端。  而客戶端對於這一切毫無感知的,這就好比,張三(客戶端)找李四(伺服器端)借錢,而李四沒錢,於是李四又去王五那借錢,並把錢借給了張三,整個過程中張三隻借了一次款,剩下的事情都是李四完成的,這就是請求轉發。 **請求重定向(Redirect):請求重定向指的是伺服器端接收到客戶端的請求之後,會給客戶端回傳了一個臨時回應頭,這個臨時回應頭中記錄了,客戶端需要再次發送請求(重定向)的URL 位址,客戶端再收到了位址之後,會將請求傳送到新的位址上,這就是請求重新導向。 **這就好像張三(客戶端)找李四(伺服器端)借錢,李四沒錢,於是李四就告訴張三,「我沒錢,你去王五那借“,於是張三又去王五家借了錢,這就是請求重定向。

2.請求方不同

從上面請求轉發和請求重定向的定義,我們可以看出:

請求轉發是伺服器端的行為,伺服器端代替客戶端傳送請求,並將結果傳回給客戶端;而請求重定向是客戶端的行為,它們的互動流程,如下圖所示: 

Java請求轉送和請求重定向有哪些區別##3.資料共享不同

請求轉送是伺服器端實現的,所以整個執行流程中,客戶端(瀏覽器端)只需要傳送一次請求,因此整個互動過程中使用的都是同一個Request 請求對象和一個Response 回應對象,所以整個請求過程中,請求和返回的資料是共享的;而請求重定向客戶端發送兩次完全不同的請求,所以兩次請求中的數據是不同的。

4.最終URL 位址不同

請求轉送是伺服器端代為請求,再將結果傳回給客戶端的,所以整個請求的過程中URL 位址是不變的;而請求重定向是伺服器端告訴客戶端,“你去另一個地訪問去”,所以瀏覽器會重新再發送一次請求,因此客戶端最終顯示的URL 也為最終跳轉的地址,而非剛開始請求的地址,所以URL 位址發生了改變。

5.程式碼實作不同

在SpringBoot 中,請求轉送的實作程式碼如下:

@RequestMapping("/fw")
public void forward(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.getRequestDispatcher("/index.html").forward(request, response);
}
登入後複製

而請求重定向的實現程式碼如下:

@RequestMapping("/rt")
public void redirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
    response.sendRedirect("/index.html");
}
登入後複製

以上是Java請求轉送和請求重定向有哪些區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!