You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MVC静态资源配置异常:请求/resources/index.html返回404

Spring MVC 6.0.9 静态资源404问题排查与解决

一、Servlet规范版本不兼容(核心问题)

你当前web.xml使用的是Servlet 2.3的DTD,而Spring 6.0要求Servlet 5.0及以上(基于Jakarta EE 9+)。老版本Servlet规范会导致Spring MVC的资源处理逻辑无法正常工作,这是最可能引发404的原因。

解决办法:
将web.xml的DOCTYPE和根标签替换为Servlet 5.0版本:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <!-- 原有配置内容保留 -->
</web-app>

二、静态资源物理位置配置错误

你配置的<mvc:resources mapping="/resources/**" location="/resources/"/>中,location="/resources/"指向的是web应用根目录下的resources文件夹(Maven项目对应src/main/webapp/resources/路径)。

请按以下规则调整文件位置:

  • 若使用当前配置,index.html需放在:src/main/webapp/resources/index.html,访问URL为http://localhost:端口号/resources/index.html
  • 若想把资源放在WEB-INF/resources下,修改location为:
    <mvc:resources mapping="/resources/**" location="/WEB-INF/resources/"/>
    
  • 若资源在classpath下(比如src/main/resources/static),需给location加上classpath:前缀:
    <mvc:resources mapping="/resources/**" location="classpath:/static/"/>
    

三、重复组件扫描的潜在问题

你的root-context.xml和web-context.xml都配置了<context:component-scan base-package="my.application"/>,会导致Controller等Bean重复注册。虽不直接影响静态资源,但可能引发其他异常,建议拆分扫描范围:

  • root-context:扫描非Web层Bean(如Service、Repository),例如base-package="my.application.service,my.application.dao"
  • web-context:仅扫描Web层Bean(如Controller),例如base-package="my.application.controller"

四、注解式配置的正确写法(替代XML)

如果用Java配置替代XML,确保配置类符合规范:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "my.application.controller")
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**")
                .addResourceLocations("/resources/");
        // 若资源在classpath下,替换为:
        // .addResourceLocations("classpath:/static/");
    }
}

同时需调整DispatcherServlet配置,指向该配置类而非web-context.xml。

五、额外排查步骤

  1. 检查打包后结构:确认resources目录和index.html是否被正确打包到war包的对应位置
  2. 开启调试日志:添加Spring MVC日志配置,查看DispatcherServlet处理请求时的资源查找流程,定位具体错误点
  3. 排查拦截器/过滤器:确认没有自定义Filter或Interceptor拦截了/resources/**路径的请求

内容的提问来源于stack exchange,提问作者JCvanDamme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 20:05:34