一句話歸納:重定向是客戶端行爲,轉發是服務器行爲.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求其 >> 服務器接收請求 >> 服務器調用內部的一個方法在容器內完成請求處理和轉發動做 >>
將客戶所需資源發送到瀏覽器
例如:在處理方法中 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"; }