springmvc 配置文件经验
来自: https://blog.csdn.net/menghuanzhiming/article/details/77980473
1. context:component-scan参考地址:http://blog.csdn.net/menghuanzhiming/article/details/77979986
2. context:component-scan替代context:annotation-config,参考地址:http://mushiqianmeng.blog.51cto.com/3970029/723880/
3. 处理器映射器、处理器适配器、异常处理和mvc:annotation-driven标签的关系,mvc:annotation-driven标签默认的注册了映射器、适配器、异常处理器,最好不使用mvc:annotation-driven,而是显示的手动配置,
参考地址:http://www.cnblogs.com/yangzhilong/p/3725849.html;
(1)映射器、适配器、异常处理等都可以配置多个但是匹配时都是由上到下依次匹配执行;
(2)同一个映射器在配置文件中配置了两次,springmvc会使用第一次生成的映射器;
(3)映射器会自动调用与之匹配成对的适配器;
(4)不同的适配器向拦截器传的参数不同,拦截器获取方法的方式不同,参考地址:http://chenzhou123520.iteye.com/blog/1702563,建议不要使用AnnotationMethodHandlerAdapter适配器,使用RequestMappingHandlerAdapter;
(5)适配器中配置的属性messageConverters,接收参数和返回参数,可以通过配置编码解决中文乱码问题,参考地址:http://blog.csdn.net/a67474506/article/details/46364159
(6)springmvc全局数据校验和局部数据校验的配置方式:
注意:本质其实就是将校验器绑定到处理器适配器上;
参考地址:http://blog.csdn.net/menghuanzhiming/article/details/78059876
4. 视图解析器;
5. 配置静态资源springmvc不进行拦截,代码如下:
只有当springmvc配置完全拦截时才需要配置,静态资源不拦截;
方式1:
<!--location:文件实际路径。 mapping:请求的URL格式 --> <mvc:resources location="/WEB-INF/js/" mapping="/js/**" /> <mvc:resources location="/WEB-INF/css/" mapping="/css/**" />
方式2:使用默认的servlet处理,
参考地址:http://www.cnblogs.com/fangqi/archive/2012/10/28/2743108.html
<mvc:default-servlet-handler />
6. 定时任务注解task:annotation-driven的使用,参考地址:
http://blog.csdn.net/medivhq/article/details/50945311
<!-- task定时任务扫描注解@Scheduled --> <task:annotation-driven/>
配置如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 配置一个编码bean,用于统一字符集 --> <bean id="utf8Charset" class="java.nio.charset.Charset" factory-method="forName"> <constructor-arg value="UTF-8"/> </bean> <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --> <context:component-scan base-package="edu.hrbeu.platform.modeling" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> </context:component-scan> <!-- 处理器映射器,启动项目时开始进行映射 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <!-- 处理器适配器,执行拦截器和后端控制器,并配置相应的数据转换类和数据校验类 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <!--类型转换 --> <property name="messageConverters"> <list> <ref bean="string_hmc" /> <ref bean="byteArray_hmc" /> <ref bean="resource_hmc" /> <ref bean="source_hmc" /> <ref bean="xmlAwareForm_hmc" /> <ref bean="jaxb2RootElement_hmc" /> <ref bean="jackson_hmc" /> </list> </property> <!-- 数据校验 --> <property name="webBindingInitializer" ref="webBindingInitializer"></property> </bean> <!-- 数据转换 --> <bean id="string_hmc" class="org.springframework.http.converter.StringHttpMessageConverter"><!-- 处理字符串.. --> <constructor-arg ref="utf8Charset"/> </bean> <bean id="byteArray_hmc" class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /><!-- 处理.. --> <bean id="resource_hmc" class="org.springframework.http.converter.ResourceHttpMessageConverter" /><!-- 处理.. --> <bean id="source_hmc" class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /><!-- 处理.. --> <bean id="xmlAwareForm_hmc" class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter" /><!-- 处理.. --> <bean id="jaxb2RootElement_hmc" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" /><!-- 处理.. --> <bean id="jackson_hmc" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /><!-- 处理json--> <!-- 全局数据校验 --> <!-- 数据验证 Validator bean --> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <!-- 校验器,使用hibernate校验器 --> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/> <!-- 指定校验使用的资源文件,在文件中配置校验错误信息,如果不指定则默认使用classpath下面的ValidationMessages.properties文件 --> <property name="validationMessageSource" ref="messageSource"/> </bean> <bean id="webBindingInitializer" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> <property name="validator" ref="validator"/> </bean> <!-- 全局异常配置 --> <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="java.lang.Exception">errors/error</prop> </props> </property> <property name="statusCodes"> <props> <prop key="errors/error">500</prop> <prop key="errors/404">404</prop> </props> </property> <!-- 设置日志输出级别,不定义则默认不输出警告等错误日志信息 --> <property name="warnLogCategory" value="WARN"></property> <!-- 默认错误页面,当找不到上面mappings中指定的异常对应视图时,使用本默认配置 --> <property name="defaultErrorView" value="errors/error"></property> <!-- 默认HTTP状态码 --> <property name="defaultStatusCode" value="500"></property> </bean> <!-- <mvc:annotation-driven validator="validator"> <mvc:message-converters> 配置responsebody时返回为简单字符串乱码问题 <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg ref="utf8Charset"/> </bean> </mvc:message-converters> </mvc:annotation-driven> --> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 --> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 配置静态资源springmvc不拦截 --> <mvc:resources location="/image/" mapping="/image/**"></mvc:resources> <!-- 配置文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 默认编码 --> <property name="defaultEncoding" value="utf-8" /> <!-- 文件大小最大值 --> <property name="maxUploadSize" value="10485760000" /> <!-- 内存中的最大值 --> <property name="maxInMemorySize" value="40960" /> </bean> <!-- 装配拦截器 --> <mvc:interceptors> <!-- 使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求 --> <!-- <bean class="edu.hrbeu.platform.modeling.common.interceptor.LogInterceptor"/> --> <mvc:interceptor> <!-- 在springmvc前端控制器DispatcherServlet的基础上缩小拦截范围 --> <!-- 一级目录 --> <mvc:mapping path="/*.do" /> <!-- 二级目录 --> <!-- <mvc:mapping path="/*/*.do" /> --> <!-- 不知道和 /*/*.do有什么区别--> <mvc:mapping path="/**/*.do" /> <!--错误配置样例 --> <!-- 拦截失败 <mvc:mapping path="*.do" /> <mvc:mapping path="/**.do" /> --> <!-- 需排除拦截的地址 --> <!-- <mvc:exclude-mapping path="/" /> <mvc:exclude-mapping path="/test" /> --> <!-- 定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 --> <bean class="edu.hrbeu.platform.modeling.common.interceptor.LogInterceptor"/> </mvc:interceptor> </mvc:interceptors> </beans>