• Springmvc 重定向参数传递方式


    Springmvc  通过return "redirect:" 实现重定向   重定向的状态码301  302

    301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于: 
    301 redirect: 301 代表永久性转移(Permanently Moved)。 
    302 redirect: 302 代表暂时性转移(Temporarily Moved )。 
    1.1、什么是301转向?什么是301重定向? 
      301转向(或叫301重定向,301跳转)是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。 
    1.2、什么是302重定向? 
      302重定向又称之为302代表暂时性转移(Temporarily Moved ),英文名称:302 redirect。 也被认为是暂时重定向(temporary redirect),一条对网站浏览器的指令来显示浏览器被要求显示的不同的URL,当一个网页经历过短期的URL的变化时使用。一个暂时重定向是一种服 务器端的重定向,能够被搜索引擎蜘蛛正确地处理。 

    在springmvc实现重定向进行参数传递方式有:

     一、在请求地址后面进行拼接

    @RequestMapping(value="/save")
        public String  save(){
            return "redirect:update?name=zhangsan&age=23";
        }

    二、采用RedirectAttributes 对象的 addFlashAttribute() 方法将参数数据放到session中session在跳转页面后马上移出对象,在跳转的方法中采用@ModelAttribute接收跳转后的参数

    @RequestMapping(value="/login")
        public String login(String name, String password, RedirectAttributes model){
    
            model.addFlashAttribute("msg",name);
    
            return "redirect:tohome";
        }
    
        @RequestMapping(value = "/tohome")
        public String home(@ModelAttribute(value="msg") String msg,Model model){
            model.addAttribute("msg",msg);
            return "redirect:home";
        }

    对上面关于RedirectAttribute 实现重定向传值方式

    三、RedirectAttributes 是Spring mvc 3.1版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的的工具类

    redirectAttributes.addAttributie("prama",value); 这种方法相当于在重定向链接地址追加传递的参数,例如:

    redirectAttributes.addAttributie("prama1",value1);
    
    redirectAttributes.addAttributie("prama2",value2);
    
    return:"redirect:/path/list" 

    以上重定向的方法等同于 return:"redirect:/path/list?prama1=value1&prama2=value2 " ,注意这种方法直接将传递的参数暴露在链接地址上,非常的不安全,慎用。

    四、redirectAttributes.addFlashAttributie("prama",value); 这种方法是隐藏了参数,链接地址上不直接暴露,但是能且只能在重定向的 “页面” 获取prama参数值。

    其原理就是放到session中,session在跳到页面后马上移除对象。如果是重定向一个controller中是获取不到该prama属性值的。除非在controller中用(@RequestPrama(value = "prama")String prama)注解,采用传参的方式。

    页面获值例如:

    redirectAttributes.addFlashAttributie("prama1",value1);
    
    redirectAttributes.addFlashAttributie("prama2",value2);
    
    return:"redirect:/path/list.jsp" 

    在以上参数均可在list.jsp页面使用EL表达式获取到参数值${prama*}

    controller获得redirectAttributes重定向的值例如:

    redirectAttributes.addFlashAttributie("prama1",value1);
    
    redirectAttributes.addFlashAttributie("prama2",value2);
    
    return:"redirect:/path/list/"
    
    @RequestMapping("list")
    public List<Student> list(@RequestPrama(value = "prama1")String  prama1,
       @RequestPrama(value = "prama2")String  prama2,...
    ){
        //TODO
        //your code
    
    }

    通过在controller中的list方法体中可以获取到参数值。同 (二) 差不多,可以自行选择,推荐用 (四)

  • 相关阅读:
    急招.NET系列职位
    程序员成长的三个方法
    xwebkitspeech
    张小龙的产品
    浅析商业银行“业务连续性管理体系”的构建
    Sonar for dotNet
    Moles测试Contrustor时候遇到的一个问题
    EntityFramework 用Moles的mock
    Accessor中Generic的元素是internal/private的会导致转换失败的异常
    Android自用Intent 介绍
  • 原文地址:https://www.cnblogs.com/xiejn/p/13952734.html
Copyright © 2020-2023  润新知