SpringMVC几种重定向以及携带参数的处理
来源:互联网 发布:python中的str是什么 编辑:程序博客网 时间:2024/05/22 10:40
今天要学习的内容是SpringMVC的重定向,我将这个内容划分为两块。
1)不携带参数重定向;
2)携带参数重定向;注意:本文没有考虑Spring2.0版本的写法,比如:
return new ModelAndView("/redirectPage");
modelAndView.setViewName("/secondJsp);
1 不携带参数的重定向
分为以下几种
1)返回redirect字符
return "redirect:/page/second";
这是比较常见的用法,redirect后面是映射地址
2)返回无redirect字符
return "second"
这是直接返回JSP视图的名称,这不属于重定向,但一定程度上可以达到一些效果,所以也把它记录进来。
3)调用当前控制器的方法
public class redirectDemo{ @RequestMapping("/first") pubic String first(){ return second(); } @RequestMapping("/second") public String second(){ return "second"; }}
这个也不属于重定向,而是一般的方法调用,但用却很方便,例如:我想修改一个链接,但是这个链接却在很多地方用到了,我担心修改以后导致很多地方出现404错误。所以我在这里重写一个映射地址,原来的映射地址调用这个地址的方法,这样保证了两个映射地址都能使用。是不是很方便?
以上就是不带参数的重定向写法总的来说只有一行代码:
return "redirect:/page/second";
然后看一下,带参数的写法。
2 携带参数的重定向
这里有三种方式:
1)拼接字符串;
这种比较简单,就是将参数拼接到需要重定向的URL中;
return "redirect:/page/second?param1=lay¶m2=lay2";
2)RedirectAttribute—–addAttribute()的用法
第二种方式直接看代码
public String first(RedirectAttribute redirectAttribute){ redirectAttribute.addAttribute("param1", "lay"); return "redirect:/page/second";}
我们看到,依旧是那个重定向的写法,但是参数从URL链接中拿出来了。采用RedirectAttribute来传参数。
这里注意,这种穿参数的方式,其实和拼接字符是一样的,因为最终,它都会被拼接到URL中。
3)RedirectAttribute—–addFlashAttribute()的用法
前两种用法有两个问题
1)参数中如果是中文的话会出现乱码,如果需要传中文可能需要进行编码和解码。这是很烦恼的一件事。
2)参数被拼接在URL中,也就意味着我们将参数暴露给了用户,对于有些参数来说,这是不安全的。可能需要做加密工作。
基于以上的问题,我们用第三种方案来解决。也就是
addFlashAttribute()的方法
这是Spring3.1添加的flash属性,具体用法和addAttibute()类似。
@Controller@RequestMapping("/page")public class redirectDemo{ @RequestMapping("/first") public String first(RedirectAttribute redirectAttribute){ redirectAttribute.addFlashAttibute("param1", "lay"); return "redirect:/page/second"; } @RequestMapping("/second") public String second(@ModelAttribute("param1") String param1){ System.out.println(param1); return "second"; }}
与前面的方法对比,我们发现有几个不同点:
1)URL中不再有参数显示,也就是说参数没有暴露出来。
2)中文乱码问题也不存在了。
3)参数接收需要使用@ModelAttribute注解
4)刷新页面以后,参数丢失了关于第4点需要赘述一下,由于这种传输参数的方式,是将参数放入到session中,然后从中取值,而后就销毁了,所以当你刷新页面的时候,已经取不到值了。
注意:
本文只考虑了redirect没有说forward;但是forward的用法和redirect基本相同。
区别:
可能就是在于redirect是重定向,而forward是转发。什么意思?前者是等于让用户向另外一个URL请求资源,而后者则是我们服务器直接指向另一个URL的资源,然后返回给用户,在用户看来,URL没变。所以,可以在浏览器地址栏上看到,前者的URL是变化了,后者则是没有变化。
以上,仅是个人简单地学习和理解
- SpringMVC几种重定向以及携带参数的处理
- 关于springmvc重定向如何携带参数的问题
- 关于SpringMVCController层请求重定向携带参数的处理
- springmvc-请求转发重定向(携带参数)
- Springmvc重定向参数以及表单提交问题的认识
- springmvc的contronller之间携带参数的跳转
- springmvc的contronller之间携带参数的跳转
- springmvc的contronller之间携带参数的跳转
- SpringMVC重定向传参数的实现
- SpringMVC重定向传参数的实现
- SpringMvc Controller 带参数的重定向 不能跳转问题处理方案
- Spring MVC中重定向如何携带参数
- springMVC 重定向带参数
- SpringMVC 重定向参数 RedirectAttributes
- SpringMVC 重定向参数 RedirectAttributes
- SpringMvc带参数重定向
- springmvc重定向传递参数
- SpringMVC 重定向参数 RedirectAttributes
- UML 九种图
- 编写Android中的蓝牙模块驱动和底层HART设备
- ZOJ 3489Old Labels
- tslib库的安装和基于触摸屏的应用程序开发基础
- Servlet单例多线程问题
- SpringMVC几种重定向以及携带参数的处理
- RocketMQ源码学习--消息存储篇
- 数据结构与算法分析C语言描述-1.1
- POJ 2299 Ultra-QuickSort (归并排序、逆序数)
- Ubuntu16.04安装redis的问题
- Java集合框架理解与分析01
- CSpreedSheet操作EXCEL的函数详解
- 例说生产者和消费者模型
- AChartEngine应用之BarChart(动态柱形图)