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

Spring Boot TODO项目无法浏览器运行,报NoClassDefFoundError错误

问题分析

报错java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator的核心原因是:TagLibraryValidator类在Jakarta EE 9及以上版本(对应Spring Boot 3.x)中已被移除,而你的项目依赖中大概率引入了基于旧Java EE(javax.*包)的JSP/JSTL相关组件,和Spring Boot 3.x的Jakarta EE(jakarta.*包)环境完全不兼容。

解决方案

按以下步骤逐一排查修复:

1. 对齐依赖版本(针对Spring Boot 3.x)

直接移除所有旧的javax.servlet、javax.servlet.jsp、javax.servlet.jsp.jstl类依赖,替换为Jakarta EE版本:

<!-- pom.xml中替换为Jakarta版JSTL -->
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
</dependency>
<!-- 若需要JSP支持,添加Spring Boot 3.x兼容的Tomcat Jasper依赖 -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

2. 清理依赖冲突

用依赖分析工具排查间接引入的旧javax.*包:

  • Maven执行命令:mvn dependency:tree,找到包含javax.servlet.jsp.tagext的依赖,通过<exclusions>标签排除
  • Gradle执行命令:./gradlew dependencies,同理排查并排除冲突依赖

3. 确认打包方式(针对JSP视图)

Spring Boot 3.x对JSP的支持仅局限于war打包,如果当前是jar打包,JSP文件无法被正确加载,会触发错误。需修改pom.xml的打包配置:

<packaging>war</packaging>

4. 替换视图技术(可选更优方案)

JSP本身和Spring Boot的适配性较差,建议替换为Thymeleaf这类更适配的视图技术,彻底规避版本兼容问题:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

之后将原src/main/webapp下的JSP文件迁移到src/main/resources/templates目录即可。

内容的提问来源于stack exchange,提问作者Tanu Jain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 13:32:35