我尝试使用 JSTL 执行 JSP,但无法执行。我有 Apache Tomcat 10,即
jakarta.servlet.*
而不是 javax.servlet.*
。因此,每当我使用 JSTL 1.2.5 文件执行 Web 应用程序时,我都会收到错误:
jakarta.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:778)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
我尝试在网上找到已解决的类似问题/疑问,但未能找到。如何在 Tomcat 10 中使用 JSP 中的 JSTL?
我的索引JSP文件代码:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>Tag Example</title>
</head>
<body>
<c:out value="${'Hello Yo'}"/>
</body>
</html>
Jakarta EE 9 / Servlet 5.0 兼容版本的 JSTL 可作为 JSTL 2.0 此处。
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>2.0.0</version>
</dependency>
这是 JSTL 2.0 的参考实现,目前也在 GlassFish 6.0 中使用(最初来自 Sun,后来归 Oracle 所有,然后归 Eclipse 所有)。通常 Apache 也有自己的实现,但它还没有作为 JSTL 2.0 提供(还?)。
为了完整起见,并确认一下,yes JSTL 2.0 的 taglib URI still 引用了原始
java.sun.com
主机,而您直观地期望它也会迁移到 xmlns.jcp.org
甚至 jakarta.ee
。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
如果您已经使用 Jakarta EE 10 / Servlet 6.0(例如 Tomcat 10.1.x 而不是 Tomcat 10.0.x),请改用 JSTL 3.0。
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>3.0.1</version>
</dependency>
在此版本中,taglib URI 已从 URL 形式更改为 URN 形式,如下所示:
<%@ taglib uri="jakarta.tags.core" prefix="c" %>
对于您的配置,您将需要这两个文件才能使 JSTL 正常工作:
如果将它们放在项目的 lib 文件夹中,那么它只适用于该应用程序。因此,我建议您将它们放在 TomCat 应用程序的 lib 文件夹中 (.../apache-tomcat-10.0.6/lib/) 以及其他 jar 文件中。
这个是一个很好的话题,详细讨论了这个问题。
对于那些像我一样曾经迷失过的人:你需要下载最新版本的taglibs和jslt(以及它们的依赖项)!
事情是这样的:
下载最新的 jslt 和依赖项 - 除了 jakarta.servlet-api-5.0.0.jar(这就是原因)
将下载的 JAR 移动到项目 WEB-INF/lib 文件夹中,该文件夹应如下所示:
.
+-- _WEB-INF
| +-- lib
| +-- jakarta.activation-2.0.0.jar
| +-- jakarta.el-api-4.0.0.jar
| +-- jakarta.servlet.jsp.jstl-2.0.0.jar
| +-- jakarta.servlet.jsp.jstl-api-2.0.0.jar
| +-- jakarta.xml.bind-api-3.0.0.jar
| +-- taglibs-standard-compat-1.2.5.jar
| +-- taglibs-standard-impl-1.2.5.jar
| +-- taglibs-standard-spec-1.2.5.jar
我也遇到了类似的问题:我使用tomcat v10.1
这是您必须下载的以下 jar 文件:
jakarta.servlet.jsp.jstl-2.0.0.jar