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

Spring MVC视图无法加载WAR文件中资源的问题求助

解决Spring Web应用中JSP静态资源加载失败的问题

嘿,我来帮你捋捋这个静态资源加载的坑!从你的描述来看,哪怕把JSP里的资源路径加上了根斜杠还是不行,大概率是Spring MVC的静态资源映射没配置对,或者资源的实际位置和你配置的路径不匹配,咱们一步步来解决:

1. 先确认Spring MVC的静态资源映射配置

这是最常见的原因——Spring默认不会自动处理静态资源请求,你得明确告诉它哪些路径对应哪里的资源。

如果是Java配置类(@Configuration)

在你的WebMvcConfigurer实现类里,重写addResourceHandlers方法,指定资源的请求路径和实际存放位置:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // mapping是浏览器请求的路径前缀,比如浏览器请求 /resources/dist/xxx
        // location是资源在项目中的实际路径,比如你的资源放在WEB-INF/resources下
        registry.addResourceHandler("/resources/**")
                .addResourceLocations("/WEB-INF/resources/");
        // 如果你的资源直接放在项目根目录的resources文件夹下(不在WEB-INF里),就改成:
        // .addResourceLocations("/resources/");
    }
}

如果是XML配置(spring-servlet.xml之类的)

添加<mvc:resources>标签来配置映射:

<!-- mapping对应浏览器请求路径,location对应资源实际位置 -->
<mvc:resources mapping="/resources/**" location="/WEB-INF/resources/"/>

关键提醒:mapping是对外暴露的请求路径前缀,location是资源在项目(或WAR包)里的实际物理路径,一定要对应上!

2. 检查WAR包的资源结构是否正确

打包后解压你的myapp.WAR,看看资源是不是真的在你配置的location路径下。比如你配置的是/WEB-INF/resources/,那WAR里应该有WEB-INF/resources/dist/xxx这些文件;如果资源实际在WAR根目录的resources文件夹下,那配置的location就得改成/resources/。

3. 在JSP里用<c:url>生成正确的资源URL

有时候上下文路径(比如你的应用部署在Tomcat里的路径是/myapp)会导致路径错误,用JSTL的<c:url>标签可以自动处理上下文路径,避免硬编码出错。比如:

<!-- 代替直接写 /resources/dist/css/style.css -->
<link rel="stylesheet" href="<c:url value="/resources/dist/css/style.css"/>">

记得要在JSP顶部引入JSTL标签库:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

4. 用浏览器开发者工具排查实际请求URL

打开浏览器F12的「Network」标签,看资源请求的完整URL是什么,返回的状态码是不是404。比如如果请求的是http://localhost:8080/resources/dist/xxx,但你的应用上下文路径是myapp,那正确的URL应该是http://localhost:8080/myapp/resources/dist/xxx——这时候用<c:url>就能自动补上/myapp前缀。

5. 检查拦截器/过滤器是否拦截了资源请求

如果你的项目里有自定义的拦截器或过滤器,要确认它们没有拦截静态资源的请求。比如在拦截器配置里排除/resources/**路径:

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new MyCustomInterceptor())
            .excludePathPatterns("/resources/**"); // 排除静态资源路径
}

按照这几步排查下来,应该就能解决资源加载的问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:04:29