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

