File tree Expand file tree Collapse file tree 1 file changed +8
-0
lines changed Expand file tree Collapse file tree 1 file changed +8
-0
lines changed Original file line number Diff line number Diff line change 1+ Flash属性提供了一个请求存储属性以便其他请求使用的方式。最常用的情况是在重定向时——比如,Post/Redirect/Get 方式。Flash属性会在重定向前被暂时存储(通常是在session中),让重定向的请求可以获取到,并在重定向后立刻移除。
2+ Spring MVC有两个主要的概念来支持flash属性。` FlashMap ` 用来保存flash属性,` FlashMapManager ` 用来保存,检索和管理` FlashMap ` 实例。
3+ 对Flash属性的支持总是打开的,没必要显示的去开启,它不会导致HTTP session的创建。每个请求都有一个输入的` FlashMap ` 带着前一个请求传递的参数和一个输出的` FlashMap ` 为之后的请求保存属性。无论在Spring MVC中的哪里,都可以通过` RequestContextUtils ` 的京唐方法访问` FlashMap ` 。
4+ 带注解的控制器通常不需要直接使用` FlashMap ` 。想法的,` @RequestMapping ` 方法可以接受类型为` RedirectAttributes ` 的参数,并用它在重定向的环境下添加flash属性。通过` RedirectAttributes ` 添加的Flash属性会自动传播的到输出的FlashMap中。相似的,在重定向后,输入的` FlashMap ` 的属性会自动的添加到目标URL对应的控制器的` Model ` 中。
5+ > 匹配flash属性到请求
6+ flash属性的概念在其他的一些Web框架中存在,且被证明会在并发中暴露问题。这事因为flash属性会在下个请求之前被保存。然而,下一个请求可能不是预期的接受而是其他异步的请求(比如轮询或是自愿请求),这种情况下flash属性被过早的移除。
7+ 为了减少这种问题发生的可能性,` RedirectView ` 自动为` FlashMap ` 实例印上路径,请求参数和目标重定向URL的“章”。在查找输入` FlashMap ` 时,默认的` FlashMapManager ` 会将该信息与请求匹配。
8+ 这并不会完全消除并发问题的可能性,尽管如此,重定向URL中的信息已经大大减少了这个问题。因此建议主要在重定向语义中使用flash属性。
You can’t perform that action at this time.
0 commit comments