如下圖,創建兩個控制器來測試跳轉效果。以下所有跳轉方式均以這兩個控制器為實例。
response.sendRedirect("redirect:映射路徑?參數名="+參數值);
package com.demo.controller.Jump; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * Created by toutou on 2019/1/27. */ @Controller @Slf4j public class FirstJumpController { @RequestMapping(value = "/myfirst") public String MyFirst(){ // 如果使用ModelAndView方式: return new ModelAndView("forward:/mysecond"); // forward是請求轉發,是服務器端行為,相當於一次請求,地址欄的 URL 不會改變。 return "forward:/mysecond"; } }
@RequestMapping(value = "/myfirst2") public String MyFirst2(){ // redirect是請求重定向,是客戶端行為,相當於兩次請求,地址欄的 URL 會改變。 return "redirect:/mysecond"; }
@RequestMapping(value = "/myfirst3") public String MyFirst3(String name){ // redirect是請求重定向,是客戶端行為,相當於兩次請求,地址欄的 URL 會改變。 return "redirect:/mysecond2?name=" + name; }
bug: 參數包含中文字符的話,容易出現問題
第一種:redirectAttributes.addAttributie("prama",value);
redirectAttributes.addAttribute("prama1",value1); redirectAttributes.addAttribute("prama2",value2); return:"redirect:/path/list"
不足:這種方法相當於在重定向鏈接地址追加傳遞的參數:return:"redirect:/path/list?prama1=value1&prama2=value2
(直接追加參數會將傳遞的參數暴露在鏈接的地址上,非常的不安全)
第二種:redirectAttributes.addFlashAttribute("prama",value);
redirectAttributes.addFlashAttribute("prama1",str); redirectAttributes.addFlashAttribute("prama2",list); redirectAttributes.addFlashAttribute("prama3",map); return:"redirect:/path/list" ;
此方法隱藏了參數,鏈接地址上不直接暴露,但是能且只能在重定向的頁面上獲取prama的值。其原理是參數放到了session
中,session
在跳轉之后馬上移除對象。如果重定向到一個controller
,是取不到該prama的值的。
public ModelAndView findProjectPage() { ModelAndView modelAndView = new ModelAndView("redirect:映射路徑?參數名="+參數值); XXXXXXX return modelAndView; }
v源碼地址
https://github.com/toutouge/javademosecond/tree/master/hellospringboot
作 者:請叫我頭頭哥
出 處:http://www.cnblogs.com/toutou/
關於作者:專注於基礎平台的項目開發。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
特此聲明:所有評論和私信都會在第一時間回復。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信我
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角【推薦】一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!