上传文件解析器
MultipartResolver
加载该组件时查找名为multipartResolver类型为MultipartResolver的Bean。作为该类型组件。
该组件没有默认实现,需要用户显示定义。否则dispatcherservlet中将没有该组件。
配置该组件应在springmvc配置文件中加入如下配置:
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:defaultEncoding="UTF-8"
p:maxUploadSize="5400000"
p:maxInMemorySize="5400000"
p:uploadTempDir="fileUpload/temp">
beans:bean>
本地化解析器
LocaleResolver
加载该组件时查找名为localeResolver类型为LocaleResolver的Bean。
若找不到用户显示定义该组件,使用默认实现类AcceptHeaderLocaleResolver。
可自定义的本地化解析器有:
org.springframework.web.servlet.i18n.FixedLocaleResolver
org.springframework.web.servlet.i18n.SessionLocaleResolver
org.springframework.web.servlet.i18n.CookieLocaleResolver
主题解析器
ThemeResolver
加载该组件时查找名为themeResolver类型为ThemeResolver的Bean。
若找不到用户显示定义该组件,使用默认实现类FixedThemeResolver。
详细使用参考如下地址;
springmvc theme使用
处理器路由表
HandlerMappings
DispatcherServlet中detectAllHandlerMappings属性为true时,根据类型匹配机制查找上下文及父容器中所有类型为HandlerMapping的Bean,将他们作为该类型组件。
detectAllHandlerMappings属性为false时,查找名为handlerMapping类型为HandlerMapping的类作为该类型的组件。
如果通过以上两种都找不到,使用BeanNameUrlHandlerMapping实现类创建该类型组件。
映射处理器:
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
org.springframework.web.servlet.handler.ControllerClassNameHandlerMapping
org.springframework.web.servlet.handler.ControllerBeanNameHandlerMapping
该组件一般不需要用户配置,若要配置,如下:
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="localeChangeInterceptor"/>
<ref bean="someOtherCheckInterceptor"/>
list>
property>
<property name="mappings">
<props>
<prop key="/project.htm">projectControllerprop>
<prop key="/manage.htm">managementControllerprop>
<prop key="/user.htm">userControllerprop>
<prop key="/upload.htm">fileUploadControllerprop>
props>
property>
bean>
处理器适配器
HandlerAdapters
HandlerAdapter是一个适配器,它用统一的接口对各种Handler方法进行调用。
DispatcherServlet中detectAllHandlerAdapters属性为true时,根据类型匹配机制查找上下文及父容器中所有类型为HandlerAdapter的Bean,将他们作为该类型组件。
detectAllHandlerAdapters属性为false时,查找名为handlerAdapter类型为HandlerAdapter的类作为该类型的组件。
如果通过以上两种都找不到,使用DispatcherServlet.properties配置文件中指定的三个实现类分别创建一个适配器,添加到适配器列表中。
默认的三个Adapter:
/**
主要是适配静态资源处理器,静态资源处理器就是实现了HttpRequestHandler接口的处理器,这类处理器的作用是处理通过SpringMVC来访问的静态资源的请求
**/
org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter
/**
是Controller处理适配器,适配实现了Controller接口或Controller接口子类的处理器,比如我们经常自己写的Controller来继承MultiActionController,那么自己写的这些Controller就会由SimpleControllerHandlerAdapter来适配
**/
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
//主要是适配注解类处理器,@Controller
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter(已弃用)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter(建议)
异常处理器异常解析器
HandlerExceptionResolvers
DispatcherServlet中detectAllHandlerExceptionResolvers属性为true时,根据类型匹配机制查找上下文及父容器中所有类型为HandlerExceptionResolver的Bean,将他们作为该类型组件。
detectAllHandlerExceptionResolvers属性为false时,查找名为handlerExceptionResolver类型为HandlerExceptionResolver的类作为该类型的组件。
如果通过以上两种都找不到,使用DispatcherServlet.properties配置文件中默认的实现类,但前提是用户修改了默认实现,默认是没有的。
用户可以自定义HandlerExceptionResolver:
Resolver需要继承HandlerExceptionResolver。
然后在springmvc配置文件中加入自定义Bean配置:
<bean class="your.HandlerExceptionResolver">bean>
请求到视图名翻译器
RequestToViewNameTranslator
加载该组件时查找名为viewNameTranslator类型为RequestToViewNameTranslator的Bean。
若找不到用户显示定义该组件,使用默认实现类DefaultRequestToViewNameTranslator。
该组件一般不需要自定义配置。
视图解析器
ViewResolvers
DispatcherServlet调用controller返回ModelAndView后,再使用各种viewResolver根据view查找要显示的视图,使用model对view进行渲染。
DispatcherServlet中detectAllViewResolvers属性为true时,根据类型匹配机制查找上下文及父容器中所有类型为ViewResolver的Bean,将他们作为该类型组件。
detectAllViewResolvers属性为false时,查找名为viewResolver类型为ViewResolver的类作为该类型的组件。
如果通过以上两种都找不到,使用DispatcherServlet.properties配置文件中默认的(InternalResourceViewResolver)实现类。
springmvc提供了各种类型的viewresolver:
org.springframework.web.servlet.view.InternalResourceViewResolver
org.springframework.web.servlet.view.ResourceBundleViewResolver
org.springframework.web.servlet.view.XmlViewResolver
org.springframework.web.servlet.view.xslt.XsltViewResolver
org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver
....
ViewResolvers在springmvc中的配置如下:
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
重点内容
FlashMapManager
重定向的福音。
为了防止表单页面刷新而导致的重复提交,通常的做法是表单提交后重定向到其他页面。但是重定向有时也是需要参数的。所以spring3.1+提供了FlashMap来临时存储重定向所需参数。一旦重定向完成,map中的参数将被清空。
具体用法:
@RequestMapping(value="addcustomer", method=RequestMethod.POST)
public String addCustomer(@ModelAttribute("customer") Customer customer,final RedirectAttributes redirectAttributes) {
//...
redirectAttributes.addFlashAttribute("message","Successfully added..");
//...
return "redirect:some_other_request_name";
}