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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:16:01