SpringMVC redirect

核心

首先网上百度到的资源基本已经够用, 留作记录.

SpringMVC—redirect重定向跳转传值

虽然这哥们也是转的, 但又没有留源地址. 因此 ...

个人补充

同时如果懒得去原链接看, 我在这里也写出来, 同时文档略做更改.

同样仅仅考虑 SpringMVC 中的跳转问题:

  1. 这种是最为常见的情况:

     @RequestMapping("/t1.html")
    public String who2(String password, Model model) { return "test.jsp";
    }

    在这种拼接中, 会拼接上:

     <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/pages/" />
    <property name="suffix" value=".jsp" />
    </bean>

    对应的 suffix, 至于ModelAndView那种方式也不再多说.

  2. 采用redirect的方式

     @RequestMapping("/t1.html")
    public String who2(String password, Model model) { return "redirect:/index.jsp";
    }

    至于返回的路径加/, 这里就是指项目根目录, 而更有趣的作用应该是重定向至另一个 Controller, 因为在这里重定向的时候, 默认以当前 class 的 RequestMapping 为前缀,进行拼接. 但不会拼接对应的后缀.

     @RequestMapping("/test")
    @Controller
    public class TestController { @RequestMapping("/t1.html")
    public String who2(String password, Model model) { return "redirect: t2";
    }
    }

    404响应, HTTP Status 404 - /test/t2, 所以更适合用在 Controller上, 但存在同样的问题, 会将参数拼接在 Url上.

    所以如果不在意参数显示在前台的情况下, 这种方式已经能满足要求了. 如果需要访问的并非本类的 路径, 还可以自行拼接路径.

  3. RedirectAttributes

    在这种方式中, 返回值必须为 redirect 才会有起到存储数据的作用.

     @RequestMapping("/t1.html")
    public String who2(String password, RedirectAttributes model) {
    model.addAttribute("password", password);
    return "redirect: /index.jsp";
    }

    但和上述方式, 直接采用 Model 所带来的问题是相同的

    有以下测试:

     @RequestMapping("/t1.html")
    public String who2(String password, RedirectAttributes model) {
    model.addFlashAttribute("password", password);
    return "redirect: t3";
    } @RequestMapping("t3")
    public String who4(ModelMap map, HttpServletRequest request, String password, String username) {
    System.out.println(map.get("password"));
    System.out.println(request.getParameter("password"));
    System.out.println(request.getAttribute("password"));
    System.out.println(request.getSession().getAttribute("password"));
    System.out.println("password:" + password);
    Map map1 = RequestContextUtils.getInputFlashMap(request);
    System.out.println(map1.get("password"));
    return "myname";
    } <script type="text/javascript">
    alert('${password}');
    </script>

    输出结果:

     123
    null
    null
    null
    password:null
    123

    也就不难发现, 这种addFlashAttribute的方式其实仅仅只支持重定向至另一个 method, 而非页面, 因为在页面无法取出对应的参数.

    所以网上的几种方法, EL表达式, Request, Session, 这些方式都是取不出来对应的值得, 特别地, 在看源码之前, 对原理我也不敢多说什么,只知道是这样用的.

    另外一种获取数据的方法是:

     @ModelAttribute("password") String pwd
    
     //其他几种
    Map map1 = RequestContextUtils.getInputFlashMap(request); ModelMap map

    以及在本次被重定向之后, 转发的界面,用EL表达式可以取到.

    以及一种比较特殊的写法(addFlashAttribute, addAttribute 的返回值均为RedirectAttributes):

     model.addAttribute("username", "zzzzz").addFlashAttribute("password", password);

    可以通过多种方式设定想要的参数, 但需要注意的是, 一旦使用了 addAttribute, 参数就会被拼接在url上.

  4. RedirectView

    也是一种用法, 在 RedirectAttributes 用到的场合中, 除了采用 redirect: 的方式, 也可以采用 RedirectView的方式.

    这点类似于,常规使用中的, ModelAndView 和 return new String;

SpringMvc redirect的更多相关文章

  1. SpringMVC redirect乱码问题

    转:http://blog.csdn.net/xubo_zhang/article/details/8239725 spring redirect 用spring redirect中文会乱码:如下示例 ...

  2. SpringMVC redirect中文乱码问题

    在使用"redirect:xxx.do?param=中文"时会出现乱码问题,解决方案如下: 使用model.addAttribute来替代直接拼接参数.如下: @RequestMa ...

  3. SpringMVC——redirect重定向跳转传值

    原文:https://my.oschina.net/u/2273085/blog/398374 spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url ...

  4. SSM-SpringMVC-22:SpringMVC中转发(forward)和重定向(redirect)

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 转发和重定向大家都熟悉,都学到框架了,怎么能不了解转发和重定向呢? 如果有不熟悉的,可以去百度搜几篇博客去看看 ...

  5. jsp取addFlashAttribute值深入理解即springMVC发redirect传隐藏参数

    结论:两种方式 a.如果没有进行action转发,在页面中el需要${sessionScope['org.springframework.web.servlet.support.SessionFlas ...

  6. SpringMVC中使用forward和redirect进行转发和重定向以及重定向时如何传参详解

    转自:http://blog.51cto.com/983836259/1877188 2016-11-28 09:45:59   如题所示,在SpringMVC中可以使用forward和redirec ...

  7. springmvc中controller内方法跳转forward?redirect?

    使用springmvc的controller的时候,碰到controller内方法的跳转的问题,记录下问题以及自己测试的过程. 场景: 业务执行更新操作之后返回列表页面,列表页面需默认展示查询的列表数 ...

  8. SpringMVC重定向(redirect)传参数,前端EL表达式接受值

    由于重定向相当于2次请求,所以无法把参数加在model中传过去.在上面例子中,页面获取不到msg参数.要想获取参数,可以手动拼url,把参数带在后面.Spring 3.1 提供了一个很好用的类:Red ...

  9. SpringMVC视图解析中的 forward: 与 redirect: 前缀

    在 SpringMVC 中,可以指定画面的跳转方式.使用 forward: 前缀实现请求转发跳转,使用 redirect: 前缀实现重定向跳转.有前缀的转发和重定向操作和配置的视图解析器没有关系,视图 ...

随机推荐

  1. 基于python的Appium自动化测试的坑

    真的感谢@虫师 这位来自互联网的老师,让我这个原本对代码胆怯且迷惑的人开始学习自动化测试. 一开始搜索自动化测试的时候,虫师的博客园教程都是在百度的前几位的,我就跟着虫师博客园里面的教程学习.后来学s ...

  2. JAVA获取时间的方式

      1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ...

  3. unittest单元测试框架之coverage代码覆盖率统计

    什么是coveage? coverage是一个检测单元测试覆盖率的工具,即检查你的测试用例是否覆盖到了所有的代码.当你通过pip install coverage成功安装完coverage后,就会在p ...

  4. maven pom.xml中的 build说明

    在Maven的pom.xml文件中,Build相关配置包含两个部分,一个是<build>,另一个是<reporting>,这里我们只介绍<build>. 1. 在M ...

  5. thinkphp 调用wsdl接口实例化SoapClient抛出异常

    异常:Message:SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://*****?wsdl' : failed to load externa ...

  6. LVS初步

    LVS初步 一见 目录 目录 1 1. 前言 2 2. 思考 2 3. 名词解释 2 4. OSI参考模型 3 5. LVS架构 4 5.1. 负载均衡器(Load Balancer) 4 5.2.  ...

  7. UILabel 字体下方加下划线

        UILabel *knowKankan = [[UILabel alloc] initWithFrame:CGRectMake(0, MAINHEIGHT - 78 , MAINWIDTH, ...

  8. WP8启动您已发布的应用

    您可以使用来自 Windows.Phone.Management.Deployment 命名空间的 API 来确定,来自您的发布者 ID 的其他应用是否安装在手机上.如果已经安装,您也可以使用该 AP ...

  9. C#——Winform 无边框随意拖动【转载】

    本篇技术内容转载自:http://www.cnblogs.com/ap0606122/archive/2012/10/23/2734964.html using System; using Syste ...

  10. C#读取MP3文件的专辑图片和ID3V2Tag信息(带代码)

    第二次更新,后面的代码有问题,有些专辑图片读取不到.发现是PNG图片的问题.在读取的过程中调试发现,图片帧前10个字节包含了图片的格式,在有些歌曲写着JPEG的格式,数据却是PNG的.先说下思路. j ...