自己看了官方文档,也到网上查了下,目前理解如下:
<mvc:annotation-driven/>相当于注册了DefaultAnnotationHandlerMapping和 AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter。即解决了 @Controller注解的使用前提配置。
<context:annotation-config/>是对包进行扫描,实现注释驱动Bean定义,同时将bean自动注入容器中使用。即解决了@Controller标识的类的bean的注入和使用。
一开始我在写配置的时候,只写了<context:component-scan/>,并没有使用<mvc:annotation-driven/>,servlet拦截*.do,.do请求可以被正确捕捉和处理。代码如下
mvc-servlet.xml
- <context:component-scan base-package="com"></context:component-scan>
web.xml
- <servlet>
- <servlet-name>mvc</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>mvc</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
后来为了解决静态资源访问的问题,servlet改成了拦截所有请求,即/,并添加了默认的servlet,这时候*.do请求不能被控制器捕捉了,页面 错误为404。直到添加了<mvc:annotation-driven/>之后,.do请求才又能被正确捕捉和处理。代码如下
mvc-servlet.xml
- <context:component-scan base-package="com"></context:component-scan>
- <mvc:annotation-driven/>
- <mvc:resources mapping="/styles/**" location="/WEB-INF/resource/styles/"/>
- <mvc:default-servlet-handler/>
web.xml
- <servlet>
- <servlet-name>mvc</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>mvc</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
是什么原因造成这种区别的呢?为什么一开始没用<mvc:annotation-driven/>的时候可以,添加了默认servlet之后就不行了呢?
回答
最后的配置如果没有<mvc:annotation-driven/>,那么所有的Controller可能就没有解析, 所有当有请求时候都没有匹配的处理请求类,就都去<mvc:default-servlet-handler/>即default servlet处理了。添加上<mvc:annotation-driven/>后,相应的do请求被Controller处理,而静态资源 因为没有相应的Controller就会被default servlet处理。总之没有相应的Controller就会被default servlet处理就ok了。
------------------------------------------------
This tag registers the DefaultAnnotationHandlerMapping and AnnotationMethodHandlerAdapter beans that are required for Spring MVC to dispatch requests to Controllers.
这个标签注册了Spring MVC分发请求到控制器所必须的DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter实例
The tag configures those two beans with sensible defaults based on what is present in your classpath.
标签配置的这2个实例可以根据classpath中的内容默认提供以下功能:
The defaults are:
1. Support for Spring 3's Type ConversionService in addition to JavaBeans PropertyEditors during Data Binding.
A ConversionService instance produced by the org.springframework.format.support.FormattingConversionServiceFactoryBean is used by default.
This can be overriden by setting the conversion-service attribute.
支持spring3的javaBeans属性编辑器数据绑定时的类型转换服务。
类型转换服务实例默认为org.springframework.format.support.FormattingConversionServiceFactoryBean。
可以覆盖conversion-service属性来指定类型转换服务实例类。
2. Support for formatting Number fields using the @NumberFormat annotation
支持@NumberFormat 注解格式化数字类型字段。
3. Support for formatting Date, Calendar, Long, and Joda Time fields using the @DateTimeFormat annotation, if Joda Time 1.3 or higher is present on the classpath.
@DateTimeFormat注解格式化 Date, Calendar, Long和 Joda Time(如classpath下存在Joda Time 1.3或更高版本)字段
4. Support for validating @Controller inputs with @Valid, if a JSR-303 Provider is present on the classpath.
The validation system can be explicitly configured by setting the validator attribute.
支持@Valid注解验证控制器数据,classpath中需JSR-303的**。
可以使用setting明确的配置
5. Support for reading and writing XML, if JAXB is present on the classpath.
支持读写xml,classpath中需JAXB 。
6. Support for reading and writing JSON, if Jackson is present on the classpath.
支持读写json,classpath中需Jackson 。
A typical usage is shown below:
下边是用法:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- JSR-303 support will be detected on classpath and enabled automatically -->
<mvc:annotation-driven/>
</beans>
求上述1-6的使用例子。
总结:
要使用spring mvc中的@Controller注解,就必须要配置<mvc:annotation-driven />,否则org.springframework.web.servlet.DispatcherServlet无法找到控制器并把请求分发到控制器。
转自:http://www.iteye.com/problems/66133
http://www.noday.net/articles/2011/08/27/1314458126911.html
相关推荐
- **显式配置拦截器**:通过`<mvc:interceptors>`标签显式地声明并配置拦截器,避免使用`<mvc:annotation-driven />`的默认设置。 - **排除默认拦截器**:如果`<mvc:annotation-driven />`包含默认拦截器,可以考虑...
在Spring MVC框架中,`mvc:annotation-driven`和`mvc:message-converters`是两个非常重要的元素,它们在处理基于注解的控制器和数据转换方面起着关键作用。本篇文章将深入探讨这两个组件的工作原理以及如何在实际...
- **修正方式**:根据Spring 3.0的规范,`mvc:annotation-driven`元素可以采用空元素的形式,即`<mvc:annotation-driven/>`。如果需要添加自定义的配置,可以使用`mvc:annotation-driven`标签加上相应的子元素。题目...
在XML配置中,我们需要声明`DispatcherServlet`并配置`<mvc:annotation-driven>`以启用注解驱动: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...
在 XML 配置中,`<context:component-scan>` 用于扫描包含 @Controller 的类,而 `<mvc:annotation-driven>` 表示启用注解驱动的 MVC 功能。 三、组合使用注解和 XML 配置 在实际开发中,有时可能需要同时使用注解...
- **启用注解驱动**:使用`<mvc:annotation-driven/>`来启用Spring MVC的注解功能。 - **配置视图解析器**:定义视图解析器`InternalResourceViewResolver`来处理视图名与实际视图文件之间的映射关系。 #### 三、...
开启`<mvc:annotation-driven>`可启用Spring MVC对注解的处理,比如@Controller、@RequestMapping等: ```xml <mvc:annotation-driven/> ``` 8. **静态资源处理**: 可以配置Spring MVC处理静态资源,例如...
而`<mvc:annotation-driven>`元素则启用了Spring MVC对注解的支持,如@RequestMapping等,让我们的控制器可以使用注解进行方法映射。 现在让我们了解一下注解在Spring MVC中的作用。`@Controller`注解标记一个类为...
要在Spring MVC配置文件中启用注解支持,需要引入mvc命名空间,并使用`<mvc:annotation-driven/>`标签,例如: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...
<mvc:annotation-driven/> </beans> ``` 在上述配置中,`context:component-scan`标签用于扫描指定包下的所有带有@Controller注解的类,使Spring能够自动管理这些类。`InternalResourceViewResolver`是视图解析器...
`mvc.dtd`是Spring MVC模块的DTD文件,提供了如`<mvc:annotation-driven>`、`<mvc:view-controller>`等元素,用于声明式地配置控制器、视图解析等。 `oxm.dtd`涉及对象/XML映射(Object/XML Mapping),如JAXB或...
在这个配置中,`<context:component-scan>`扫描指定包下的注解组件,`<mvc:annotation-driven/>`启用注解驱动的MVC功能。 通过以上讲解,你应该对Spring MVC的注解驱动有了初步的理解。这个入门小例子可以帮助你...
现在,你可以开始编写控制器类,比如`HelloController.java`,使用`@Controller`注解标识该类为Spring MVC的控制器: ```java import org.springframework.stereotype.Controller; import org.springframework.ui....
<mvc:annotation-driven /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" ...
在`bean.xml`中,我们启用注解配置,以便可以使用Spring的注解如@Service和@Repository,同时避免与Spring MVC的@Controller注解冲突。这部分配置如下: ```xml <context:annotation-config /> <context:component-...
<mvc:annotation-driven/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" ...
<mvc:annotation-driven/> <!-- 视图解析器配置 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name...
<mvc:annotation-driven /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp...
<mvc:annotation-driven /> ``` 控制器配置 在Spring MVC中,控制器是应用程序的核心组件。控制器负责处理用户请求,并将结果返回给用户。控制器可以使用注解来指定请求映射,例如: ```java @Controller @...
<mvc:annotation-driven /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" ...