Java請求轉送和請求重定向有哪些區別
前言
在Java 中,跳轉的實作方式有兩種:請求轉送和請求重定向,但二者是完全不同的,所以我們今天就來盤它。
請求轉送和請求重定向主要區別,包含以下5 點:
#定義不同
跳轉方不同
資料共享不同
#最終URL 位址不同
- ##程式碼實作不同
請求轉送(Forward):發生在服務端程式內部,當伺服器端收到一個客戶端的請求之後,會先將請求,轉送給目標位址,再將目標位址回傳的結果轉送給客戶端。 而客戶端對於這一切毫無感知的,這就好比,張三(客戶端)找李四(伺服器端)借錢,而李四沒錢,於是李四又去王五那借錢,並把錢借給了張三,整個過程中張三隻借了一次款,剩下的事情都是李四完成的,這就是請求轉發。 **請求重定向(Redirect):請求重定向指的是伺服器端接收到客戶端的請求之後,會給客戶端回傳了一個臨時回應頭,這個臨時回應頭中記錄了,客戶端需要再次發送請求(重定向)的URL 位址,客戶端再收到了位址之後,會將請求傳送到新的位址上,這就是請求重新導向。 **這就好像張三(客戶端)找李四(伺服器端)借錢,李四沒錢,於是李四就告訴張三,「我沒錢,你去王五那借“,於是張三又去王五家借了錢,這就是請求重定向。
2.請求方不同從上面請求轉發和請求重定向的定義,我們可以看出:請求轉發是伺服器端的行為,伺服器端代替客戶端傳送請求,並將結果傳回給客戶端;而請求重定向是客戶端的行為,它們的互動流程,如下圖所示:
##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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。
