Как установить JSTL? Абсолютное значение URI: http://java.sun.com/jstl/core не может быть разрешено - PullRequest
120 голосов
/ 08 февраля 2011

Я не знаю, что я сделал неправильно, но я не могу включить JSTL.У меня есть jstl-1.2.jar, но, к сожалению, я получаю исключение:

org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:51)
    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409)
    at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:116)
    at org.apache.jasper.compiler.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.java:315)
    at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:148)
    at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:429)
    at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:492)
    at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1439)
    at org.apache.jasper.compiler.Parser.parse(Parser.java:137)
    at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255)
    at org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:170)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:332)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:312)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:299)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Thread.java:619)

У меня есть:

Ответы [ 12 ]

170 голосов
/ 08 февраля 2011

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и т. д. вместо базового контейнера сервлетов, такого как Tomcat, Jetty и т. д., вам вообще не нужно явно устанавливать JSTL.Обычные серверы Java EE уже предоставляют JSTL из коробки.Другими словами, вам не нужно ни добавлять JSTL в pom.xml, ни удалять файлы JAR / TLD в веб-приложении.Только координаты Java EE в области provided достаточно:

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

См. Также:

36 голосов
/ 06 октября 2011

@ 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:

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

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

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
14 голосов
/ 09 января 2016

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

13 голосов
/ 03 января 2014
jstl-1.2.jar --> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
jstl-1.1.jar --> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

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

9 голосов
/ 16 марта 2015
  1. Скачать jstl-1.2.jar
  2. Добавьте эту директиву на свою страницу: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

  3. Вставьте файл JAR в папку WEB-INF / lib. Это должно работать. (Это работал для меня.)

7 голосов
/ 10 июля 2015

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

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

3 голосов
/ 14 декабря 2016

Я просто хотел добавить исправление, найденное для этой проблемы. Я не уверен, почему это сработало. У меня была правильная версия 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" %>

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

3 голосов
/ 06 мая 2015

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

    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
2 голосов
/ 13 октября 2017

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

  • spring-aop-4.0.3.RELEASE.jar
  • spring-beans-4.0.3.RELEASE.jar (сложно найти это исправление, другие org.springframework <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 хорошо работала.

0 голосов
/ 20 апреля 2017

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

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

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

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

...