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

Spring MVC中使用JSTL出现JstlCoreTLV类型转换错误求助

JSTL类型转换错误的原因及解决方案

这个错误的核心原因是Servlet API体系不兼容:

  • 你引入的jstl:jstl:1.2依赖基于旧的javax.servlet API开发,而你的项目当前使用的是Jakarta EE规范(比如Spring Boot 3.x、Spring MVC 6.x版本默认采用),该规范下Servlet相关类的包名已从javax.servlet改为jakarta.servlet。
  • JSTL中的org.apache.taglibs.standard.tlv.JstlCoreTLV类实现的是旧API的javax.servlet.jsp.tagext.TagLibraryValidator接口,但当前容器提供的是新API的jakarta.servlet.jsp.tagext.TagLibraryValidator类,两者属于不同类加载体系,因此无法完成类型转换。

针对性解决方案

情况1:项目基于Jakarta EE(Spring Boot 3.x/Spring MVC 6.x)

替换为Jakarta版本的JSTL依赖,并更新标签库URI:

  1. 修改Maven依赖:
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>2.0.0</version>
</dependency>
  1. 更新JSP中的标签库声明:
<%@ taglib prefix="c" uri="https://jakarta.ee/xml/ns/jakartaee/jstl/core" %>

情况2:项目基于传统Java EE(Spring Boot 2.x/Spring MVC 5.x及以下)

确保依赖体系统一为javax系列,避免混合Jakarta依赖:

  1. 若缺少JSTL实现类,可补充引入standard依赖(部分容器自带,仍报错则添加):
<dependency>
    <groupId>org.apache.taglibs</groupId>
    <artifactId>taglibs-standard-impl</artifactId>
    <version>1.2.5</version>
    <scope>runtime</scope>
</dependency>
  1. 检查项目依赖树,移除所有jakarta.servlet开头的依赖,确保Servlet API相关依赖均为javax.servlet系列。

内容的提问来源于stack exchange,提问作者KUNAL HIRANI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:20:25