SessionLocaleResolver

SessionLocaleResolver保存客户的Locale到HttpSession对象中,并且支持获取和修改。它提供了在cookie中保存Locale状态的一个很好的替代方案。与CookieLocaleResolver一样,如果在会话中没有找到Locale,该类将回退调用HttpServletRequest的getLocale()方法。

这种实现(见代码清单5-37)和CookieLocaleResolver一样容易声明。

代码清单5-37  SessionLocaleResolver bean

使用代码清单5-35中的配置,无论客户通过它的首部传播什么,框架都会强制locale为en。

你可能注意到defaultLocale属性是java.util.Locale类型的,但是我们在上述配置中只指定了字符串en。Spring会用它的LocaleEditor属性编辑器将字符串转换成一个完整的Locale实例。LocaleEditor是Spring默认创建和注册的许多属性编辑器之一。

提示

Spring对JavaBean规范中的PropertyEditors的使用非常广泛。请花些时间学习Spring所提供的编辑器(第6章中的一部分)。

如果你的应用程序需要给每个用户提供他们自己唯一的体验,FixedLocaleResolver很快就会失去作用。使用默认的类AcceptHeaderLocaleResolver(虽然它提供了个性化的体验),应用程序就没有办法改变它的值。有另外的LocaleResolver两种实现允许应用程序为用户改变Locale,CookieLocaleResolver和SessionLocaleResolver,这两种实现都支持跨请求改变和保存Locale。

CookieLocaleResolver

CookieLocaleResolver通过浏览器的cookie设置和取得Locale对象。这种策略在应用程序不支持会话或者状态必须保存在客户端时有用。

请在ApplicationContext中声明这个类并使用它。值得注意的是,可以选择配置cookie的名称,但是该类提供了一个明智的默认值。如果希望清除Localecookie,只需调用setLocale()并传递一个null locale即可。

代码清单5-36包含一个CookieLocaleResolver的bean定义例子。

代码清单5-36  CookieLocaleResolver bean定义

 
 

注解

如果没有Localecookie存在,该类将后退调用ServletRequest的getLocale()方法。这个getLocale()方法返回客户首选的Locale,与Accept-LanguageHTTP首部中指定的一样,如果客户没有指定一个Accept-LanguageHTTP首部,该方法返回一个服务器默认的Locale。

SessionLocaleResolver

SessionLocaleResolver保存客户的Locale到HttpSession对象中,并且支持获取和修改。它提供了在cookie中保存Locale状态的一个很好的替代方案。与CookieLocaleResolver一样,如果在会话中没有找到Locale,该类将回退调用HttpServletRequest的getLocale()方法。

这种实现(见代码清单5-37)和CookieLocaleResolver一样容易声明。

代码清单5-37  SessionLocaleResolver bean

 
 

小结

那么选择使用何种区域管理策略呢?这完全取决于应用系统的需求是什么,通常,Spring不会强加任何决定给你。事实上,如果上述策略的实现不能满足需求,用LocaleResolver接口来创建一个定制的实现也很简单。

提示

不要被所提供的解决方案和实现所约束。很多时候,还存在着方便定制化的接口或者抽象类。

如果应用程序不允许用户改变它们的Locale,但是你承认浏览器的默认设置,那就坚持默认的AcceptHeaderLocaleResolver。该策略仿效Servlet规范的默认行为,不需要配置。这种选择并不出乎意料,因为它就像大多数人所期望的那样执行。

如果需要强制一个特殊的Locale并且它不能改变,那么FixedLocaleResolver很合适。这个类的设置非常简单,但是很受限制。

当应用程序要求用户从Web应用程序内改变Locale的时候,可以选择CookieLocaleResolver或SessionLocaleResolver。如果应用程序已经使用会话那么SessionLocaleResolver是一个合理的选择。但是,如果需要Locale选择保持时间超过会话的生命周期,那么CookieLocaleResolver是唯一的选择。这里没有明显的赢家,所以你应该选择最适合情形的选项。

6. MultipartResolver

处理文件上传是Web框架的标准特性,Spring MVC的org.springframework.web.multipart.MultipartResolver为该功能提供了策略接口。像许多其他特性一样,当进行文件上传处理时,Spring不会去"重新发明轮子"。Spring提供了两种开箱即用的MultipartResolver实现,一种使用JakartaCommons的FileUpload(http://jakarta.apache.org/commons/fileupload),另一种使用JasonHunter的COS(http://www.servlets.com/cos)。

提示

COS代表com.oreilly.servlet,因为该库最初是为Jason Hunter的Java SerlvetProgramming(O'Reilly, 2001)而写的。

HTTP文件上传,或者叫"HTML中的基于表单文件上传",定义于RFC 1867(http://www.ietf.org/rfc/rfc1867.txt)。通过创建HTML输入字段type="file",并且设置表单的enctype="multipart/form-data",浏览器就能将文本或二进制文件作为HTTP POST请求的一部分发送到服务器。

DispatcherServlet会在ApplicationContext中寻找名为multipartResolver的单独bean。若发现一个,它就会将每个进入的请求传递到解析器,以便用能够暴露上传文件功能的子类来包装HttpServletRequest。若未找到多部分解析器,就无法进行多部分文件处理。要注意的是,DispatcherServlet并不将MultipartResolvers串连起来。

与前述的解析器(如LocaleResolver)不同,客户代码从来不用于与该接口直接作用。DispatcherServlet管理MultipartResolver的工组流,客户代码只要将请求对象转换到org.springframework.web.multipart.MultipartHttpServletRequest包装对象,就可以获取上传文件。

代码清单5-38包含MultipartResolver接口。

代码清单5-38  MultipartResolver接口

 
 

DispatcherServlet调用isMultipart()方法,以决定引入请求是否是一个多部分请求。该实现很可能要检查请求的Content-Type以查找是否值为multipart/form-data,但这只是探索的一部分。

如果请求确实包含上传的文件,那么调用resolveMultipart()方法,返回MultipartHttp-ServletRequest(见代码清单5-39)。该包装对象添加方法来取得上传文件。

参考:http://blog.sina.com.cn/s/blog_6b9bfcfa0100n7gj.html

SessionLocaleResolver相关推荐

  1. java i18n实例_Java SpringMVC实现国际化整合案例分析(i18n) 专题

    所谓国际化就是支持多种语言,web应用在不同的浏览环境中可以显示出不同的语言,比如说汉语.英语等.下面我将以具体的实例来举例说明: (1)新建动态Javaweb项目,并导入几个SpringMVC必需的 ...

  2. Spring MVC 学习笔记 对locale和theme的支持

    Spring MVC 学习笔记 对locale和theme的支持 Locale Spring MVC缺省使用AcceptHeaderLocaleResolver来根据request header中的 ...

  3. springboot国际化i18n

    springboot国际化 支持多国语言展示 1.自动式国际化:通过浏览器发送请求头携带的信息自动使用国际化 2.手动式国际化:通过点击按钮,动态更改国际化 由于springboot自动配置中已集成国 ...

  4. Spring-boot国际化

    1.配置博客 国际化自动配置basename:默认的扫描的国际化文件名为messages,即在resources建立messages_xx.properties文件,可以通过逗号指定多个,如果不指定包 ...

  5. SpringMVC 国际化

    原文:http://www.cnblogs.com/liukemng/p/3750117.html 一.基于浏览器请求的国际化实现: 首先配置我们项目的springservlet-config.xml ...

  6. Spring MVC基础知识整理➣国际化和异常处理

    概述 Spring框架为WEB项目提供了国际化以及异常处理机制.所谓的国际化也就是不同国籍,显示不同国籍的语言与符号.异常处理,也就是能够捕获WEB项目下的所有异常信息,并能处理记录这些异常信息机制. ...

  7. Spring MVC国际化

    一.Spring MVC国际化简介        程序国际化是商业系统的一个基本要求,因为今天的软件系统不再是简单的单机程序,往往都是一个开放的系统,需要面对来自全世界各个地方的访问者,因此,国际化成 ...

  8. 深入浅出 SpringMVC - 2 提升篇

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7697738.html 前言: 本篇笔记是继 深入浅出 SpringMVC - 1 后的续篇,主 ...

  9. springmvc DispatchServlet初始化九大加载策略(一)

    由于篇幅较长,因此分三篇进行讲解: springmvc DispatchServlet初始化九大加载策略(一) springmvc DispatchServlet初始化九大加载策略(二) spring ...

最新文章

  1. 文件转换html文件失败,pandoc文档转换失败,出现错误67
  2. 【MIT港科大】最新《贝叶斯深度学习》2020综述论文,35页pdf全面阐述最新进展...
  3. 如何证明在素数p和2p之间存在另一个素数呢?简单却不完备的证明
  4. Httpwatch 工具介绍
  5. 查看tomcat启动文件都干点啥---server对象
  6. 【leetcode❤python】172. Factorial Trailing Zeroes
  7. 【47.92%】【hdu 5763】Another Meaning
  8. day5-shutil模块
  9. 【笔记 】weex POST请求 body数据服务器获取不到
  10. win10升级助手_Win10系统易升如何彻底关闭?「系统天地」
  11. HASH加密算法:MD4、MD5、SHA1
  12. win7 64 旗舰版虚拟GPU-VMware下+vs2013安装caffe+matlab+python
  13. ESP8266+blinker点灯(小爱+天猫+小度三合一)
  14. 大疆 IC设计校招笔试题目
  15. 04 第三章 命题逻辑的推理理论
  16. html5 input与textarea标签及其属性
  17. 计算机病毒生命开始周期,计算机病毒是人工生命第一个案例吗?
  18. Python学习指南(看完不迷路)
  19. 计算机网络概述知识点总结
  20. ulua、tolua原理解析

热门文章

  1. 使用FAI+PXE批量部署Debian。
  2. REAL6410、OK6410、TE6410 的区别
  3. Python 编程系列
  4. 数据结构 — 平衡二叉树
  5. Python基本语法_集合set/frozenset_内建方法详解
  6. Linux_RHEL7_YUM
  7. Linux内核移植之四:内核启动过程
  8. Simulink仿真---PMSM滞环电流控制仿真模型学习
  9. 两个蓝牙模块配对的方法
  10. NR 5G UE发起的去注册流程