开发者社区 问答 正文

Maven依赖搭建的SpringMVC项目通过<mvc: resources mapping=""

项目环境:JDK1.8;SpringMVC4.3.18;阿里云Maven3.3.9 1. web.xml配置

<servlet>
        <servlet-name>spring_mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:resources/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring_mvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

dispatcher-servlet.xml配置

<mvc:annotation-driven />

    <!-- 处理静态资源访问 -->
    <!--<mvc:default-servlet-handler />-->

    <mvc:resources mapping="/css/**" location="/static/css/" />
    <mvc:resources mapping="/images/**" location="/static/images/" />
    <mvc:resources mapping="/js/**" location="/static/js/" />

页面引用 image.png

image.png

页面访问

image.png

项目结构

image.png

Spring相关包引用

image.png

本人在网上查询了很多方法,都说使用这个映射需要在其前面加上。但是我的项目里一开始配置springmvc的时候就已经有annotation-driven这个注解了,仍然无法访问静态资源。很是纳闷。然而使用这个注解就可以访问静态资源。再次发出问题,主要是想解决为什么annotation-driven这个注解不起作用,希望有过类似经验或者知道的朋友指导一下,甚是感激。

遇到了同样的问题,在CSDN看到了,希望阿里云团队能够给出正确、标准的答案~请查看

展开
收起
西门小刚刚9630297551 2020-05-23 15:53:21 1089 分享 版权
阿里云 AI 助理回答

在Spring MVC中,处理静态资源(如CSS、JavaScript、图片等)通常需要特殊的配置来告诉DispatcherServlet不要拦截对这些资源的请求。你提到的<mvc:resources>标签是用来定义静态资源映射的正确方式,而<mvc:annotation-driven>则是用来启用Spring MVC的注解驱动功能,比如自动注册处理器、转换器、验证器等。

关于你的问题,<mvc:annotation-driven>不起作用于静态资源访问的原因在于它的职责并不包括直接处理静态资源。这个标签主要是为了激活基于注解的配置,而不是直接与静态资源映射相关。因此,即使你已经添加了<mvc:annotation-driven>,仍然需要单独配置静态资源的处理规则。

确保你的dispatcher-servlet.xml文件中包含正确的静态资源映射配置,如下所示:

<mvc:resources mapping="/static/**" location="/static/"/>

这里的mapping属性指定了URL模式,location属性则指定了静态资源的实际路径。例如,上述配置会将所有以/static/开头的请求映射到Web应用的/static/目录下查找相应的静态资源。

另外,如果你使用的是Spring 4.3.18及以上版本,还可以考虑在web.xml中添加一个默认的Servlet来处理静态资源,如下所示:

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/static/*</url-pattern>
</servlet-mapping>

或者,如果使用Spring Boot的话,它有内置的静态资源处理机制,通常不需要手动配置。

综上所述,<mvc:annotation-driven>不起作用于静态资源访问是正常的,因为这不是它的设计目的。你需要通过<mvc:resources>或类似手段专门配置静态资源的处理逻辑。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答