簡體   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