我按照此链接中的指南安装 JSTL,但当我尝试启动 JSP 页面时出现以下错误:
java.lang.NoClassDefFoundError:javax/servlet/jsp/tagext/TagLibraryValidator
标签库声明是:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
我在Tomcat webapps中的
/WEB-INF/lib
下安装了JSTL 1.1,并尝试在我的项目中执行相同的操作,但它不起作用。我也尝试了 JSTL 1.2 版,但仍然出现相同的消息。这是怎么造成的以及如何解决?
我遇到了类似的问题,我使用的是 Tomcat 10。我使用 Apache NetBeans 12.3 IDE 时收到此错误。
我添加了以下库:
JSP 2.0 中引入了 javax.servlet.jsp.tagext.TagLibraryValidator 类,后来在 JSP 3.0 中重新打包为 jakarta.servlet.jsp.tagext.TagLibraryValidator。因此,此错误可能有以下可能原因:
您没有运行 JSP 2.0 兼容的 servlet 容器。例如,Tomcat 4.x 或 5.0。您需要 5.5 到 9.0 之间的 Tomcat 版本。
您实际上正在运行 JSP 3.0 兼容的 servletcontainer(第一个版本使用 jakarta 包而不是 javax),例如 Tomcat 10.0 或更高版本。在这种情况下,您需要将 JSTL 从 1.x 升级到 2.0 或更高版本。安装说明可以在如何安装 JSTL?它失败并显示“无法解析绝对 uri”或“无法找到 taglib”或 NoClassDefFoundError 或 ClassCastException。
您用任意下载的
/WEB-INF/lib
或 jsp-api.jar
或 j2ee.jar
文件或任何包含 JSP API 的文件弄乱了 javaee.jar
,这些文件源自完全不同的 servletcontainer make/version,而该版本实际上不符合 JSP 2.0 。摆脱那些图书馆。你不需要它们。如果您这样做是为了解决编译错误,那么您的做法是错误的。它们应该最终出现在编译时类路径中,而不是运行时类路径中。另请参阅如何在 Eclipse 项目中导入 javax.servlet / jakarta.servlet API?
我也有同样的问题。使用 WildFly 服务器最新版。这解决了我同样的问题。
从此处下载所有必需的 jar 文件。添加 jar 文件时,不要包含 jakarta.servlet-api-5.0.0.jar 文件,该文件已包含在 Tomcat10.0 中
这不仅适用于基本的 JSTL 函数,还适用于使用
我也有类似的问题。除了我的是 NoClassDefFoundError:javax/servlet/jsp/tagext/TryCatchFinally。我正在将我的网络应用程序转换为 jakarta EE。我尝试使用上面提到的罐子,但它没有清除错误。将应用程序删除后,我发现 SpringFramework 5.2.3 的 Maven 依赖项不支持 Jakarta EE。我必须等到 Spring 发布他们的框架 6.0.0。 :-{