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

Tomcat 9无法加载Spring STS 4打包WAR中的静态资源求助

解决Spring Boot WAR部署到Tomcat 9后静态资源404的问题

排查与修复步骤

1. 确认WAR包内静态资源路径

检查Tomcat解压WAR后的目录,确保静态资源位于WEB-INF/classes/static下(Spring Boot默认静态资源目录)。若路径异常,调整打包配置:

  • 在pom.xml中明确打包方式:
<packaging>war</packaging>
  • 避免静态资源被过滤,添加资源配置:
<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
    </resource>
</resources>

2. 修正应用上下文路径

部署到Tomcat后,访问静态资源需要加上应用上下文路径(即WAR包名称)。例如WAR包名为myapp.war,正确访问路径应为http://localhost:8080/myapp/images/xxx.jpg,而非直接/images/xxx.jpg。
若要固定上下文路径,可在Tomcat的server.xml中配置:

<Context docBase="myapp" path="/myapp" reloadable="true"/>

3. 调整Spring Boot启动类配置

部署到外部Tomcat需让启动类继承SpringBootServletInitializer并实现configure方法,确保资源映射规则生效:

@SpringBootApplication
public class YourApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(YourApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

4. 验证Tomcat静态资源访问配置

检查Tomcatconf/web.xml中的默认Servlet配置,确保允许静态资源访问:

<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:22:11