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

Springboot 2.0.2.RELEASE版本JSP打包JAR后无法运行求助

解决Spring Boot打包JAR后JSP无法访问的404问题

这个坑我踩过好几次!你遇到的问题核心原因是Spring Boot默认不支持将JSP打包到可执行JAR中——IDE里运行没问题是因为它直接从源码目录加载Web资源,但打包成JAR后,JSP文件的存储路径和加载机制跟WAR包完全不同,导致Tomcat找不到这些文件。

下面是一步步的解决方案:

1. 调整JSP文件的存放位置

把你的JSP从src/main/resources/META-INF/resources/WEB-INF/jsp移动到src/main/webapp/WEB-INF/jsp目录下。如果没有src/main/webapp目录,直接新建一个,IntelliJ会自动把它识别为Web资源根目录,这样IDE和打包时都能正确识别。

2. 更新application.properties配置

你用的spring.view.prefix是旧版的配置项,Spring Boot 2.x及以后推荐使用spring.mvc.view前缀的配置,修改成:

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

3. 选择正确的打包方式(关键!)

如果坚持要打包成JAR包,需要额外配置Maven/Gradle来处理JSP资源,但这种方式容易出问题。更稳妥的做法是打包成WAR包,因为Spring Boot对WAR包的JSP支持是原生完善的:

针对Maven项目:

  • 在pom.xml里把打包方式改成WAR:
    <packaging>war</packaging>
    
  • 添加Tomcat依赖并设置为provided(避免打包时重复包含内嵌Tomcat):
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    
  • 运行mvn clean package打包成WAR,之后用java -jar your-app-name.war就能正常运行,也可以直接部署到外部Tomcat容器。

额外注意事项

  • 如果你的项目用到了spring-boot-devtools,打包生产环境包时记得把它排除,它可能会干扰JSP资源的加载路径。
  • 确保你的JSP语法和Spring Boot内嵌的Tomcat版本兼容(比如Spring Boot 2.x对应Tomcat 9.x,不要用太旧的JSP语法)。

为什么IDE里正常?因为IDE在运行项目时,会把src/main/webapp目录作为Web资源根目录,Tomcat可以直接读取到里面的JSP文件;但打包成JAR时,这个目录的资源不会被正确嵌入到JAR的可访问路径中,导致Tomcat返回404。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:13:43