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

Spring Boot整合JSP配置失败问题求助

为什么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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:42:42