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

如何将JSTL从javax升级到jakarta?解决ExpressionEvaluatorManager适配问题

解决Tomcat10/Java11升级中ExpressionEvaluatorManager的兼容问题

问题根源

你遇到的错误是因为standard.jar中的ExpressionEvaluatorManager依赖旧的javax.servlet.jsp命名空间,而Tomcat10及Java EE 9+已全面切换到jakarta命名空间,且该类在Jakarta版本的Apache Taglibs标准库中已被移除——它属于旧版JSP的非规范内部工具,Jakarta EE官方不再维护,转而推荐使用标准EL表达式API。

解决方案

1. 替换依赖包

移除旧的standard.jar,改用Jakarta兼容的Apache Taglibs标准库:

  • 若使用Maven,添加以下依赖(版本选最新稳定版,如1.2.5):
<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-spec</artifactId>
    <version>1.2.5</version>
</dependency>
<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-impl</artifactId>
    <version>1.2.5</version>
    <scope>runtime</scope>
</dependency>
  • 手动管理jar包的话,直接下载这两个jar替换旧的standard.jar。

2. 替换ExpressionEvaluatorManager的代码实现

用Jakarta EE标准的EL表达式API替代原有调用逻辑。假设你原来的代码是:

import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager;

// 原有调用
return ExpressionEvaluatorManager.evaluate(name, (String) value, targetClass, pageContext);

替换为以下标准实现:

import jakarta.servlet.jsp.JspFactory;
import jakarta.el.ELContext;
import jakarta.el.ExpressionFactory;
import jakarta.el.ValueExpression;

// 新的EL求值逻辑
ExpressionFactory factory = JspFactory.getDefaultFactory()
        .getJspApplicationContext(pageContext.getServletContext())
        .getExpressionFactory();
ELContext elContext = pageContext.getELContext();
ValueExpression expression = factory.createValueExpression(elContext, (String) value, targetClass);
return expression.getValue(elContext);

3. 其他注意事项

  • 确保项目中所有javax开头的JSP/Servlet相关导入都替换为jakarta开头(比如javax.servlet.jsp.PageContext → jakarta.servlet.jsp.PageContext)。
  • Tomcat10自带了Jakarta EE的Servlet/JSP API,无需额外引入jakarta.servlet-api或jakarta.jsp-api依赖,避免版本冲突。

内容的提问来源于stack exchange,提问作者Borea Deitz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:03:21