我正在使用 Spring boot 并遇到 jstl 问题,当我调用 jsp 页面时,它返回验证错误
[2m[nio-9090-exec-1][0;39m [36mo.a.c.c.C.[.[localhost].[/].[jsp] [0;39m [2m:[0;39m Servlet.service() for servlet [jsp] threw exception
java.lang.ClassCastException: class org.apache.taglibs.standard.tlv.JstlCoreTLV cannot be cast to class jakarta.servlet.jsp.tagext.TagLibraryValidator (org.apache.taglibs.standard.tlv.JstlCoreTLV and jakarta.servlet.jsp.tagext.TagLibraryValidator are in unnamed module of loader 'app')
at org.apache.jasper.compiler.TagLibraryInfoImpl.createValidator(TagLibraryInfoImpl.java:356) ~[tomcat-embed-jasper-10.1.15.jar:10.1.15]
at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:195) ~[tomcat-embed-jasper-10.1.15.jar:10.1.15]
at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:429) ~[tomcat-embed-jasper-10.1.15.jar:10.1.15]
at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:487) ~[tomcat-embed-jasper-10.1.15.jar:10.1.15]
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1444) ~[tomcat-embed-jasper-10.1.15.jar:10.1.15]
at org.apache.jasper.compiler.Parser.parse(Parser.java:138) ~[tomcat-embed-jasper-10.1.15.jar:10.1.15]
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:245) ~[tomcat-embed-jasper-10.1.15.jar:10.1.15]
at org.apache.jasper.compiler.ParserController.parse(ParserController.java:106) ~[tomcat-embed-jasper-10.1.15.jar:10.1.15]
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:211) ~[tomcat-embed-jasper-10.1.15.jar:10.1.15]
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:396) ~[tomcat-embed-jasper-10.1.15.jar:10.1.15]
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:372) ~[tomcat-embed-jasper-10.1.15.jar:10.1.15]
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:356) ~[tomcat-embed-jasper-10.1.15.jar:10.1.15]
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603) ~[tomcat-embed-jasper-10.1.15.jar:10.1.15]
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:396) ~[tomcat-embed-jasper-10.1.15.jar:10.1.15]
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:380) ~[tomcat-embed-jasper-10.1.15.jar:10.1.15]
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:328) ~[tomcat-embed-jasper-10.1.15.jar:10.1.15]
我已经安装了 Maven 依赖项,如下所述。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
但是仍然返回上面提到的错误。
错误信息表明应用程序提供的JSTL实现与容器提供的JSTL实现之间存在冲突。应用程序使用 JSTL 1.2 实现,而容器使用 Jakarta JSP Taglib API (jakarta.servlet.jsp.tagext) 实现。
要解决此问题,您可以将应用程序提供的 JSTL 实现升级到 Jakarta JSP Taglib API,或者将容器降级到支持 JSTL 1.2 的容器。
从应用程序的 pom.xml 文件中删除 JSTL 1.2 依赖项。 将 Jakarta JSP Taglib API 依赖项添加到应用程序的 pom.xml 文件中。 更新 JSP 页面中的 JSTL taglib 声明以使用 Jakarta JSP Taglib API URI。 以下是如何更新 JSTL taglib 声明的示例:
<%@ taglib prefix="c" uri="http://jakarta.servlet.jsp/jstl/core" %>
一旦升级了应用程序提供的 JSTL 实现或降级了容器,您应该能够运行 JSP 页面而不会遇到 ClassCastException。