找不到“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
中的任何位置都没有<!DOCTYPE>
。这是一个与 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 的 <dependencies>
标签应该是这样的:
<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】:为了让它发挥作用:
将 jstl 和 standard 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.jar 和 standard-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" 文件夹并将<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
添加到 jsp 文件的最顶部。
改用 1.2 版 (here) 修复它。
【讨论】:
以上是关于找不到“http://java.sun.com/jsp/jstl/core”的标签库描述符的主要内容,如果未能解决你的问题,请参考以下文章