前言
在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中文網其他相關文章!

JavadevelovermentIrelyPlatForm-DeTueTososeVeralFactors.1)JVMVariationsAffectPerformanceNandBehaviorAcroSsdifferentos.2)Nativelibrariesviajnijniiniininiinniinindrododerplatefform.3)

Java代碼在不同平台上運行時會有性能差異。 1)JVM的實現和優化策略不同,如OracleJDK和OpenJDK。 2)操作系統的特性,如內存管理和線程調度,也會影響性能。 3)可以通過選擇合適的JVM、調整JVM參數和代碼優化來提升性能。

Java'splatFormentenceHaslimitations不包括PerformanceOverhead,versionCompatibilityIsissues,挑戰WithnativelibraryIntegration,Platform-SpecificFeatures,andjvminstallation/jvminstallation/jvmintenance/jeartenance.therefactorscomplicatorscomplicatethe“ writeOnce”

PlatformIndependendecealLowsProgramStormonanyPlograwsStormanyPlatFormWithOutModification,而LileCross-PlatFormDevelopmentRequiredquiresMomePlatform-specificAdjustments.platFormIndependence,EneblesuniveByjava,EnablesuniversUniversAleversalexecutionbutmayCotutionButMayComproMisePerformance.cross.cross.cross-platformd

JITcompilationinJavaenhancesperformancewhilemaintainingplatformindependence.1)Itdynamicallytranslatesbytecodeintonativemachinecodeatruntime,optimizingfrequentlyusedcode.2)TheJVMremainsplatform-independent,allowingthesameJavaapplicationtorunondifferen

javaispopularforcross-platformdesktopapplicationsduetoits“ writeonce,runany where”哲學。 1)itusesbytiesebyTecodeThatrunsonAnyJvm-備用Platform.2)librarieslikeslikeslikeswingingandjavafxhelpcreatenative-lookingenative-lookinguisis.3)

在Java中編寫平台特定代碼的原因包括訪問特定操作系統功能、與特定硬件交互和優化性能。 1)使用JNA或JNI訪問Windows註冊表;2)通過JNI與Linux特定硬件驅動程序交互;3)通過JNI使用Metal優化macOS上的遊戲性能。儘管如此,編寫平台特定代碼會影響代碼的可移植性、增加複雜性、可能帶來性能開銷和安全風險。

Java將通過雲原生應用、多平台部署和跨語言互操作進一步提昇平台獨立性。 1)雲原生應用將使用GraalVM和Quarkus提升啟動速度。 2)Java將擴展到嵌入式設備、移動設備和量子計算機。 3)通過GraalVM,Java將與Python、JavaScript等語言無縫集成,增強跨語言互操作性。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

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

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

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