57

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

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

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

找不到“<a href="http://java.sun.com/jsp/jstl/core" rel="noreferrer">http://java.sun.com/jsp/jstl/ 的标签库描述符核心”</p>

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

在此处输入图像描述

4

17 回答 17

118

Can not find the tag library descriptor for “http://java.sun.com/jsp/jstl/core”</p>

Based on one of your previous questions you're using Tomcat 7. In that case you need JSTL 1.2. However, you've there a jstl.jar file while JSTL 1.2 has clearly the version number included like so jstl-1.2.jar. The sole filename jstl.jar is typical for JSTL 1.0 and 1.1. This version requires a standard.jar along in /WEB-INF/lib which contains the necessary TLD files. However, in your particular case the standard.jar is clearly missing in /WEB-INF/lib and that's exactly the reason why the taglib URI couldn't be resolved.

To solve this you must remove the wrong JAR file, download jstl-1.2.jar and drop it in its entirety in /WEB-INF/lib. That's all. You do not need to extract it nor to fiddle in project's Build Path.

Don't forget to remove that loose c.tld file too. It absolutely doesn't belong there. This is indeed instructed in some poor tutorials or answers elsewhere in the Internet. This is a myth caused by a major misunderstanding and misconfiguration. There is never a need to have a loose JSTL TLD file in the classpath, also not in previous JSTL versions.

In case you're using Maven, use the below coordinate:

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

You should also make sure that your web.xml is declared conform at least Servlet 2.4 and thus not as Servlet 2.3 or older. Otherwise EL expressions inside JSTL tags would in turn fail to work. Pick the highest version matching your target container and make sure that you don't have a <!DOCTYPE> anywhere in your web.xml. Here's a Servlet 3.0 (Tomcat 7) compatible example:

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

于 2012-11-09T12:02:27.030 回答
16

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

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

于 2017-04-18T19:05:57.437 回答
10

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

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

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

http://java.sun.com/jsp/jstl/core
于 2012-11-08T09:13:46.060 回答
5

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

这个对我有用。

于 2015-12-10T13:52:29.650 回答
2

下载 jstl-1.2.jar 而不是 jstl.jar 可以解决问题

于 2018-06-06T05:09:55.617 回答
1
要解决 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>
于 2020-01-23T19:07:29.257 回答
1

我发现有时即使有正确的依赖关系,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。

于 2021-04-22T06:54:33.190 回答
1

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

  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
于 2018-02-16T06:25:30.677 回答
1

这也有效:

<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

于 2019-03-06T15:35:34.643 回答
0

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

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

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

于 2012-11-08T09:50:12.197 回答
0

为了使它工作:

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

希望能帮助到你.. :)

于 2017-05-04T08:24:52.653 回答
0

添加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>
于 2017-07-11T12:17:59.957 回答
0

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

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]
于 2016-02-21T15:06:59.727 回答
0

我收到了相同的错误消息(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 版(此处)修复它。

于 2020-07-20T12:23:24.990 回答
0

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

简单地解决这个错误 : -

  1. 下载jstl-1.1.2.jarstandard-1.1.2.jar
  2. 然后只需将它们粘贴到您的 Dynamic Web App 项目的 WEB-INF 下的 lib 文件夹中。

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

希望这可以帮助。

于 2020-01-04T15:06:31.623 回答
0

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

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

谢谢

尼尔马尔拉杰桑吉耶夫

于 2017-11-30T04:50:09.710 回答
0

什么对我有用(我在 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>
于 2019-04-09T00:16:19.900 回答