Spring MVC之redirect、forward和普通跳轉

bladestone發表於2019-02-26

Spring MVC之Controller的view跳轉

在Spring MVC中,通過返回一個view url地址的方式,將特定位置的html渲染之後推送到請求的client端。
例如:

   @Controller
   public class A{
         @RequestMapping("/url/view")
         public String handle() {
             return "/view/html/page1";
         }
   }

這裡的page1就是頁面所處的位置。這裡的返回頁面結果,不會影響到client的位址列的URL資訊。

redirect

重定向,伺服器收到請求後傳送一個狀態碼給客戶端,讓客戶端再重新請求,並且第一次請求中Request裡的資料消失。所以redirect相當於客戶端向伺服器發出兩次請求,第一次請求的資料不會轉發給第二次請求,URL地址會變化兩次。
例如:

   @Controller
   public class A{
         @RequestMapping("/url/view")
         public String handle() {
             return "redirect:/view/html/page1";
         }
   }

redirect這裡基本都是get請求,主要是其原有請求的request資料沒有了。

forward

轉發(前往),伺服器內部的重定向,在Servlet中通過RequestDispatcher轉發給另一個程式處理請求,請求的資料依然在。所以forward相當於客戶端向伺服器傳送一次請求,伺服器處理兩次,請求資料不會消失且URL地址只變化一次。
例如:

   @Controller
   public class A{
         @RequestMapping("/url/view")
         public String handle() {
             return "forward:/view/html/page1";
         }
   }

這裡有個問題需要注意是:forward會保持之前的請求狀態和資料不變,例如post請求還是會post請求。

總結

相關文章