重定向和轉發的分析與理解


一、重定向和轉發的區別

NO 比較項目 重定向 轉發
1 關鍵字 redirect forward
2 地址欄URL 會變 不會變
3 請求次數 至少2次請求 1次請求
4 跳轉速度 較慢 較快
5 哪一端行為 客戶端行為 服務端行為
6 信息傳遞 轉發2次信息不會丟失 重定向2次信息會丟失
7 跨程序訪問資源 不可

重定向和轉發的區別,幾乎是java web的入門知識。不管是剛畢業的學生或者經過培訓剛出來的新人,基本都能倒背如流。但是,針對上面的每一點,或者兩者的適用場合,如果要細究,恐怕少有人能說得很完整。

二、理解與分析


​ 轉發圖示

​ 重定向圖示

以上兩張圖示可以表示轉發和重定向的流程。以一個現實中的實例來說明兩者的區別:

轉發:張三去問李四一個java技術問題,李四一知半解,然后去問了王五,得知問題的答案后,李四再向張三解答該問題。這個過程中,張三只問了一次,也只得到了一次答復。

重定向:張三去問李四一個java技術問題,李四不會,然后告訴張三,"我不會,王五會,你去找他,他的地址是xxx"。然后張三去找王五,王五解答了該問題。這個過程中,張三問了兩次,得到了兩次答復(一次李四的答復,一次王五的答復)。

其實從不管從圖示,還是現實中的實例來看,基本能夠理解重定向和裝發的區別的含義了。例如:由於重定向訪問了兩次服務器以及得到兩次應答,轉發都只有一次。其性能必然會比轉發要低;重定向URL地址會變,轉發地址欄不會變等。

三、選擇與場景

重定向和轉發,不管是去理解它、去分析它或者要弄懂兩者之間的差別,都只是為了在合適的場景選擇合適的方式。

  1. 重定向。

    ​ 我們先來說說重定向的優點。重定向可以防止重新加載頁面時執行了相同的動作(調用了相同的接口)

    ​ 例如,當提交表單的時候,執行保存的方法將會被調用,並執行相應的動作,數據入庫。但是如果在提交表單后,重新加載頁面,執行保存的方法就很有可能再次被調用。同樣的產品信息就將可能再次入庫,為了避免這種情況,提交表單后,你可以將用戶重定向到一個不同的頁面(例如列表頁面)。

    ​ 再來談談重定向的缺點。重定向有一個不方便的地方,就是經過了客戶端,值容易丟失,不方便傳入目標頁面。不過在新版的spring(3.1)框架中,已經通過RedirectAttributes(該接口繼承了Model接口)接口解決了數值丟失的問題。使用方法與Modal接口類似:

    attributes.addFlashAttribute("response",response);
    

    然后在目標頁面接收該值。

    ​ 另一方面,不同web程序之間的訪問,必須要用重定向。

  2. 轉發。

    ​ 其實說完重定向的優點和缺點,我們大概就知道了什么時候有那個轉發的方式進行頁面跳轉了——除了以上必須用重定向的場景,其余的場景能有轉發就用轉發。而轉發可以用Modal(這個接口在spring2.5.1時就有了)這個接口很方便攜帶參數到目標頁面。

四、在SpringBoot中的使用

重定向和轉發在SpringBoot+thymeleaf中使用如下:

return "forward:/dashboard.html"; // 轉發
return "redirect:/main.html"; // 重定向

另外,區分通過thymeleaf模板引擎解析跳轉到響應的HTML頁面:

return "dashboard";

作者:追夢1819
來源:博客園
原文:https://www.cnblogs.com/yanfei1819/p/10540401.html
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM