Не удается найти дескриптор библиотеки тегов для "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 не может решить taglib. Я получаю следующую ошибку:

Невозможно найти дескриптор библиотеки тегов для http://java.sun.com/jsp/jstl/core"

Я использую Eclipse Juno, и структура проекта показана ниже:

enter image description here

Ответ 1

Невозможно найти дескриптор библиотеки тегов для 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. Для этой версии требуется standard.jar в /WEB-INF/lib, которая содержит необходимые файлы TLD. Однако в вашем конкретном случае standard.jar явно отсутствует в /WEB-INF/lib, и именно по этой причине не удалось разрешить URI taglib.

Чтобы решить эту проблему, вы должны удалить неправильный JAR файл, загрузить jstl-1.2.jar и полностью удалить его в /WEB-INF/lib. Все это. Вам не нужно извлекать его и не возиться в пути сборки проекта.

Не забудьте удалить этот свободный файл c.tld. Это абсолютно не принадлежит. Это действительно инструктируется в некоторых плохих учебниках или ответах в других местах в Интернете. Это миф, вызванный серьезным недоразумением и неправильной конфигурацией. Никогда не нужно иметь свободный файл TLD JSTL в пути к классам, также не в предыдущих версиях JSTL.

Если вы используете Maven, используйте следующую координату:

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

Вы также должны убедиться, что ваш web.xml объявлен совместимым, по крайней мере, с Servlet 2.4 и, следовательно, не как Servlet 2.3 или старше. В противном случае EL-выражения внутри тегов JSTL, в свою очередь, не сработают. Выберите самую высокую версию, соответствующую вашему целевому контейнеру, и убедитесь, что у вас нет <!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>

См. также:

Ответ 2

URI зависит от версии JSTL, которую вы используете. Для версии 1.0 используйте:

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

и для версии 1.1 (и более поздней) вам необходимо использовать:

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

Ответ 3

У меня была такая же проблема, и несмотря на то, что 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>

Также, как уже упоминалось в предыдущем посте:

Ответ 4

Если вы используете 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>

Это работает для меня.

Ответ 5

Загрузка jstl-1.2.jar вместо jstl.jar решает проблему

Ответ 6

вам также нужно настроить это в web.xml. См. ниже код.

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

Пожалуйста, дайте мне знать, если вы все еще сталкиваетесь с какой-либо проблемой.

Ответ 7

Хорошо, я прочитал этот пост и, похоже, недостаточно, чтобы исправить эту проблему.

Spring приложение на tomcat 8 не будет работать.

Вот решение

Шаг 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 = "false" атрибут в <% @page% > теге

<%@ 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 будет работать только с спецификациями сервлетов 3.x на Tomcat 8.

[http://www.kriblog.com/j2ee/jsp/jstl-with-spring-4-on-tomcat-8.html]

Ответ 8

Чтобы он работал:

Добавьте в свою библиотеку файлы jar jstl и стандартных.

Надеюсь, это поможет..:)

Ответ 9

добавить зависимости 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>

Ответ 10

Просто загрузите javax.servlet.jsp.jstl.jar и добавьте в свой путь сборки и WEB-INF/lib, если вы просто создаете динамическое веб-приложение.

При разработке динамического веб-приложения с использованием maven добавьте javax.servlet.jsp.jstl зависимость в файле pom.

Спасибо

nirmalrajsanjeev

Ответ 11

Убедитесь, что оба пути ниже присутствуют в пути сборки:

  1. Стандарт-1.1.2.jar
  2. JSTL-апи-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

Ответ 12

Это работает также:

<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

Ответ 13

Что сработало для меня (я использую Java 8 и Tomcat 9 в Eclipse 2019):

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>