Tomcat10环境JSP页面无法使用JSTL库报500错误如何解决
问题根因
报错由JSTL版本与Tomcat版本不兼容直接导致:
- Apache Tomcat 10.0.x 及以上版本属于Jakarta EE生态,所有Servlet、JSP相关API的包名已从旧版Java EE的
javax.*全量迁移为jakarta.* - 当前项目引入的是适配Java EE的旧版JSTL包,包内的
org.apache.taglibs.standard.tlv.JstlCoreTLV类实现的是javax.servlet.jsp.tagext.TagLibraryValidator接口,无法匹配Tomcat10提供的jakarta.servlet.jsp.tagext.TagLibraryValidator接口,最终触发类转换异常,导致JSP编译失败返回500错误。
修复步骤
- 彻底移除项目中所有旧版Java EE适配的JSTL相关依赖,包括常见的
jstl-1.2.jar、standard-1.1.2.jar、Maven坐标为javax.servlet:jstl、taglibs:standard的依赖,避免类冲突。 - 引入适配Jakarta EE的JSTL实现:
- Maven项目在pom.xml中添加以下依赖:
<dependency> <groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId> <version>2.0.0</version> </dependency>- 非Maven项目直接下载
jakarta.servlet.jsp.jstl-2.0.0.jar放入项目的WEB-INF/lib目录即可。
- JSP页面的核心标签库引入指令无需修改URI,保持如下写法即可正常使用:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> - 清理Tomcat的
work目录下的缓存文件,重新部署项目后重启服务即可恢复正常访问。
避坑提示
- 禁止同时引入javax包和jakarta包版本的JSTL,否则会反复触发类冲突报错。
- 如果项目使用Spring框架,需确认框架版本为Spring6/SpringBoot3及以上,低版本Spring基于Java EE的javax包开发,本身就无法在Tomcat10上正常运行。
内容的提问来源于stack exchange,提问作者RAJAN PATEL
相关产品推荐
相关产品推荐

