Spring 配置静态资源访问后结果发生 404 了?

Spring 配置静态资源访问后结果发生 404 了?

场景

这两天使用 SpringMVC 时突然发现了一个问题,在 spring-mvc.xml 中配置静态资源访问以后,突然发现访问什么 Controller 控制的页面都 404 了。
如果把这个配置删除后,就能正常访问了,后来在与曾经的项目配置文件对比时发现是缺少了配置 <mvc:annotation-driven/>
然而,在没有添加静态资源访问时,没有这个配置也能够使用 Controller 控制器。吾辈好奇的去网络上查询了一下 <mvc:annotation-driven/> 相关的信息,在此记录到 blogger 中,以供日后查阅。

吾辈的 spring-mvc.xml 中的静态资源访问配置:

1
2
3
<!--扫描静态资源文件-->
<mvc:default-servlet-handler/>
<mvc:resources mapping="/statics/**" location="/statics/"/>

那么,下面就说一下 <mvc:annotation-driven/> 具体有什么作用好啦!
<mvc:annotation-driven> 相当于注册了 Spring MVC 分发请求到控制器所必须 DefaultAnnotationHandlerMappingAnnotationMethodHandlerAdapter 两个 Bean,配置一些 messageconvert。即解决了 @Controller 注解的使用前提配置。

配置中如果没有 <mvc:annotation-driven/>,那么所有的 Controller 可能就没有解析,所有当有请求时候都没有匹配的处理请求类,就都去 <mvc:default-servlet-handler/>default servlet 处理了。添加上 <mvc:annotation-driven/> 后,相应的请求被 Controller 处理,而静态资源因为没有相应的 Controller 就会被 default servlet 处理。总之没有相应的 Controller 就会被 default servlet 处理就 ok 了。

然后,<mvc:annotation-driven/> 标签配置的这 2 个 Bean 可以根据 classpath 中的内容默认提供以下功能:

  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 。

嗯,这篇 blogger 就这么多啦(其实大部分都是借鉴网络上诸位大佬的啦)