JSP页面无法使用JSTL库,报JstlCoreTLV类加载实例化错误如何解决?
错误原因
Tomcat 10.x版本开始全面使用Jakarta EE规范,原有Java EE的javax.*包名全部变更为jakarta.*。你当前项目引入的是适配旧版javax.*规范的JSTL实现,其内部依赖javax.servlet.jsp.tagext.TagLibraryValidator类,和Tomcat 10提供的jakarta.servlet.jsp.tagext.TagLibraryValidator不属于同一个类,加载时就会触发错误栈中的类转换异常,导致JSTL标签库校验器初始化失败。
修复步骤
- 移除项目中所有旧版JSTL相关依赖,包括传统的
jstl.jar、standard.jar,如果是Maven项目需删除所有groupId为javax.servlet.jsp.jstl的依赖配置。 - 引入适配Jakarta EE规范的JSTL 2.0+版本依赖,Maven项目可直接添加如下配置:
<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>
普通Web项目可直接下载对应Jakarta版本的JSTL实现包,放入项目的WEB-INF/lib目录即可。
- 检查JSP页面的taglib声明,核心标签库的引入无需修改uri,沿用原有声明即可:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> - 清理项目编译缓存,重新打包部署到Tomcat 10即可正常运行。
内容的提问来源于stack exchange,提问作者Subramanian Arunachalam
相关产品推荐
相关产品推荐

