Spring4.x官方参考文档中文版——第21章 Web MVC框架(19)

21.6 使用flash attribute(flash属性)

       Flash属性为一个请求提供了储存属性的方式,这些储存的请求可以在另一个请求中使用。当重定向时,比如在Post/Redirect/Get模式下的时候,这种需求是很普遍的。flash属性会在重定向之前暂存(一般是在session中),以便在重定向之后的请求中使用,并在使用后立即删除。

       Spring MVC有2个主要的抽象类来支持flash属性。FlashMap类是用来持有flash属性的,而FlashMapManager类是用来储存、检索和管理FlashMap实例的。

       Flash属性的支持总是设置为”on“(启用状态),所以不用去显式地去启用它,即便并不使用flash属性时也一样。它不会创建HTTP session。在每一个请求中,带有一个”input(输入)”的FlashMap对象,它带有从前一个请求(如果存在的话)传过来的attribute属性,还有一个”output(输出)“的FlashMap对象,它带有为下一个请求保存好的attribute属性。这两个FlashMap实例都能在Spring MVC的RequestContextUtils静态方法,在任意位置访问到。

       注解式的controller一般不需要直接与FlashMap进行协作。取而代之的是,@RequestMapping方法可以接受类型是RedirectAttributes的入参。在需要重定向的时候,可以使用它来添加flash属性。通过RedirectAttributes添加的flash属性会被自动地添加到”output(输出)”FlashMap中。同样地,在重定向之后,从”input(输入)”FlashMap实例也会被自动地添加到为目标URL提供服务的controller中的Model对象中。

 

请求与flash属性的匹配

       在许多的Web框架中,flash属性这个概念是普遍存在的,并且已被证明在有些时候的并发情况下会暴露出一些问题。因为根据flash属性的定义,这些属性会被一直储存到下一个请求为止。然而有可能下一个请求并不是这个请求的接收者,而是另一个异步的请求(比如轮询,或资源的请求),在这种情况下,flash属性就会被过早地被移除。

        为了减少这种问题发生的可能性,RedirectView对象会自动地使用路径和重定向目标URL的查询参数来”stamp(标记)”FlashMap的实例。默认的FlashMapManager会在寻找”input” FlashMap时,也会反过来把这些信息与传入的请求进行匹配。

       这并不会完全消除并发问题发生的可能性,但仍大大减少了在重定向的URL已经生效的信息中,发生该问题的可能性。因此,flash属性主要在重定向场景中是推荐使用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值