SpringMVC中使用了DispatcherServlet作为Servlet,其重写了FrameworkServlet中的模板方法。下面是各模板方法的使用说明:
1)MultipartResolver
在Spring中,MultipartResolver主要用来处理文件上传。默认没有使用,则开发者需要自己处理。若要使用MultipartResolver则需要在web.xml中添加multipart解析器,若请求中包含multipart,那么上下文定义的MultipartResolver就会解析它。
配置如下:
<bean id="multipartResolver" class="org.Springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maximumFileSize"><value>字节数</value></property>
</bean>
2)LocaleResolver
在Spring的国际化配置中一共有三种使用方式:
a、基于URL参数的配置:通过URL参数来控制国际化,比如在页面上加一句
<a href="myTest.jsp?locale=zh_CN">简体中文</a>
来控制项目中使用的国际化参数
配置如下:
<bean id="localeResolver" class="org.Springframework.web.servlet.i18n.AcceptHeaderLocaleResolver"/>
b、基于session的配置:通过检验用户会话中预置的属性来解析区域,最常用的是根据用户本次会话过程中的语言设定决定语言种类,如果该会话不存在,它会根据accept-language HTTP头部确定默认区域。
配置如下:
<bean id="localeResolver" class="org.Springframework.web.servlet.i18n.SessionLocaleResolver"/>
c、基于Cookie的国际化配置:用于通过浏览器的cookie设置取得Locale对象,这种策略在应用程序不支持会话或者状态必须保存在客户端时有用。
配置如下:
<bean id="localeResolver" class="org.Springframework.web.servlet.i18n.CookieLocaleResolver"/>
3)ThemeResolver
一个主题就是一组静态资源(比如样式表、图片等),它们可以影响应用程序的视觉效果
a、主题资源
<bean id="themsSource" class="org.Springframework.ui.context.support.ResourceBundleThemeSource">
</bean>
b、主题解析器
FixedThemeResolver:用于选择一个固定的主题
<bean id="themeResolver" class="org.Springframework.web.servlet.theme.FixedThemeResolver">
<property name="defaultThemeName" value="主题名" />
</bean>
CookieThemeResolver:用于实现用户所选的主题,以cookie的形式存放在客户端的机器上
<bean id="themeResolver" class="org.Springframework.web.servlet.theme.CookieThemeResolver">
<property name="defaultThemeName" value="主题名" />
</bean>
SessionThemeResolver:用户的主题保存在HTTP session中
<bean id="themeResolver" class="org.Springframework.web.servlet.theme.SessionThemeResolver">
<property name="defaultThemeName" value="主题名" />
</bean>
AbstractThemeResolver:是一个抽象类被SessionThemeResolver和FixedThemeResolver继承,也可以通过继承该抽象类来自定义主题解析器
c、拦截器:根据用户请求来改变主题
配置如下:
<bean id="themeChangeInterceptor" class="org.Springframework.web.servlet.theme.ThemeChangeInterceptor">
<property name="paramName" value="themeName"></property>
</bean>
注:需要在handlerMapping中配置拦截器
<property name="interceptors">
<list>
<ref local="themeChangeInterceptor" />
</list>
</property>
4)HandlerMappings
客户端发出Request时DispatcherServlet会将Request提交给HandlerMapping,然后HandlerMapping根据WebApplicationContext的配置回传给DispatcherServlet相应的Controller。
注:DispatcherServlet按各个HandlerMapping的优先级进行询问,直到获取一个可用的Handler为止
5)HandlerAdapters
作为总控制器的派遣期servlet通过外处理器映射得到处理器后,会轮询处理器适配器模块,查找能够处理当前HTTP请求的处理器是配置的实现,处理器适配器模块根据处理器映射返回的处理器类型来选择某一个适当的处理器适配器的实现,从而适配当前的HTTP请求。
6)HandlerExceptionResolvers
使用这种异常处理方式,需要实现resolveException方法,该方法返回一个ModelAndView对象,在方法内部对异常的类型进行判断,然后尝试生成对应的ModelAndView对象,如果该方法返回了null,则Spring会继续寻找其他的实现了HandlerExceptionResolver接口的bean,直到返回一个ModelAndView对象。
配置如下:
<bean id="exceptionHandler" class="com.test.exception.MyExceptionHandler" />
7)RequestToViewNameTranslator
当Controller处理器方法没有返回一个View对象或逻辑视图名称,并且在该方法中没有直接往response的输出流里面写数据的时候,Spring就会采用约定好的方式提供一个逻辑视图名称。可通过实现接口org.Springframework.web.servlet.RequestToViewNameTranslator接口的getViewName方法来实现。
属性介绍:
a、prefix:前缀,表示约定好的视图名称需要加上的前缀,默认是空串
b、suffix:后缀,表示约定好的视图名称需要加上的后缀,默认是空串
c、separator:分隔符,默认是“/”
d、stripLeadingSlash:如果首字符是分隔符,是否要去除,默认是true
e、stripTrailingSlash:如果最后一个字符是分隔符,是否要去除,默认是true
f、stripExtension:如果请求路径包含扩展名是否要去除,默认是true
g、urlDecode:是否需要对URL解码,默认是true
8)ViewResolvers
在springmvc的配置中这个配置是比较常见的了,当Controller将请求处理结果放入到ModelAndView中以后,DispatcherServlet会根据ModelAndView选择合适的视图进行渲染。ViewResolver接口定义了resolveViewName方法,根据viewName创建合适类型的View实现。
配置如下:
<bean class="org.Springframework.web.servlet.view.InternalResourceViewResolve">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
9)FlashMapManager
springmvc Flash attributes 提供了一个请求存储属性,可供其他请求使用。在使用重定向的时候非常必要。Flash attributes在重定向之前暂存(就像存在session中)以便于重定向之后还能使用,并立即删除。
FlashMap用于保持flash attributes,而FlashMapManager用于存储、检索、管理FlashMap实例。