Resolving View 2

        forward:前缀

        也可以为那些最终会被UrlBasedViewResolver及其子类解析的视图名使用forward:前缀,这会为这个视图名的其他部分(被视为URL)创建一个InternalResourceView,它会最终执行RequestDispatcher.forward()方法。和redirect:前缀一样,如果一个拥有forward:前缀的视图名被注入到控制器中,控制器在处理响应结果方面也不会有什么特别。


        ContentNegotiatingViewResolver

        ContentNegotiatingViewResolver本身并不会解析视图,但它会委托其他视图解析器(可在bean属性ViewResolvers中配置)去查找和客户端要求的呈现结果相似的视图。这有两种策略:

  1. 为每个资源使用不同的URI,特别是使用不同的文件后缀。如:http://www.example.com/users/fred.pdf请求一个pdf结果,而http://www.example.com/users/fred.xml请求一个XML结果。

  2. 使用相同的URI来定位资源,但是设置Accept HTTP请求头去列出它能理解的媒体类型。如:一个Accept Header被设置为application/pdf的HTTP请求会去请求一个pdf结果。一个Accept Header被设置为text/xml的HTTP请求会去请求一个xml结果,这种策略被称为“内容协商”(ContentNegotiating)。使用Accept Header有一个问题,那就是在基于HTML的web浏览器中没法去设置它,例如在firefox中它被固定为:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

        所以,在开发基于浏览器的web应用时,更普遍采用的是第一种策略(distinct URI)。

        

        通过比较请求的media type和View(及与之联系的ViewResolvers)所支持的media type(通常称之为Content-Type),ContentNegotiatingViewResolver选择一个合适的View去处理请求——第一个匹配Content-Type的View将结果返回给客户端,如果在整个ViewResolver链中都没有匹配的,那就会去找DefaultViews属性中指定的。

        为了支持基于文件拓展名的视图解析,ContentNegotiatingViewResolver的mediaTypes属性指定了文件拓展名到media types的映射。


        Flash Attributes

        Flash Attributes提供了一种方式,让一个请求存储供另一个请求使用的属性,这在重定向的使用中非常普遍。Flash Attributes会被临时存储在从重定向可用之前到重定向之后的请求这个阶段,并会被马上移除。Spring MVC使用了两个主要的抽象类来支持Flash Attributes——FlashMap用来存放flash attributes,FlashMapManager用来存取、管理FlashMap实例。Spring MVC对Flash Attributes的支持是一直开启的,即便没有使用它,它永远都不会导致HTTP会话被创建。在每一个请求上,都有一个携带从之前的请求传递的attributes的“输入FlashMap”,和一个为随后的请求保存attributes的“输出FlashMap”。通过RequestContextUtils中的静态方法,从Spring MVC的任何地方都能访问这些FlashMap。


        被注解的Controller通常不需要直接使用FlashMap,而是由一个@RequestMapping方法接收一个RedirectAttributes类型的参数,并使用它为重定向添加flash attributes。通过RedirectAttributes添加的Flash Attributes会被自动传递给“输出FlashMap”。

        

        Flash Attributes的概念存在于很多其他的Web框架中,并被证明有时会存在并发问题。这是因为Flash Attributes会被保存直到下一个请求,然而这“下一个请求”不是预料中的接收者,而是一个同步请求,这种情况下,Flash Attributes会被过早的移除。为了减少这种可能性,RedirectView会自动用重定向目标URL的路径和查询参数为FlashMap实例“打邮戳”,默认的FlashMapManager在进来的请求中寻找“输入FlashMap”时,依次匹配“邮戳”信息。这种方式没有完全消除并发问题的可能性,但却大大减少了重定向URL中已经包含的信息,因此在重定向的场景中,Flash Attributes被广泛推荐使用。

                




转载于:https://my.oschina.net/volcode/blog/638180

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值