SpringMVC组件及配置详解

来源:互联网 发布:全景图合成软件 编辑:程序博客网 时间:2024/05/22 17:48

上传文件解析器

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.FixedLocaleResolverorg.springframework.web.servlet.i18n.SessionLocaleResolverorg.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.SimpleUrlHandlerMappingorg.springframework.web.servlet.handler.BeanNameUrlHandlerMappingorg.springframework.web.servlet.handler.ControllerClassNameHandlerMappingorg.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">projectController</prop>              <prop key="/manage.htm">managementController</prop>              <prop key="/user.htm">userController</prop>              <prop key="/upload.htm">fileUploadController</prop>          </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//主要是适配注解类处理器,@Controllerorg.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.InternalResourceViewResolverorg.springframework.web.servlet.view.ResourceBundleViewResolverorg.springframework.web.servlet.view.XmlViewResolverorg.springframework.web.servlet.view.xslt.XsltViewResolverorg.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver....

ViewResolvers在springmvc中的配置如下:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">      <property name="prefix" value="/WEB-INF/views/"/>      <property name="suffix" value=".jsp"/>  </bean> 

重点内容

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";}
1 0