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
相关产品推荐
相关产品推荐

