博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring MVC之LocaleResolver
阅读量:3750 次
发布时间:2019-05-22

本文共 1780 字,大约阅读时间需要 5 分钟。

在国际化资源时,我们会通过浏览器的语言选项判断客户端的本地化类型,例如我在中国,浏览器默认显示中文字符,那么用户在访问服务器时,浏览器中设置的本地化类型会包含在HTML请求报文中发送给Web服务器,如请求报文中的Accept-Language参数,假如用户修改了浏览器的本地化类型,鉴于国际化资源时,我们应该根据用户的需求动态的切换提示语或者其他信息。

再比如我们见过某某网站上有英文、中文、繁体切换的按钮,这种切换不要求用户更改浏览器选项,这些可以通过cookie/session/请求参数来切换本地化类型。
在默认情况下,springmvc根据Accept-Language判断用户的本地化类型。

spring容器启动时,会在上下文中寻找LocaleResolver本地化解析器,spring提供了3个本地化解析器和1个本地化拦截器:AcceptHeaderLocaleResolver、CookieLocaleResolver、SessionLocaleResolver、LocaleContextResolver、LocaleChangeInterceptor

spring上下文中,有且只有一个该实例。 DispatcherServlet初始化LocaleResolver

protected void initStrategies(ApplicationContext context) {	initLocaleResolver(context);}
  • AcceptHeaderLocaleResolver

    根据HTTP报文头的Accept-Language参数确定本地化类型。如果没有显示定义本地化解析器,Spring MVC默认采用此解析器

  • CookieLocaleResolver

    根据指定的Cookie值确定本地化类型。在spring配置文件中配置CookieLocaleResolverDispatcherServlet自动识别并装配。客户端只要通过JavaScript更改clientLanguage这个cookie的值,就可以控制服务器返回相应的本地化页面。

  • SessionLocaleResolver

    根据Session中特定的属性值确定本地化类型。SessionLocaleResolver会查找Session中属性名为SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME的属性,并将其转成Locale对象,作为客户端的本地化类型。在spring配置文件中加入以下代码即可。

    SessionLocaleResolverCookieLocaleResolver的区别是:前者一般要求用户登录后生成相应的用户会话才有效,而后者只要浏览器有Cookie存在即可。

  • LocaleChangeInterceptor

    从请求参数中获取本次请求对应的本地化类型。很多网站都允许通过一个参数控制网站的本地化,如 www.xxx.com?locale=zh_CN 返回对应中国大陆的本地化网页。Spring MVC 提供LocaleChangeInterceptor拦截器完成。
    Spring MVC上下文中通过<mvc:interceptors>配置拦截器。

    LocaleChangeInterceptor在默认情况下通过locale请求参数获取本次请求对应的本地化类型,用户可以通过其paramName属性指定一个其他参数名。由于LocaleChangeInterceptor的主要任务是从请求中获取本地化类型并将其设置给真正的本地化解析器,所以在配置LocaleChangeInterceptor之前,必须在上下文中先配置一个本地化解析器。由于AcceptHeaderLocaleResolver是从请求报文头获取本地化信息的,不能被动更改,因此只能选择CookieLocaleResolverSessionLocaleResolver

转载地址:http://evcsn.baihongyu.com/

你可能感兴趣的文章
蓝桥杯真题 17省10-k倍区间 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i
查看>>
TCP协议的流量控制
查看>>
TCP连接的三次握手过程,为什么不是两次或四次?
查看>>
小白都能看懂的DNS解析过程
查看>>
HTTP和HTTPS的区别?描述HTTPS的工作过程
查看>>
简述一下HTTP的状态码
查看>>
20210227vulhub靶场之环境配置---无法获得靶机IP的疑难解决方式(可以解决VBox和VMware不兼容问题)
查看>>
20210226web渗透学习之SSRF总结
查看>>
2021-06-01web渗透学习之sqlserver提权(转)
查看>>
大数据之Flume
查看>>
关于高可用配置hbase中出现的问题:Name or service not known
查看>>
centOs7下hadoop3.2.2namenode故障不自动转移
查看>>
在高可用的hive下执行bin/schematool -dbType mysql -initSchema报错
查看>>
hbase配置高可用
查看>>
linux下卸载和安装mysql
查看>>
在初始化namenode时:java.net.NoRouteToHostException: 没有到主机的路由;
查看>>
hive-hbase
查看>>
浅谈scala-API的基础概念及简单例子
查看>>
spark的历史服务器配置
查看>>
spark的API操作
查看>>