SpringMVC-静态资源找不到

SpringMVC-静态资源找不到

在web.xml中,如果配置的拦截路径是*.do或*.action或*.mvc等,不影响静态资源的展示

    <!-- springmvc的控制器-->
    <servlet>
        <!--
             前端控制器:所有的请求都会经过此控制器,然后通过此控制器分发到各个分控制器.
             前端控制器本质上还是一个Servlet,因为SpringMVC底层就是使用Servlet编写的
       -->
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 创建前端控制器的时候读取springmvc配置文件启动ioc容器 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!-- Tomcat启动就创建此对象 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- 配置拦截路径url,所有以.do结尾的请求都会被前端控制器拦截处理 -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

但是url-pattern中如果写的是 /,DispatcherServlet会将静态内容–例如.css、.js、图片等资源的获取请求时,也会当作是一个普通的 Controller 请求。前端控制器会调用处理器映射器为其查找相应的处理器。肯定找不到,所以所有的静态资源获取请求也均会报 404 错误。

首先,需要在springmvc配置文件中添加

    <!--告知处理请求注解-->
    <mvc:annotation-driven/>

方案一:
在springmvc的配置文件中添加

 <mvc:default-servlet-handler/>
 <!--声 明 了 <mvc:default-servlet-handler /> 后 ,springmvc框架会在容器中创建DefaultServletHttpRequestHandler处理器对象。
 该对象会对所有进入 DispatcherServlet的URL进行检查。如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet 处理。
一般的服务器都有默认的 Servlet。例如咱们使用的Tomcat服务器中,有一个专门用于处理静态资源访问的 Servlet 名叫 DefaultServlet。
其<servlet-name/>为default。可以处理各种静态资源访问请求。该Servlet注册在 Tomcat 服务器的 web.xml 中。在 Tomcat安装目录/conf/web.xml。-->

在这里插入图片描述

方案二:

 <mvc:resources mapping="/images/**" location="/images/"/>
 <mvc:resources mapping="/js/**" location="/js/"/>
 <mvc:resources mapping="/css/**" location="/css/"/>
 <!--
location: 表示静态资源所在目录。当然,目录不要使用/WEB-INF/及其子目录。
mapping: 表示对该资源的请求。注意,后面是两个星号**。
-->

方案一和方案二选择其中一种就可以了


版权声明:本文为What_dapan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。