接上一篇中的重定向。

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-flash-attributes

flash attributes提供了一种方式让一个请求保存attribute用于其他请求。这在重定向时很常见--例如,Post/Redirect/Get pattern。flash attributes会被临时的保存--在重定向之前,通常是保存在session中。

对于flash attributes的支持,Spring MVC有两个主要抽象。FlashMap用于hold flash attributes,FlashMapManager用于存储、获取以及管理FlashMap实例。

Flash attribute支持总是打开的,不需要显式的启用。每个请求,都有一个"input" FlashMap -- 带有从前一个请求传来的attributes(如果有),以及一个"output" FlashMap-- 带有将要存储给下一个请求使用的attributes。两个FlashMap实例都可以在任意地方使用RequestContextUtils中的静态方法来访问。

使用注解的controllers通常不需要直接使用FlashMap。相反,@RequestMapping method可以接受一个RedirectAttributes类型的参数,并使用其来添加用于重定向的flash attributes。通过RedirectAttributes添加的flash attributes会被自动传播到"output" FlashMap。 同样的,重定向之后,来自"input" FlashMap的attributes会被自动添加到controller的Model中,以服务目标URL。

匹配请求到flash attributes

flash attributes的概念存在于很多其他Web框架中,且被证明可能导致并发问题。这是因为,根据定义,flash attributes是被存储截止到下一个请求。然而,下一个请求,可能不是预期的接收者,而是另一个异步请求(例如,polling或资源请求),这种情况下,flash attributes会被过早的移除。

为了降低这种问题的可能性,RedirectView会自动给FlashMap实例们加一个印章 -- 带有目标重定向URL的path和query parameters。默认的FlashMapManager会匹配请求和该信息 -- 在查找"input" FlashMap时。

这不会完全消灭并发问题的可能性,但会很大程度上降低。因此,flash attributes,推荐主要在重定向场景中使用!!!

Spring 4 官方文档学习(十一)Web MVC 框架之Flash Attributes的更多相关文章

  1. Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC

    内容列表: 启用MVC Java config 或 MVC XML namespace 修改已提供的配置 类型转换和格式化 校验 拦截器 内容协商 View Controllers View Reso ...

  2. Spring 4 官方文档学习(十一)Web MVC 框架之resolving views 解析视图

    接前面的Spring 4 官方文档学习(十一)Web MVC 框架,那篇太长,故另起一篇. 针对web应用的所有的MVC框架,都会提供一种呈现views的方式.Spring提供了view resolv ...

  3. Spring 4 官方文档学习(十一)Web MVC 框架

    介绍Spring Web MVC 框架 Spring Web MVC的特性 其他MVC实现的可插拔性 DispatcherServlet 在WebApplicationContext中的特殊的bean ...

  4. Spring 4 官方文档学习(十二)View技术

    关键词:view technology.template.template engine.markup.内容较多,按需查用即可. 介绍 Thymeleaf Groovy Markup Template ...

  5. Spring Boot 官方文档学习(一)入门及使用

    个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念, ...

  6. Spring boot官方文档学习(一)

    个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念, ...

  7. Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(二)

    接前一篇 Spring Framework 官方文档学习(四)之Validation.Data Binding.Type Conversion(一) 本篇主要内容:Spring Type Conver ...

  8. Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion

    本篇太乱,请移步: Spring Framework 官方文档学习(四)之Validation.Data Binding.Type Conversion(一) 写了删删了写,反复几次,对自己的描述很不 ...

  9. Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(一)

    题外话:本篇是对之前那篇的重排版.并拆分成两篇,免得没了看的兴趣. 前言 在Spring Framework官方文档中,这三者是放到一起讲的,但没有解释为什么放到一起.大概是默认了读者都是有相关经验的 ...

  10. Spring 4 官方文档学习(十一)Web MVC 框架之编码式Servlet容器初始化

    在Servlet 3.0+ 环境中,你可以编码式配置Servlet容器,用来代替或者结合 web.xml文件.下面是注册DispatcherServlet : import org.springfra ...

随机推荐

  1. <<Python基础教程>>学习笔记 | 第10章 | 充电时刻

    第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简 ...

  2. /usr/local/ssl/lib/libssl.a: error adding symbols: Bad value

    一.背景 编译第三方库A的时候提示依赖openssl库. 二.编译openssl库 去官网下载最新版本的openssl-1.0.2l.tar.gztar -zxvf openssl-1.0.2l.ta ...

  3. print to console or file

    /*----------------------------------------------------------------------*/ /*              Debug for ...

  4. spring3.0.6+hibernate3升级spring4.1.6+hibernate4.3遇到的问题

    1.下面这三个包,在hibernate4中已经废弃了,因为都直接用session来进行很好的事务管理 import org.springframework.orm.hibernate3.Hiberna ...

  5. 在向"带有自增字段的数据库表"中插入数据时,自定义"该自增字段"的数据

    在设计数据库表的时候,经常会使用自增主键或其他自增字段.比如: DB_UserGroups表中GroupID为该表主键,并为自增字段. 但在将某字段设置自增后,想在插入数据时,人为指定自增字段的数据内 ...

  6. An example of using Pandas for regression

    An example of using Pandas for regression 这个例子来自这本书 - "Python for Data Analysis", 这本书的作者 W ...

  7. 又发现一个visual studio 2015的坑啊。

    又发现一个visual studio 2015的坑啊...我的后台管理的目录名称叫@duck, 但是在新版VS2015中打开项目后编译,出现错误: Error opening response fil ...

  8. express设置模板引擎

    app.set('views', path.join(__dirname,'views')); app.set('view engine', 'ejs');

  9. 【Ubuntu】用户切换到root

    出于安全考虑,默认时 Ubuntu 的 root 用户时没有固定密码的,它的密码是随机产生并且动态改变的,貌似是每5分钟改变一次,所以用 su(switch user) 是不可以的,因为我们不知道 r ...

  10. iOS截屏功能

    代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // ...