SpringMVC组件及配置详解

上传文件解析器

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

你可能感兴趣的:(java)