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

Tomcat 10.1中使用JSTL报错:NoClassDefFoundError相关异常

解决Tomcat 10.1中JSTL无法使用的问题

问题原因

Tomcat 10.x 遵循 Jakarta EE 9+ 规范,所有Servlet、JSP相关API的包名已从 javax.* 迁移至 jakarta.*。你当前使用的JSTL 1.2基于旧Java EE规范(依赖javax.*包),与Tomcat 10.x不兼容,因此抛出java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator错误。

解决方案

1. 替换为适配Jakarta EE的JSTL版本

需要使用支持jakarta.*包的JSTL 2.0及以上版本,具体操作分两种情况:

Maven项目

在pom.xml中添加以下依赖(移除原有的jstl 1.2依赖):

<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>2.0.0</version>
</dependency>

手动管理jar包

  • 下载jakarta.servlet.jsp.jstl-api-2.0.0.jar和jakarta.servlet.jsp.jstl-2.0.0.jar两个文件
  • 将它们放入项目的Calculator\src\main\webapp\WEB-INF\lib目录
  • 删除原有的jstl-1.2.jar

2. 更新JSP中的taglib指令

将JSP页面中原来的JSTL标签库引用替换为Jakarta版本的URI:

<%@ taglib prefix="c" uri="http://jakarta.apache.org/taglibs/std-lib" %>

3. 额外注意事项

  • 不要将Servlet API或JSP API的jar包放入WEB-INF/lib,Tomcat本身已提供这些API,重复放入会导致类冲突
  • 确保项目编译级别为Java 8及以上(Tomcat 10.1支持Java 8~21)

内容的提问来源于stack exchange,提问作者Karthik 3489

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:09:54