1、时间真快,一晃又快冬天了,下了第一场雪。雪花漫漫,堵车悠悠。

2、这次遇到这样一个问题,就是RedirectAttributes传递数据参数,如果参数数据过大,在IE8浏览器时候会跳转不过去。其实发现,很多时候都是IE8给我们找麻烦。因为在IE9以上还有谷歌等其他浏览器基本都是可以携带大量的长度的数据参数。所以之前的工程估计也是没有注意到这一点。

3、先上一个问题原型代码

@RequestMapping("/test1.do")
public String test1(HttpServletRequest request, HttpServletResponse response, RedirectAttributes attr) throws Exception { attr.addAttribute("content", 非常长的一串字符串,这里我就不写了哈,靠想象);
return "redirect:/test2.do";
} @RequestMapping("/test2.do")
public String test2(HttpServletRequest request, HttpServletResponse response) throws Exception { }

4、我们想要获取content参数的值,那么我想到了几种方法。

5、方法一,我们知道RedirectAttributes的addAttribute()方法其实是一种get方式,那么参数就会拼接到url上,这样IE8超过限制的长度,就无法跳转了。那么其实RedirectAttributes也给提供了另一种传参方式addFlashAttribute(),这个是相当月post方式,不会再地址栏上拼接参数,那么我们如何接收这种方式的参数呢。也有两个方案,接收方案一:

@RequestMapping("/test1.do")
public String test1(HttpServletRequest request, HttpServletResponse response, RedirectAttributes attr) throws Exception { attr.addFlashAttribute("content", 非常长的一串字符串,这里我就不写了哈,靠想象);
return "redirect:/test2.do";
} @RequestMapping("/test2.do")
public String test2(HttpServletRequest request, HttpServletResponse response,@RequestParam(value="content") String content) throws Exception {
String result = content;
}

6、方案一很容易发现是利用spring的注释方法@RequestParam(value="content") String content来获取的。但是有时候这种方法不方便使用,那么还有一个方案二:

@RequestMapping("/test1.do")
public String test1(HttpServletRequest request, HttpServletResponse response, RedirectAttributes attr) throws Exception { attr.addFlashAttribute("content", 非常长的一串字符串,这里我就不写了哈,靠想象);
return "redirect:/test2.do";
} @RequestMapping("/test2.do")
public String test2(HttpServletRequest request, HttpServletResponse response) throws Exception {
     //1.RequestContextUtils是spring提供的类。
Map<String, String> flashmap = (Map<String, String>) RequestContextUtils.getInputFlashMap(request);
String a = flashmap.get("content");
}

7、这个也是运用了spring的RequestContextUtils类获取到参数content

8、如果这两个方案都不方便使用,也有一种简单便捷的方式,就是利用session,不过这种方式要考虑并发高的时候session的影响,要根据场景来判断

@RequestMapping("/test1.do")
public String test1(HttpServletRequest request, HttpServletResponse response, RedirectAttributes attr) throws Exception { request.getSession().setAttribute("content", 非常长的一串字符串,这里我就不写了哈,靠想象);
return "redirect:/test2.do";
} @RequestMapping("/test2.do")
public String test2(HttpServletRequest request, HttpServletResponse response) throws Exception {
          //2.运用session 删除session
String content = (String) request.getSession().getAttribute("content");
request.getSession().removeAttribute("content");
}

9、好了,目前就想到了这几个方案,不知道能否帮助到各位,如果有好的方案也希望大家教我,谢谢

RedirectAttributes 之 IE8请求跳转失败的更多相关文章

  1. 为什么不能将客户端的连接请求跳转或转发到本机lo回环接口上?

    一.为什么不能将本机的请求跳转/转发到回环接口上? 如上图一样,服务器对外只开放了一个80端口,但是web服务监听在了lo 接口上8080端口上,现在要实现外网通过访问服务器的80端口,来提供web服 ...

  2. startActivity跳转失败而且没有异常信息

    startActivity跳转不能显示目标activity的布局(显示空白页),而且没有异常信息 onCreate()方法重写错误 应该重写的是onCreate(Bundle savedInstanc ...

  3. svn 提交错误 400 Bad Reqest MKACTIVITY 请求于XX失败 Conflict Unable to connect to a repository at URL

    思路来源:http://www.cnblogs.com/wangyt223/archive/2012/11/22/2782801.html svn 提交错误 400 Bad Reqest MKACTI ...

  4. DES加密与解密在GET请求时解密失败的问题

    DES加密与解密在GET请求时解密失败的问题 在数据进行加密后传递会更安全,但可能有个问题:就是Url编码问题,如果不对Url进行编码直接加密,那么在解密时,如果字符串存在 “+”,这种特殊符号,在解 ...

  5. 微信小程序页面-页面跳转失败WAService.js:3 navigateTo:fail url not in app.json

    微信小程序新建页面的要素一是新建的文件名称和其子文件的名称最好一致,不然容易出问题,在小程序页面跳转中如果出现WAService.js:3 navigateTo:fail url not in app ...

  6. App拉起小程序提示跳转失败

    App拉起小程序提示跳转失败 req.userName = "gh_8afldfalsejw"; // 小程序的原始ID,注意不是Appid

  7. 单点登录跳转失败(原因是 主票据申请子票据失败) asp.net 同站点下不同应用间不同版本Framework问题

    单点登录跳转失败(原因是 主票据申请子票据失败) asp.net 同站点下不同应用间不同版本Framework问题 今天遇到一个问题,在主站点现在配置的应用和主站点登录会话状态不能共享,进入子站点应用 ...

  8. 【Azure API 管理】APIM CORS策略设置后,跨域请求成功和失败的Header对比实验

    在文章"从微信小程序访问APIM出现200空响应的问题中发现CORS的属性[terminate-unmatched-request]功能"中分析了CORS返回空200的问题后,进一 ...

  9. Ajax发送POST请求SpringMVC页面跳转失败

    问题描述:因为使用的是SpringMVC框架,所以想使用ModelAndView进行页面跳转.思路是发送POST请求,然后controller层中直接返回相应ModelAndView,但是这种方法不可 ...

随机推荐

  1. 线性表的顺序存储结构之顺序表类的实现_Java

    在上一篇博文——线性表接口的实现_Java中,我们实现了线性表的接口,今天让我们来实现线性表的顺序存储结构——顺序表类. 首先让我们来看下顺序表的定义: 线性表的顺序存储是用一组连续的内存单元依次存放 ...

  2. js之yeild

    1.万恶的回调 对前端工程师来说,异步回调是再熟悉不过了,浏览器中的各种交互逻辑都是通过事件回调实现的,前端逻辑越来越复杂,导致回调函数越来越多,同时 nodejs 的流行也让 javascript ...

  3. Python3.x urlib包

    在Python3.x中,我们可以使用urlib这个组件抓取网页,urllib是一个URL处理包,这个包中集合了一些处理URL的模块,如下: 1.urllib.request模块是用来打开和读取URLs ...

  4. 《Python指南》学习笔记 一

    更新时间:2018-06-14 <Python指南>原文在这里.本篇笔记主要是划重点. Python 3.6.3 1.简单入门 1.1 编码 默认情况下,Python 源文件是 UTF-8 ...

  5. POP动画[1]

    POP动画[1] pop动画是facebook扩展CoreAnimation的,使用及其方便:) 1:Spring系列的弹簧效果(两个动画kPOPLayerBounds与kPOPLayerCorner ...

  6. matlab中的决策树

    1.函数 view(t)%画出决策树 prune %剪枝决策树 t2=prune(t,'level','level'/'node')%level:0 不剪枝 1 剪掉最后一层 2 最后两层%node: ...

  7. CentOS 6 系统启动流程

    第一阶段: BIOS启动引导 主板加电,系统自动载入BIOS(Basic Input Output System)系统 BIOS载入CMOS,读取CMOS中设定的硬件工作参数 BIOS进行POST自检 ...

  8. easy_encode_decode

    s = input("输入:") result = '' for i in range(len(s)): result += chr(ord(s[i])^2000) print(r ...

  9. Maven编译Java程序配置

    Hive 需要在工程里添加的Jar包: hadoop-2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar $HIVE_HOME/lib/hive-exe ...

  10. iOS UI(绘图)的几张原理图

    Core Animation是对OpenGL ES的Objective-C封装,具有与OpenGL ES几乎等价的高性能,却隐藏了OpenGL ES的复杂性. https://www.cnblogs. ...