概述
今天开始第五天的spring mvc框架学习
----------------------3小时完成-----------------------------------
要做的事:学习spring mvc
1、在Spring MVC中使用 flash attributes
2、Spring MVC Building
3、Using locales
-------------------------------------------------------------------------
markpage45
1、在Spring MVC中使用 flash attributes
spring mvc Flash attributes提供了一个请求存储属性可供另外请求使用一种方式。在使用重定向时候非常必要。
例如,Post/Redirect/Get模式。flash attributes在重定向之前暂存以便重定向之后还能使用,并立即删除。
Spring MVC有两个主要的抽象来支持flash attributes。FlashMap用于保持 flash attributes而FlashMapManager用于存储,检索,管理FlashMap实例。
Flash attribute支持默认开启并不需要显式启用,它永远不会导致HTTP Session的创建。每一个请求都有一个"input" FlashMap具有从上一个请求传过来的属性和一个“output”FlashMap具有将要在后续请求中保存的属性。这两个FlashMap实例都可以通过静态方法RequestContextUtils从Spring MVC的任何位置访问。
使用注解的控制器通常不需要直接与FlashMap一起工作。相反,@RequestMapping方法可以接受一个RedirectAttributes类型的参数,用它来在重定向场景中增加flash attributes。通过RedirectAttributes加入的Flash attributes将自动传播到“output”FlashMap。同样的,重定向之后,从“input” FlashMap来的属性自动添加到控制器的Model,为目标Url服务。
Matching requests to flash attributes
闪存属性的概念存在于许多其他的Web框架,事实证明,有时受到并发问题。这是因为根据定义flash属性是要被存储直到下一个请求。但是恰好“next”请求并不是接受者,而是另外的异步请求,这种情况下,flash attributes被过早移除。
2、Spring MVC Building
Spring MVC提供用于生成和使用UriComponentsBuilder和 UriComponents对URI编码的机制。
例如你可以展开并进行编码的uri模板字符串:
UriComponents uriComponents =
UriComponentsBuilder.fromUriString("http://example.com/hotels/{hotel}/bookings/{booking}").build();
URI uri = uriComponents.expand("42","21").encode().toUri();
你可以使用单独的URI组件expand和encode:
UriComponents uriComponents = UriComponentsBuilder.newInstance()
.scheme("http").host("example.com").path("/hotels/{hotel}/bookings/{booking}").build().expand("42","21")
.encode();
在Servlet环境中,ServletUriComponentsBuilder子类提供了静态工厂方法来从Servlet请求复制可用的URL信息:
HttpServletRequest request = ...
ServletUriComponentsBuilder ucb = ServletUriComponentsBuilder.fromRequest(request).replaceQueryParam("accountId","{id}").build()
.expand("123").encode();
另外,你可以选择复制包括甚至contect path的可用信息的子集:
ServletUriComponentsBuilder ucb =
ServletUriComponentsBuilder.fromContextPath(request).path("/accounts").build()
或在DispatcherServlet被以name映射情况下,你也可以讲servlet mapping的文字部分包含进来:
ServletUriComponentsBuilder ucb =
ServletUriComponentsBuilder.fromServletMapping(request).path{"/accounts"}.build()
3、Using locales
Spring的体系结构中,大部分都支持国际化,就像Spring Web MVC框架一样。DispatcherServlet使你能够使用客户端的locale自动解决信息。这都是由LocaleResolver对象来实现的。
请求进来的时候,DispatcherServlet查找一个locale resolver,如果它找到了一个,它就试图用它来设置locale。使用 RequestContext.getLocale()方法,你可以始终检索由locale resolver解决的 locale。
为了自动处理locale resolution,你可以给handle mapping附加一个拦截器来改变指定环境下的locale,例如,基于请求中的一个参数。
下面是Spring中locale resolvers的一些选择。
3.1 AcceptHeaderLocaleResolver
该locale resolver拦截客户端发送请求中的 accept-language头信息。通常该header字段包含客户端操作系统的locale。
3.2CookieLocaleResolver
该locale resolver拦截一个可能存在于客户端的cookie,看是否设置了locale。如果是这样,它将使用指定的区域设置。
3.3SessionLocaleResolver
SessionLocaleResolver允许你从可能与用户请求相关联的session中检索locales。
3.4LocaleChangeInterceptor
你可以通过将LocaleChangeInterceptor添加到 handlermappings来启用locales更改。
它将检测请求中的参数并修改locale。
mg:49
最后
以上就是美满店员为你收集整理的学习spring mvc 五的全部内容,希望文章能够帮你解决学习spring mvc 五所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复