spring MVC之解析用户区域

spring MVC之解析用户区域

----------

 

解析用户区域

 

为了让web应用程序支持国际化,必须识别每个用户的首选区域,并根据这个区域显示内容。

在Spring MVC应用程序中,用户的区域是通过区域解析器来识别的,它必须实现LocaleResolver接口。Spring MVC提供了几个LocaleResolver实现,让你可以按照不同的条件来解析区域。除此之外,你还可以实现这个接口,创建自己的区域解析器。

要定义一个区域解析器,只需在web应用程序上下文中注册一个LocaleResolver类型的Bean就可以了。你必须将区域解析器的Bean名称设置为localeResolver,这样DispatcherServlet才能自动侦测到它。请注意,每DispatcherServlet只能注册一个区域解析器。

 

 

1.按HTTP请求头部解析区域

Spring采用的默认区域解析器是AcceptHeaderLocaleResolver。它通过检验HTTP请求的accept-language头部来解析区域。这个头部是由用户的web浏览器根据底层操作系统的区域设置进行设定。请注意,这个区域解析器无法改变用户的

区域,因为它无法修改用户操作系统的区域设置。

 

 

2.按会话属性解析区域

解析区域的另一种方法是通过SessionLocaleResolver。它通过检验用户会话中预置的属性来解析区域。如果该会话属性

不存在,它会根据accept-language HTTP头部确定默认区域。

<bean id="localeResolver" class="org.springframewrok.web.servlet
	.i18n.SessionLocaleResolver">
	<property name="defaultLocale" value="en"/>
</bean>

如果会话属性不存在,可以为这个解析器设置defaultLocale属性。请注意,通过修改保存该区域的会话属性,这个区域

解析器可以改变用户的区域设置。

 

 

3.按Cookie解析区域

你也可以检验用户浏览器中的Cookie,用CookieLocaleResolver来解析区域。如果Cookie不存在,它会根据accept-language HTTP头部确定默认区域。 

<bean id="localeResolver" class="org.springframework.web.servlet
	.i18n.CookieLocaleResolver"/>

这个区域解析器所采用的Cookie可以通过cookieName和cookieMaxAge属性进行定制。cookieMaxAge属性表示这个Cookie应该持续多少秒,-1表示这个Cookie在浏览器关闭之后就失效。 

<bean id="localeResolver" class="org.springframework.web.servlet
	.i18n.CookieLocaleResolver">
	<property name="cookieName" value="language"/>
	<property name="cookieMaxAge" value="3600"/>
	<property name="defaultLocale" value="en"/>
</bean>	
如果用户浏览器中不存在该Cookie,你也可以为这个解析器设置 defaultLocale属性。通过修改保存该区域的Cookie,这个区域解析器能够改变用户的区域。

 

 

4.修改用户的区域

除了显式调用LocaleResolver.setLocale()来修改用户的区域之外,还可以将LocaleChangeInterceptor拦截器应用到处理程序映射中,它会发现当前HTTP请求中出现的特殊参数。其中的参数名称可以通过拦截器的paramName属性进行自定义。如果这种参数出现在当前请求中,拦截器就会根据参数值来改变用户的区域。

<beans...>
	...
	<bean id="localeChangeInterceptor"
		class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
		<property name="paramName" value="language"/>
	</bean>
	<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="interceptors">
			<list>
				...
				<ref bean="localeChangeInterceptor"/>
			</list>
		</property>
	</bean>
	<bean class="org.springframework.web.servlet.mvc.support
		.ControllerClassNameHandlerMapping">
		<property name="interceptors">
			<list>
				...
				<ref bean="localeChangeInterceptor"/>
			</list>
		</property>
	</bean>
<beans>

LocaleChangeInterceptor只能为启用了它的那些处理程序映射侦测参数。因此,如果web应用程序上下文中配置了不止一个处理程序映射,就必须在所有处理程序映射中注册这个拦截器,以便能在任意URL中改变它们的区域设置。

现在,利用language参数,可以通过任意URL修改用户的区域。例如,下面两个URL分别将用户的区域语言改成了美式

英语和德语。 

http://localhost:8080/court/welcome.htm?language=en_US
http://localhost:8080/court/welcome.htm?language=de

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值