JSTL не работает (Абсолютный uri: [http://java.sun.com/jsp/jstl/core] не может быть разрешен) [duplicate]

Что-то вроде этого?

SELECT yourtable.id, rev, content
FROM yourtable
INNER JOIN (
    SELECT id, max(rev) as maxrev FROM yourtable
    WHERE yourtable
    GROUP BY id
) AS child ON (yourtable.id = child.id) AND (yourtable.rev = maxrev)
104
задан BalusC 13 July 2015 в 06:06
поделиться

12 ответов

org.apache.jasper.JasperException: Абсолютный uri: http://java.sun.com/jstl/core не может быть разрешен в файле web.xml или jar развернутый с этим приложением

Этот URI для JSTL 1.0, но вы на самом деле используете JSTL 1.2, который использует URI с дополнительным /jsp путем (поскольку JSTL, который изобрел EL-выражения, поскольку версия 1.1 интегрирована как часть JSP для совместного использования / повторного использования EL-логики в простом JSP).

Итак, исправьте URI taglib соответственно:

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

Дальше POM также определяет реализацию Apache JSTL 1.1 через taglibs:standard. Это необязательно и даже опасно, если у вас уже есть JSTL 1.2 API + impl, связанный через javax.servlet:jstl , потому что 1.1 и 1.2, очевидно, конфликтуют друг с другом. Только одна из следующих зависимостей JSTL 1.2 должна сделать это, чтобы JSTL был установлен в вашем веб-приложении, ориентированном на Tomcat (не устанавливайте <scope> на provided, поскольку Tomcat на самом деле не предоставляет его в поле!):

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

Пользователи, не являющиеся членами Maven, могут добиться того же, отбросив единственный файл jstl-1.2.jar в папке /WEB-INF/lib проекта веб-приложения (не отбрасывайте standard.jar или любые свободные .tld-файлы там!).

Если вы на самом деле используете обычный Java EE-сервер, такой как WildFly, Payara и т. д. вместо barebones servletcontainer, таких как Tomcat, Jetty и т. д. то вам не нужно явно устанавливать JSTL. Обычные серверы Java EE уже предоставляют JSTL из коробки. Другими словами, вам не нужно добавлять JSTL в pom.xml и не удалять файлы JAR / TLD в webapp. Исключительно достаточно provided координаты Java EE:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version><!-- 8.0, 7.0, etc depending on your server --></version>
    <scope>provided</scope>
</dependency>

Далее вы также должны убедиться, что ваш web.xml объявлен как совместимый не менее Servlet 2.4 и, следовательно, не как Сервл 2.3 или старше. В противном случае EL-выражения внутри тегов JSTL, в свою очередь, не сработают. Выберите самую высокую версию, соответствующую вашему целевому контейнеру, и убедитесь, что у вас нет <!DOCTYPE> в любом месте вашего web.xml. Вот пример совместимости с сервлетами 4.0 (Tomcat 9):

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    version="4.0">

    <!-- Config here. -->

</web-app>

См. Также:

150
ответ дан BalusC 27 August 2018 в 04:12
поделиться
  1. Загрузить jstl-1.2.jar
  2. Добавить эту директиву на свою страницу: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  3. Вставить JAR-файл в свою WEB -INF / lib. Это должно сработать. (Это сработало для меня.)
7
ответ дан Community 27 August 2018 в 04:12
поделиться

Все ответы в этом вопросе помогли мне, но я подумал, что добавлю дополнительную информацию для потомков.

Оказалось, что у меня была тестовая зависимость от gwt-test-utils, которая привела к gwt-dev. К сожалению, gwt-dev содержит полную копию Jetty, JSP, JSTL и т. Д., Которая была впереди соответствующих пакетов на пути к классам. Поэтому, несмотря на то, что у меня были соответствующие зависимости от JSTL 1.2, он загружал версию версии 1.0 на gwt-dev. Grumble.

Решение для меня состояло в том, чтобы не запускаться с областью тестирования, поэтому я не собираю пакет gwt-test-utils во время выполнения. Удаление пакета gwt-dev из пути к классам каким-либо другим способом также устранило бы проблему.

13
ответ дан Gray 27 August 2018 в 04:12
поделиться

Добавьте jstl-1.2.jar в папку tomcat/lib.

При этом ваша ошибка зависимостей будет исправлена ​​снова.

5
ответ дан Hadi Rasouli 27 August 2018 в 04:12
поделиться

Устранена аналогичная проблема в IBM RAD 7.5, выбрав:

  1. Свойства проектов
  2. Границы проекта
  3. Флажок JSTL
-2
ответ дан hrbrmstr 27 August 2018 в 04:12
поделиться

Я уже упоминал, что зависимость Maven в pom.xml неверна. Это должно быть

    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
3
ответ дан LoBo 27 August 2018 в 04:12
поделиться

Я просто хотел добавить исправление, которое я нашел для этой проблемы. Я не уверен, почему это сработало. У меня была правильная версия jstl (1.2), а также правильная версия servlet-api (2.5)

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

У меня также был правильный адрес на моей странице, как предлагается в этом потоке, который является

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

Что исправлено для меня, это удаление тега области из моего xml-файла в pom для моей зависимости jstl 1.2. Снова не уверен, почему это исправлено, но на тот случай, если кто-то делает весну с учебником JPA и Hibernate по множественности и имеет свою настройку pom таким образом, попробуйте удалить тег области и посмотреть, исправляет ли он это. Как я сказал, это сработало для меня.

2
ответ дан Meyer 27 August 2018 в 04:12
поделиться

Если вы все пробовали, но это не помогло, вы должны перезапустить сервер. В моем случае я просто забыл перезапустить Tomcat после добавления javax.servlet.jsp.jstl-1.2.1.jar в lib.

0
ответ дан Mike Yakovets 27 August 2018 в 04:12
поделиться

Я нашел еще одну причину такого типа ошибок: в моем случае кто-то установил свойство catalina.properties tomcat.util.scan.StandardJarScanFilter.jarsToSkip на *, чтобы избежать сообщений о предупреждении журнала, тем самым пропустив необходимое сканирование Tomcat. Изменение этой функции на Tomcat по умолчанию и добавление соответствующего списка банок для пропуска (не включая jstl-1.2 или spring-webmvc) решили проблему.

5
ответ дан resnbl 27 August 2018 в 04:12
поделиться

Я полностью отключил MAVEN и Spring. И мне пришлось добавить следующие банки для правильной работы моей среды.

  • spring-aop-4.0.3.RELEASE.jar
  • spring-beans-4.0.3 .RELEASE.jar (трудно найти это исправление, другие org.springframework & lt; 3.versions> просто не работают.
  • spring-context-4.0.3.RELEASE.jar
  • spring-core-4.0.3.RELEASE.jar
  • spring-expression-4.0.3.RELEASE.jar
  • spring-web-4.0.3.RELEASE.jar
  • spring-webmvc-4.0.3.RELEASE.jar
  • jstl-1.2.jar

Хуже всего было jstl-api-1.2.jar и javax-servlet.jsp.jst-api-1.2.1.jar Они просто не работали.

`jstl-1.2.jar работал хорошо.

2
ответ дан Siddharth 27 August 2018 в 04:12
поделиться

@BalusC совершенно прав, но если вы все еще сталкиваетесь с этим исключением, это означает, что вы сделали неправильно. Самая важная информация, которую вы найдете, находится на странице SO JSTL Tag Info .

В основном это сводка того, что вам нужно сделать, чтобы справиться с этим исключением.

  1. Проверьте версию сервлета в web.xml: <web-app version="2.5">
  2. Проверьте, поддерживается ли версия JSTL для этой версии сервлета: версия сервлета 2.5 использует JSTL 1.2 или сервлет версии 2.4 использует JSTL 1.1
  3. В вашем контейнере сервлетов должна быть соответствующая библиотека, или вы должны включить ее вручную в ваше приложение. Например: JSTL 1.2 требует jstl-1.2.jar

Что делать с Tomcat 5 или 6:

Вам необходимо включить соответствующие баннеры в ваш веб-сайт -INF / lib (он будет работать только для вашего приложения) или в tomcat / lib (будет работать глобально для всех приложений).

Последнее, что taglib в ваших jsp-файлах. Для JSTL 1.2 правильным является следующее:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
32
ответ дан Stephen P 27 August 2018 в 04:12
поделиться

Просто была аналогичная проблема в Eclipse, исправленная с помощью:

rightclick on project->Properties->Deployment Assembly->add Maven Dependencies

, что-то вытолкнуло это раньше, пока я редактировал мой pom.xml

У меня были все необходимые файлы jar, taglib uri и web.xml были в порядке

0
ответ дан w3Charlie 27 August 2018 в 04:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: