Не удается найти дескриптор библиотеки тегов для "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.2.jar
- 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>