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

时间:2012-11-08 09:10:15

标签: java eclipse tomcat jstl

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

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

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

  

找不到“http://java.sun.com/jsp/jstl/core

的标记库描述符

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

enter image description here

17 个答案:

答案 0 :(得分:91)

  

找不到“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文件。但是,在您的特定情况下,standard.jar中明显缺少/WEB-INF/lib,这正是无法解析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表达式将无法工作。选择与目标容器匹配的最高版本,并确保<!DOCTYPE>中的任何位置都没有web.xml。这是一个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>

另见:

答案 1 :(得分:8)

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

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

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

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

答案 2 :(得分:6)

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

public class Parent {
    public class someMethod(){
             if( this instanceof Child1){
                 ((Child1)this).someAdditionalMethod();
             }
     }
}

public class Child1 extends Parent{
     public class someAdditionalMethod(){

    }
}

我还必须添加'标准':

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

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

答案 3 :(得分:1)

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

它对我有用。

答案 4 :(得分: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>

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

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

由于

nirmalrajsanjeev

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

使用1.2版(here)对其进行修复。

答案 9 :(得分:0)

这是使用JSTL时非常常见的错误。

要简单地解决此错误 :-

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

您会发现错误已经消失!

希望这会有所帮助。

答案 10 :(得分:0)

这同样有效:

<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

答案 11 :(得分:0)

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

  1. standard-1.1.2.jar
  2. JS​​TL-API-1.2.jar
  3. 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
    

答案 12 :(得分:0)

添加maven依赖项:

bus.$on('update', function (id) {
  // ...
})

答案 13 :(得分:0)

使其有效:

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

希望它有所帮助.. :)

答案 14 :(得分: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页面中添加以下两个语句,确保使用isELIgnored =&#34; false&#34; &lt;%@ page%&gt;中的属性标签

<%@ 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]

答案 15 :(得分: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>

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

答案 16 :(得分:-1)

对我有用的东西(我在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>