Spring Boot整合JSP配置失败问题求助
兄弟,我太懂你这种踩坑的痛苦了!Spring Boot对JSP的支持确实远不如Thymeleaf、Freemarker这些模板引擎顺畅,甚至可以说有点“反直觉”,这背后其实是有原因的,咱们一步步捋清楚。
首先得明白:Spring Boot的核心设计是约定大于配置,而JSP的运行机制和Spring Boot的默认约定天生不匹配:
- Spring Boot默认打包成JAR包,但嵌入式Tomcat(Spring Boot默认用的容器)对JAR里的JSP支持有限——Tomcat本身就不支持从JAR中加载并编译JSP,这是底层容器的限制;
- Spring Boot优先推荐现代模板引擎,对JSP的支持属于“兼容级”,所以自动配置做的很粗糙,很多细节需要手动补全,不像Thymeleaf那样导入依赖就能用。
针对你遇到的几个具体问题,咱们拆解一下:
1. 初始配置出现Whitelabel Error Page
最可能的原因是你少了关键依赖!Spring Boot的Web starter只包含了嵌入式Tomcat的核心运行环境,但处理JSP编译的tomcat-embed-jasper和JSTL依赖是默认没加的。没有这些依赖,Spring根本不知道该怎么处理JSP视图,自然返回错误页。
2. 继承SpringBootServletInitializer后仍失败
这个类主要是为了把Spring Boot项目打包成WAR部署到外部Tomcat用的,对嵌入式Tomcat运行影响不大。你没解决问题,还是因为核心的依赖、路径配置没到位。
3. 重命名WEB-INF为view后JSP被下载
这是因为Spring没把这个路径识别为“视图资源目录”,直接把JSP当成静态文件返回了。WEB-INF是Servlet规范里的受保护目录,默认不会直接暴露给外部,改名字反而破坏了这个约定,导致视图解析器找不到对应的处理逻辑。
想让JSP正常运行,你需要按这些步骤补全配置:
第一步:补全Maven依赖
在pom.xml里加上这两个依赖:
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency>
tomcat-embed-jasper负责编译JSP,jstl是JSP标准标签库,缺了它很多JSP功能用不了。
第二步:确认项目结构必须正确
你的项目得是标准的Maven Web结构,尤其是webapp目录的位置:
src/ main/ java/ com/example/demo/ DemoApplication.java HelloController.java webapp/ WEB-INF/ jsp/ ankit.jsp resources/ application.properties
还要确保Eclipse里把webapp标记为Web Content Root(右键项目→Properties→Project Facets→Web→Modify Resources),否则JSP文件不会被打包到正确的位置。
第三步:正确配置application.properties
spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp # 开启JSP开发模式,修改JSP后不需要重启应用 server.servlet.jsp.init-parameters.development=true
这里的前缀和后缀必须和你的JSP路径完全对应,不能错。
第四步:Controller必须用@Controller(不是@RestController)
@Controller public class HelloController { @GetMapping("/hello") public String hello() { return "ankit"; // 对应WEB-INF/jsp/ankit.jsp } }
@RestController会把返回值直接作为响应体返回,而@Controller才会把返回值当成视图名交给视图解析器处理。
第五步:打包方式建议用WAR
如果要运行嵌入式Tomcat,打包成WAR比JAR更稳妥,因为WAR结构更符合Servlet规范,Tomcat对JSP的支持更完善。你可以在pom.xml里把打包方式改成war:
<packaging>war</packaging>
最后给你的选择建议:
- 如果是做纯API服务:果断选REST应用,
@RestController确实简单高效,不用纠结视图渲染; - 如果需要服务器端渲染页面:优先选Thymeleaf,Spring Boot对它的自动配置几乎是“零成本”,功能比JSP强,还支持HTML5友好的模板;
- 如果一定要死磕JSP:按照上面的步骤逐一检查,大概率能解决问题,但确实要忍受这些繁琐的配置——谁让JSP是个“老古董”,Spring Boot的重心不在这呢😅
内容的提问来源于stack exchange,提问作者Ankit

