前言:
一、总共有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>