Spring MVC Flash概念及使用

Spring MVC Flash attributes 提供了一个请求存储属性可供另外请求使用一种方式。 在使用重定向时候非常必要 — 例如, Post/Redirect/Get 模式。 Flash attributes 在重定向之前暂存 (就像存在 session中) 以便重定向之后还能使用,并立即删除。

Spring MVC 有两个主要的抽象来支持 flash attributes。 FlashMap 用于保持 flash attributes 而 FlashMapManager用于存储,检索,管理FlashMap 实例。

Flash attribute 支持默认开启( “on”)并不需要显式启用,它永远不会导致HTTP Session的创建。 每一个请求都有一个 “input”FlashMap 具有从上一个请求(如果有的话)传过来的属性和一个 “output” FlashMap 具有将要在后续请求中保存的属性。 这两个 FlashMap 实例都可以通过静态方法RequestContextUtils从Spring MVC的任何位置访问。

使用注解的控制器通常不需要直接与 FlashMap 一起工作。 相反, @RequestMapping 方法可以接受一个 RedirectAttributes 类型的参数,用它来在重定向场景中增加 flash attributes 。通过RedirectAttributes 加入的 Flash attributes 将自动传播到 “output” FlashMap。同样的,重定向之后,从 “input” FlashMap 来的属性自动添加到控制器的 Model ,为目标URL服务。

flash属性的概念在其他许多的Web框架中也存在,并且实践证明有时可能会导致并发上的问题。这是因为从定义上讲,flash属性保存的时间是到下个请求接收到之前。问题在于,“下一个”请求不一定刚好就是你要重定向到的那个请求,它有可能是其他的异步请求(比如polling请求或者资源请求等)。这会导致flash属性在到达真正的目标请求前就被移除了。为了减少这个问题发生的可能性,重定向视图 RedirectView 会自动为一个 FlashMap 实例记录其目标重定向URL的路径和查询参数。然后,默认的 FlashMapManager 会在为请求查找其该“传进”的 FlashMap 时,匹配这些信息。这并不能完全解决重定向的并发问题,但极大程度地减少了这种可能性,因为它可以从重定向URL已有的信息中来做匹配。因此,一般只有在重定向的场景下,我们才推荐使用flash属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值