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

Spring Boot整合JSP出现java.lang.NoClassDefFoundError异常求助

解决Spring Boot配置JSP渲染时的NoClassDefFoundError问题

嘿,我看你在给Spring Boot应用添加JSP渲染功能时碰到了java.lang.NoClassDefFoundError: org/apache/tomcat/util/security/Escape这个头疼的错误,这其实是Tomcat依赖版本不兼容导致的,咱们一步步来解决:

问题根源

Spring Boot的spring-boot-starter-web已经内置了适配好版本的Tomcat依赖,你手动引入的tomcat-embed-jasper如果和starter自带的Tomcat版本不匹配,就会出现这种类找不到的情况——毕竟不同版本的Tomcat里,部分类的位置或存在性会发生变化。

具体解决方案

1. 让Spring Boot自动管理Tomcat依赖版本

把你当前的Gradle依赖调整成这样,去掉手动指定的tomcat-embed-jasper:

// 保留核心web starter,它会自动引入兼容版本的tomcat-embed-jasper
implementation 'org.springframework.boot:spring-boot-starter-web'

// 可选:如果你的JSP需要使用JSTL标签,加上这两个依赖
implementation 'javax.servlet.jsp.jstl:jstl-api'
runtimeOnly 'org.glassfish.web:jstl-impl'

另外提一句,Gradle 4.0之后官方推荐用implementation替代旧的compile关键字哦。

2. 核对项目结构与配置

确认你的文件路径和配置完全匹配:

  • 你的JSP文件放在/src/main/webapp/WEB-INF/jsp/index.jsp,和配置里的spring.mvc.view.prefix=/WEB-INF/jsp/、spring.mvc.view.suffix=.jsp完全对应,这点你已经做对了,没问题。
  • 如果是Gradle项目,确保没有在build.gradle里修改过web资源目录的配置,默认src/main/webapp是会被正确识别的。

3. 清理缓存并重新构建

有时候项目缓存会导致依赖加载异常,执行以下操作:

  • 先清理项目:运行./gradlew clean(Gradle)或者mvn clean(如果是Maven项目)
  • 再重新构建运行:./gradlew bootRun或者mvn spring-boot:run

额外提醒

  • Spring Boot对JSP的支持有个小限制:不能打包成可执行jar运行,因为JSP文件不会被打包到jar包里。如果需要打包成可执行文件,建议换成Thymeleaf这类更适配Spring Boot的模板引擎。
  • 如果你确实需要自定义Tomcat版本,别单独指定tomcat-embed-jasper的版本,而是在build.gradle里统一配置Spring Boot的Tomcat版本,比如:
// 填写和你的Spring Boot版本兼容的Tomcat版本号
ext['tomcat.version'] = '9.0.65'
implementation 'org.springframework.boot:spring-boot-starter-web'

内容的提问来源于stack exchange,提问作者Kiran Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:25:11