`

(转)使用@Controller注解为什么要配置<mvc:annotation-driven />

 
阅读更多

自己看了官方文档,也到网上查了下,目前理解如下:

<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

Java代码  收藏代码
  1. <context:component-scan base-package="com"></context:component-scan>  



web.xml

Java代码  收藏代码
  1. <servlet>  
  2.     <servlet-name>mvc</servlet-name>  
  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.     <load-on-startup>1</load-on-startup>  
  5. </servlet>  
  6. <servlet-mapping>  
  7.     <servlet-name>mvc</servlet-name>  
  8.     <url-pattern>*.do</url-pattern>  
  9. </servlet-mapping>  




后来为了解决静态资源访问的问题,servlet改成了拦截所有请求,即/,并添加了默认的servlet,这时候*.do请求不能被控制器捕捉了,页面 错误为404。直到添加了<mvc:annotation-driven/>之后,.do请求才又能被正确捕捉和处理。代码如下
mvc-servlet.xml

Java代码  收藏代码
  1. <context:component-scan base-package="com"></context:component-scan>  
  2. <mvc:annotation-driven/>  
  3. <mvc:resources mapping="/styles/**" location="/WEB-INF/resource/styles/"/>  
  4. <mvc:default-servlet-handler/>  



web.xml

Java代码  收藏代码
  1. <servlet>  
  2.     <servlet-name>mvc</servlet-name>  
  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.     <load-on-startup>1</load-on-startup>  
  5. </servlet>  
  6. <servlet-mapping>  
  7.     <servlet-name>mvc</servlet-name>  
  8.     <url-pattern>/</url-pattern>  
  9. </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

分享到:
评论

相关推荐

    拦截器与冲突解决

    - **显式配置拦截器**:通过`&lt;mvc:interceptors&gt;`标签显式地声明并配置拦截器,避免使用`&lt;mvc:annotation-driven /&gt;`的默认设置。 - **排除默认拦截器**:如果`&lt;mvc:annotation-driven /&gt;`包含默认拦截器,可以考虑...

    SpringMVC源码总结(三)mvc:annotation-driven和mvc:message-converters简单介绍

    在Spring MVC框架中,`mvc:annotation-driven`和`mvc:message-converters`是两个非常重要的元素,它们在处理基于注解的控制器和数据转换方面起着关键作用。本篇文章将深入探讨这两个组件的工作原理以及如何在实际...

    spring注解出现中文乱码

    - **修正方式**:根据Spring 3.0的规范,`mvc:annotation-driven`元素可以采用空元素的形式,即`&lt;mvc:annotation-driven/&gt;`。如果需要添加自定义的配置,可以使用`mvc:annotation-driven`标签加上相应的子元素。题目...

    spring-mvc 注解方式xml配置

    在XML配置中,我们需要声明`DispatcherServlet`并配置`&lt;mvc:annotation-driven&gt;`以启用注解驱动: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    Spring MVC Controller配置方式

    在 XML 配置中,`&lt;context:component-scan&gt;` 用于扫描包含 @Controller 的类,而 `&lt;mvc:annotation-driven&gt;` 表示启用注解驱动的 MVC 功能。 三、组合使用注解和 XML 配置 在实际开发中,有时可能需要同时使用注解...

    SpringMVC入门

    - **启用注解驱动**:使用`&lt;mvc:annotation-driven/&gt;`来启用Spring MVC的注解功能。 - **配置视图解析器**:定义视图解析器`InternalResourceViewResolver`来处理视图名与实际视图文件之间的映射关系。 #### 三、...

    SpringMVC核心配置文件示例.rar

    开启`&lt;mvc:annotation-driven&gt;`可启用Spring MVC对注解的处理,比如@Controller、@RequestMapping等: ```xml &lt;mvc:annotation-driven/&gt; ``` 8. **静态资源处理**: 可以配置Spring MVC处理静态资源,例如...

    基于注解的 Spring MVC 简单入门

    而`&lt;mvc:annotation-driven&gt;`元素则启用了Spring MVC对注解的支持,如@RequestMapping等,让我们的控制器可以使用注解进行方法映射。 现在让我们了解一下注解在Spring MVC中的作用。`@Controller`注解标记一个类为...

    spring MVC

    要在Spring MVC配置文件中启用注解支持,需要引入mvc命名空间,并使用`&lt;mvc:annotation-driven/&gt;`标签,例如: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    SPRING MVC3.2案例讲解---配置

    &lt;mvc:annotation-driven/&gt; &lt;/beans&gt; ``` 在上述配置中,`context:component-scan`标签用于扫描指定包下的所有带有@Controller注解的类,使Spring能够自动管理这些类。`InternalResourceViewResolver`是视图解析器...

    Spring基础包的dtd(aop,jdbc,jee,jms,lang,mvc,oxm)等

    `mvc.dtd`是Spring MVC模块的DTD文件,提供了如`&lt;mvc:annotation-driven&gt;`、`&lt;mvc:view-controller&gt;`等元素,用于声明式地配置控制器、视图解析等。 `oxm.dtd`涉及对象/XML映射(Object/XML Mapping),如JAXB或...

    Spring的MVC 入门小例子,用到了注解驱动

    在这个配置中,`&lt;context:component-scan&gt;`扫描指定包下的注解组件,`&lt;mvc:annotation-driven/&gt;`启用注解驱动的MVC功能。 通过以上讲解,你应该对Spring MVC的注解驱动有了初步的理解。这个入门小例子可以帮助你...

    Spring MVC--2.入门程序

    现在,你可以开始编写控制器类,比如`HelloController.java`,使用`@Controller`注解标识该类为Spring MVC的控制器: ```java import org.springframework.stereotype.Controller; import org.springframework.ui....

    基于xml配置的spring mvc Helloworld实例

    &lt;mvc:annotation-driven /&gt; &lt;bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt; &lt;property name="prefix" value="/WEB-INF/views/" /&gt; &lt;property name="suffix" value=".jsp" ...

    集成springmvc spring hibernate的配置

    在`bean.xml`中,我们启用注解配置,以便可以使用Spring的注解如@Service和@Repository,同时避免与Spring MVC的@Controller注解冲突。这部分配置如下: ```xml &lt;context:annotation-config /&gt; &lt;context:component-...

    简单SpringMVC环境搭建项目代码

    &lt;mvc:annotation-driven/&gt; &lt;bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt; &lt;property name="prefix" value="/WEB-INF/views/" /&gt; &lt;property name="suffix" value=".jsp" ...

    springMVC最简单的配置

    &lt;mvc:annotation-driven/&gt; &lt;!-- 视图解析器配置 --&gt; &lt;bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt; &lt;property name="prefix" value="/WEB-INF/views/"/&gt; &lt;property name...

    Spring3.0 MVC配置教程

    &lt;mvc:annotation-driven /&gt; &lt;bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt; &lt;property name="prefix" value="/WEB-INF/views/" /&gt; &lt;property name="suffix" value=".jsp...

    使用Spring MVC构建Web应用程序1

    &lt;mvc:annotation-driven /&gt; ``` 控制器配置 在Spring MVC中,控制器是应用程序的核心组件。控制器负责处理用户请求,并将结果返回给用户。控制器可以使用注解来指定请求映射,例如: ```java @Controller @...

    使用Maven构建Spring MVC项目的简单示例

    &lt;mvc:annotation-driven /&gt; &lt;bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt; &lt;property name="prefix" value="/WEB-INF/views/" /&gt; &lt;property name="suffix" value=".jsp" ...

Global site tag (gtag.js) - Google Analytics