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

问题描述 投票:40回答:13

我把它包含在我的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,项目结构如下所示:

java eclipse tomcat jstl
13个回答
92
投票

找不到“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>

See also:


0
投票

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

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

谢谢

nirmalrajsanjeev


0
投票

确保构建路径中存在以下两个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

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


-1
投票

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

pom.hml

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

8
投票

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

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

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

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

6
投票

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

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

这个对我有用。


1
投票

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


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>

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


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]

0
投票

为了使它工作:

将jstl和标准jar文件添加到库中。

希望能帮助到你.. :)


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>
© www.soinside.com 2019 - 2024. All rights reserved.