繁体   English   中英

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

[英]Can not find the tag library descriptor for “http://java.sun.com/jsp/jstl/core”

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

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

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

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

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

在此处输入图像描述

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

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

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

不要忘记删除那个松散的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>

###也可以看看:

我有同样的问题,尽管有 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>

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

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

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

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

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

如果你使用 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>

这个对我有用。

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

这也有效:

<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

要解决 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>

您还需要在 web.xml 中进行配置。请参考以下代码。

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

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

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

在 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 页面中添加以下所有两条语句,确保您在 <%@ page %> 标签中使用 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]

要使其工作:

jstl标准jar 文件添加到您的库中。

希望能帮助到你.. :)

添加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>

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

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

谢谢

尼尔马拉杰桑杰夫

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

  1. 标准 1.1.2.jar
  2. 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

什么对我有用(我在 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>

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

简单地解决这个错误:-

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

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

希望这可以帮助。

我收到了相同的错误消息(Eclipse Enterprise 2020-06、Tomcat 8.5、动态 Web 项目),即使在我下载了 jst 库的 1.2.5 版(此处)后,将其放入“WEB-INF/lib”文件夹并将<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>到 jsp 文件的最顶部。

使用 1.2 版( 此处)来修复它。

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

方法一:复制粘贴jsp。

更深层的jsp发生错误

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

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

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

将jsp复制粘贴到外部文件夹后解决了jsp错误

因此,我认为这可能是 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>

方法2:更改jstl的版本并改回来

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

如果您使用的是 IntelliJ,请下载 jstl-1.2.jar 和 standard-1.1.2.jar。 然后将它们添加到您的全局库中。 这对我来说非常有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM