SpringMVC(四):轉發、重定向和Flash屬性


一、轉發和重定向的區別

一句話歸納:重定向是客戶端行爲,轉發是服務器行爲.java

     1.請求次數:web

          重定向:重定向行爲是作了兩次請求,及產生了兩個request對象,重定向會致使request對象信息丟失。spring

           請求轉發:轉發作了一次請求, 瀏覽器的地址欄一直是第一次請求的地址。轉發是服務器內部request/response控制權的移交。瀏覽器

      2.請求資源地址:服務器

          重定向:web組件能夠將請求重定向到任意一個url,而不單單是同一個應用。併發

                         重定向的源組件與目標組件不共用同一個HttpServletRequest對象,所以不能在request範圍內共享數據。mvc

          請求轉發:轉發的源組件與目標組件必須在同一個應用中,二者能夠在request範圍內共享數據。app

工做流程:url

     1.重定向spa

          瀏覽器發出http請求  >> 服務器接受請求併發送302狀態碼和新的對應的url到瀏覽器  >>

          瀏覽器接收響應並自動請求新的url  >> 服務器接收請求並尋找客戶所需的資源響應到瀏覽器

     2.轉發

          瀏覽器發出http求其  >> 服務器接收請求  >> 服務器調用內部的一個方法在容器內完成請求處理和轉發動做  >>

          將客戶所需資源發送到瀏覽器


二、SpringMVC重定向

例如:在處理方法中 return "redirect: xxxx";


三、重定向傳值

要使用Flash屬性,必須在Spring MVC配置文件中添加<mvc:annotation-driven />元素,而後,還必須在方法上添加一個新的參數類型org.springframework.web.servlet.mvc.support.RedirectAttributes。


例如:

Controller類中的處理方法

@RequestMapping(value = "/saveProduct", method = RequestMethod.POST)
public String saveProduct(Product product, RedirectAttributes redirectAttributes) {
    .....
    redirectAttributes.addFlashAttribute("product", product);
    return "redirect:product_view";
}
相關文章
相關標籤/搜索