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

Posted

技术标签:

【中文标题】找不到“http://java.sun.com/jsp/jstl/core”的标签库描述符【英文标题】:Can not find the tag library descriptor for “http://java.sun.com/jsp/jstl/core” 【发布时间】:2012-10-28 11:02:00 【问题描述】:

我已经在我的 JSP 页面的最顶部包含了这个:

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

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

我使用的是Eclipse Juno,项目结构如下图:

【问题讨论】:

将 jar 文件添加到你的类路径 你说的是eclipse无法解析taglib,还是tomcat? 【参考方案1】:

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

基于one of your previous questions,您使用的是 Tomcat 7。在这种情况下,您需要 JSTL 1.2。但是,您有一个 jstl.jar 文件,而 JSTL 1.2 清楚地包含了版本号,如 jstl-1.2.jar。唯一的文件名 jstl.jar 是 JSTL 1.0 和 1.1 的典型名称。此版本需要standard.jar/WEB-INF/lib,其中包含必要的TLD 文件。但是,在您的特定情况下,/WEB-INF/lib 中显然缺少 standard.jar,这正是无法解析 taglib URI 的原因。

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

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

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

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

您还应该确保您的web.xml 声明符合至少 Servlet 2.4,因此不是 Servlet 2.3 或更早版本。否则 JSTL 标记内的 EL 表达式将依次失效。选择与您的目标容器匹配的最高版本,并确保您的web.xml 中的任何位置都没有&lt;!DOCTYPE&gt;。这是一个与 Servlet 3.0 (Tomcat 7) 兼容的示例:

<?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>

###另见:

Our JSTL wiki page(您可以将鼠标悬停在jstl 上并点击信息链接) How to install JSTL? The absolute uri: http://java.sun.com/jstl/core cannot be resolved

【讨论】:

只需添加 jstl-1.2.jar jar 即可解决我的问题。谢谢【参考方案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>

另外,如前文所述:

对于 1.0 版使用:http://java.sun.com/jstl/core 对于 1.1(及更高版本)使用:http://java.sun.com/jsp/jstl/core

【讨论】:

对我来说很好【参考方案3】:

URI 取决于您使用的 JSTL 版本。对于 1.0 版,请使用:

http://java.sun.com/jstl/core

对于 1.1(及更高版本),您需要使用:

http://java.sun.com/jsp/jstl/core

【讨论】:

帮助了我。谢谢【参考方案4】:

如果你使用 maven,你的 pom 的 &lt;dependencies&gt; 标签应该是这样的:

<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>javax.servlet.jsp.jstl-api</artifactId>
        <version>1.2.1</version>
    </dependency>
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>
</dependencies>

它对我有用。

【讨论】:

我多年来一直在研究这个问题,所有正确的设置都记录在案。从mvnrepository.com/artifact/org.apache.taglibs/… 添加如上所示的标记库解决了它。【参考方案5】:

下载jstl-1.2.jar代替jstl.jar解决问题

【讨论】:

【参考方案6】:

确保以下两个 jar 都存在于构建路径中:

    standard-1.1.2.jar jstl-api-1.2.jar

Maven 依赖项是:

<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>$1.2</version>
</dependency>

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

【讨论】:

虚幻当反对票,其实是唯一能解决问题的【参考方案7】:

这也有效:

<dependency>
    <scope>compile</scope>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
</dependency>

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

所以使用 jstl 1.2 而不是 standard.jar 和 jstl-api 1.2

【讨论】:

【参考方案8】: 要解决 jsp 中的问题,我们必须在 pom 文件中使用以下依赖项。如果您不使用 maven,则下载依赖 jar 并将其添加到您的 WEB-INF 目录。
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
    <scope>compile</scope>
</dependency>

【讨论】:

【参考方案9】:

我发现有时即使有正确的依赖关系,Eclipse 仍然会引发错误。以下是我用来更新 Eclipse 的方法:

方法一:复制粘贴jsp。

error happens for jsp in deeper layer

我还发现一个奇怪的情况,当同一个jsp在我的目录更深时,找不到它的taglibs。但是,当它在 /webapp/ 下时,它没有问题。

我试过maven clean、maven build、project clean,都不能解决问题。

我通过删除错误的jsp来解决它可以再次将正确的jsp从外部文件夹复制到内部文件夹。然后就可以识别标签库了。

jsp error resolved after copy paste jsp in outer folder

因此,我认为这可能是 Eclipse 本身的错误。

我的依赖是这样的

    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.1</version>
        <scope>provided</scope>
    </dependency>
    <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>

方法二:改版jstl再改回来

尝试更改 jstl 的版本,然后 maven clean 和 maven update,然后再改回版本和 maven clean。

【讨论】:

【参考方案10】:

您也需要在 web.xml 中进行配置。请参考下面的代码。

<taglib>
    <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
    <taglib-location>/WEB-INF/lib/c.tld</taglib-location>
</taglib>

如果您仍然遇到任何问题,请告诉我。

【讨论】:

是否需要这样做取决于使用的 JSP 版本。这仅对小于 2.0 的版本是必需的。 Tomcat 从 5.5 开始使用 JSP 2.0。所以在正常情况下,这应该是不需要的。 谢谢@nfechner..我不知道这一点。 只有当您为 JSP 版本使用了错误的 JSTL 版本时,这个糟糕的神话才是正确的。相反,您应该为所使用的 JSP 版本下载并使用正确的 JSTL 版本。您绝对不应该从 JAR 中提取 TLD 文件并用它弄乱类路径和 web.xml。另见***.com/tags/jstl/info【参考方案11】:

嗯,我已经阅读了这篇文章,但似乎不足以解决这个问题。

tomcat 8 上基于 Spring 的应用程序将无法运行。

这里是解决办法

第 1 步 ⇒ 在 pom.xml 中添加以下依赖项

<!-- JSTL Support -->

     <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>
<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

步骤 2 ⇒ 在你的 JSP 页面中添加所有以下两个语句,确保你在 标签中使用 isELIgnored="false" 属性

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" isELIgnored="false" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

第 3 步 ⇒ 删除您迄今为止在 web.xml 或其他任何地方所做的所有其他配置 :)

第 4 步 ⇒ 清理 Tomcat 并重新启动 Tomcat。

旁注 ⇒ 实际上,JSTL 仅适用于 Tomcat 8 上的 3.x Servlet 规范。

[http://www.kriblog.com/j2ee/jsp/jstl-with-spring-4-on-tomcat-8.html]

【讨论】:

Servlet 和 JSP API 不属于 webapp。它们已经由 Tomcat 自己提供。【参考方案12】:

为了让它发挥作用:

jstlstandard jar 文件添加到您的库中。

希望对您有所帮助.. :)

【讨论】:

【参考方案13】:

添加maven依赖:

<dependency>
  <groupId>jstl</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>taglibs</groupId>
  <artifactId>standard</artifactId>
  <version>1.1.2</version>
  <scope>compile</scope>
</dependency>

【讨论】:

【参考方案14】:

如果您只是开发动态 Web 应用程序,只需下载 javax.servlet.jsp.jstl.jar 并添加到您的构建路径和 WEB-INF/lib

当您使用 maven 开发动态 Web 应用程序时,请在 pom 文件中添加 javax.servlet.jsp.jstl 依赖项。

谢谢

nirmalrajsanjeev

【讨论】:

【参考方案15】:

什么对我有用(我在 Eclipse 2019 中使用 Java 8 和 Tomcat 9):

pom.xml

    <!-- jstl -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>javax.servlet.jsp.jstl-api</artifactId>
        <version>1.2.1</version>
    </dependency>
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>

.jsp 文件

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>

【讨论】:

【参考方案16】:

这是处理 JSTL 时非常常见的错误。

简单的解决这个错误 :-

    下载 jstl-1.1.2.jarstandard-1.1.2.jar 然后只需将它们粘贴到动态 Web 应用项目的 WEB-INF 下的 lib 文件夹中

你会发现错误已经消失了!

希望这会有所帮助。

【讨论】:

【参考方案17】:

我收到了同样的错误消息(Eclipse Enterprise 2020-06,Tomcat 8.5,动态 web 项目),即使我下载了 jst 库的 1.2.5 版 (here),将其放入“WEB-INF” /lib" 文件夹并将&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt; 添加到 jsp 文件的最顶部。

改用 1.2 版 (here) 修复它。

【讨论】:

以上是关于找不到“http://java.sun.com/jsp/jstl/core”的标签库描述符的主要内容,如果未能解决你的问题,请参考以下文章

java为啥每次都是找不到文件。找不到文件?

java 枚举 找不到符号

bat系统找不到指定文件怎么办?

java package找不到符号

SpringBoot报找不到 dao 问题

ubuntu20.04找不到start命令