Spring3.X @MVC - (四)解析用户区域实现国际化

编程技术  /  houtizong 发布于 3年前   46

前言:

一、总共有10节,也就是10篇博客来讲述Spring的MVC,几乎涵盖了所有Spring MVC中的内容。

 

二、我创建的例子是一个球场预订系统,例子我已经测试调试通过,是一个Maven的project,包含一个Parent project:wsheng-spring-base和一个子Module:wsheng-spring-mvc.

 

三、在Eclipse中直接import maven的project即可,会同时引入上诉两个project的。

 

四、如果你没有耐心,可以不必往下学习,因为网上有很多例子,但是都是讲的Spring MVC很少的面,而且你可以快速的上手,但如果你想真正了解Spring MVC中的很多细节,就可以慢慢的去看博客(从第一节到第十节),如果有什么问题,欢迎信息告诉我。

 

五、学习的方法是你可以先将源码导入到eclipse中,然后根据博客上的内容,对照源码,慢慢消化,这是个漫长的过程,但是会帮助你了解很多Spring MVC的细节。

===================================================================================

 

 

在Spring3.X @MVC - (三)Spring3中的拦截器的基础上http://josh-persistence.iteye.com/blog/1880324

实现web显示内容的国际化。

 

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

 

二、解决方案:在Spring MVC中,有自己特定的区域解析器Local Resolver来识别用户的区域,Spring MVC中自带了多个Local Resolver,以提供和满足各种不同的条件解析。当然也可以通过实现Local Resolver来创建自己的区域解析器。

 

三、工作原理:

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

     Spring使用的默认区域解析器是AcceptHeaderLocalReslover。这个解析器会去检测HTTP请求的accept-language头表来解析区域。这个头标由用户的Web浏览器根据底层操作系统的区域进行设置。注意,这个区域解析器不能修改用户的区域,因为他不能修改用户操作系统的区域设置。

  

2. 按照会话属性解析区域

     SessionLocalResolver这个解析器会检查用户会话中的一个预定义属性解析区域,如果会话属性不存在,这个解析器从accept-language HTTP头标中确定默认区域。注意,SessionLocalResolver能够修改存储区域的会话属性,改变用户的区域。

<bean id = "localResolver" class="org.springframework.web.servelt.i18n.SessionLocalReslover">

      <property name="defaultLocale" value="en"/>

</bean>

 

3. 根据Cookie解析区域

    CookieLocalResolver检查用户浏览器中的一个Cookie来解析区域。如果这个Cookie不存在,区域解析器从accept-language HTTP头标中确定默认区域。

<!-- Locale resolver for cookies --> 

    <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>

 

4. 修改用户区域

   除了调用LocaleResolver.setLocale()显示地修改用户的区域之外,你还可以将LocaleChangeInterceptor应用到处理程序映射。这个拦截器检测当前HTTP请求中是否存在一个特殊的参数。这个参数名可以通过这个拦截器的

paramName属性定制。换句话说,如果当前的请求中包含了这样一个参数,这个拦截器将会根据参数值修改用户的区域。

<bean id="localeChangeInterceptor"

        class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">

        <property name="paramName" value="language" />

    </bean>

在web上下文中注册该拦截器

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">

        <property name="order" value="1"/>

        <!-- Interceptors are applied to all annotated controllers -->

         <property name="interceptors">

            <list>

                <ref bean="localeChangeInterceptor" />

            </list>

        </property>

    </bean>。

 

现在用户的区域就可以由带有language参数的任何URL修改,例如下面的两个URL分别将用户区域改成美国和德国:

http://localhost:8888/wsheng-spring-mvc/welcome?language=en-US

http://localhost:8888/wsheng-spring-mvc/welcome?language=de

接着,你可以在welcome.jsp中显示HTTP响应对象的区域,验证区域拦截器配置:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

 

<html>

<head>

<title><spring:message code="welcome.title" text="Backup - Welcome" /></title>

</head>

 

<body>

<h2><spring:message code="welcome.message" text="Backup - Welcome to Court Reservation System" /></h2>

 

Today is <fmt:formatDate value="${today}" pattern="yyyy-MM-dd" />.

<hr />

Handling time : ${handlingTime} ms

<br />

Locale : ${pageContext.response.locale}

</body>

</html>

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客