以往用到的地方:
(1)配置直接响应转发的页面
,加入view-controller
后,@RequestMapping失效,加入annotation-driven
,使之生效。
<!-- 配置直接转发的页面 -->
<!-- 可以直接响应转发的页面,而无需再经过 Handler处理 -->
<mvc:view-controller path="/success" view-name="success" />
<!-- 在实际开发中,通常都需要配置 mvc:annotation-driven 标签 -->
<mvc:annotation-driven></mvc:annotation-driven>
(2)处理静态资源
时,加入了default-servlet-handler
,@RequestMapping失效,加入annotation-driven
,使之生效。
<!-- default-servlet-handler 将在 SpringMVC 上下文中定义一个 DefaultServletHttpRequestHandler, -->
<!-- 它会对进入 DispatcherServlet 的请求进行筛查, 如果发现是没有经过映射的请求, 就将该请求交由 WEB 应用服务器默认的 -->
<!-- Servlet 处理. 如果不是静态资源的请求,才由 DispatcherServlet 继续处理 -->
<!-- 一般 WEB 应用服务器默认的 Servlet 的名称都是 default. -->
<!-- 若所使用的 WEB 服务器的默认 Servlet 名称不是 default,则需要通过 default-servlet-name 属性显式指定 -->
<mvc:default-servlet-handler />
<!-- 只配置上面,不配置下面,将会造成@RequestMapping不好用 -->
<mvc:annotation-driven></mvc:annotation-driven>
(3)配置conversionService
的时候,需要把这个conversionService
配置到annotation-driven
的conversion-service
的属性中。
<!-- 只配置上面,不配置下面,将会造成@RequestMapping不好用 -->
<mvc:annotation-driven
conversion-service="conversionService"></mvc:annotation-driven>
<!-- 配置 ConversionService -->
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="employeeConverter" />
</set>
</property>
</bean>
作用
<mvc:annotation-driven/>
会自动注册RequestMappingHandlerMapping
、RequestMappingHandlerAdapter
与ExceptionHandlerExceptionResolver
三个bean。- 提供一下支持:
(1)支持使用ConversionService
实例对表单参数进行类型转换
(2)支持使用@NumberFormat
、@DateTimeFormat
注解完成数据类型的格式化
(3)支持使用@Valid
注解对 JavaBean 实例进行 JSR 303 验证
(4)支持使用@RequestBody
和@ResponseBody
注解
源码解读
第一种情况:springmvc.xml什么都没配置,即没有<mvc:default-servlet-handler />
也没有<mvc:annotation-driven />
其中的AnnotationMethodHandlerAdapter
是一个过期的类
1
这个类的doc说明,在Spring3.2以后,RequestMappingHandlerAdapter
完全可以代替AnnotationMethodHandlerAdapter
。
第二种情况:springmvc.xml只配置了<mvc:default-servlet-handler />
第三种情况:springmvc.xml配置了<mvc:default-servlet-handler />
和<mvc:annotation-driven />
建议
开发的时候,这个配置一定要加上。