找不到“http://java.sun.com/jsp/jstl/core”的标记库描述符

2022-08-31 15:45:28

我已将其包含在JSP页面的最顶部:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

我已经将JSTL JAR文件放在目录中。但是,JSP 仍然无法解析 taglib。我收到以下错误:WEB-INF/lib

找不到“http://java.sun.com/jsp/jstl/core”的标记库描述符

我正在使用Eclipse Juno,项目结构如下所示:

enter image description here


答案 1

找不到“http://java.sun.com/jsp/jstl/core”的标记库描述符

根据您之前的问题之一,您正在使用Tomcat 7。在这种情况下,您需要 JSTL 1.2。但是,您有一个文件,而JSTL 1.2显然包含了版本号,如下所示。唯一文件名是 JSTL 1.0 和 1.1 的典型文件名。此版本需要一个包含必要 TLD 文件的 along。但是,在您的特定情况下,显然缺少,这正是无法解析taglib URI的原因。jstl.jarjstl-1.2.jarjstl.jarstandard.jar/WEB-INF/libstandard.jar/WEB-INF/lib

要解决此问题,您必须删除错误的JAR文件,下载jstl-1.2.jar并将其全部放入.就这样。您无需提取它,也无需在项目的“构建路径”中进行操作。/WEB-INF/lib

不要忘记删除那个松散的文件。它绝对不属于那里。这确实在互联网其他地方的一些糟糕的教程或答案中得到了指导。这是一个由重大误解和错误配置引起的神话。在类路径中永远不需要有一个松散的 JSTL TLD 文件,在以前的 JSTL 版本中也是如此。c.tld

如果您使用的是 Maven,请使用以下坐标:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

您还应该确保您的声明至少符合 Servlet 2.4,因此不是 Servlet 2.3 或更早版本。否则,JSTL 标记中的 EL 表达式将反过来不起作用。选择与目标容器匹配的最高版本,并确保在 中没有任何下面是一个 Servlet 3.0 (Tomcat 7) 兼容的示例:web.xml<!DOCTYPE>web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

    <!-- Config here. -->

</web-app>

###See还:


答案 2

我有同样的问题,尽管有jstl

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

我也不得不添加“标准”:

<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>

另外,如上一篇文章所述:


推荐