Spring Boot 面临 jstl (JSP) 问题[重复]

问题描述 投票:0回答:1

我正在使用 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>

但是仍然返回上面提到的错误。

spring-boot jstl
1个回答
0
投票

错误信息表明应用程序提供的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。

© www.soinside.com 2019 - 2024. All rights reserved.