Как установить JSTL? Абсолютный uri: http://java.sun.com/jstl/core не может быть решена
Я не знаю, что я сделал неправильно, но я не могу включить JSTL. У меня есть jstl-1.2.банку, но, к сожалению, я получаю исключение:
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)
Я:
-
pom.xml
<dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
-
web.xml
<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_2_5.xsd" version="2.5">
-
index.jsp
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> <html> <head></head> <body></body> </html>
13 ответов:
org.апаш.Джаспер.JasperException: абсолютный uri:http://java.sun.com/jstl/core не может быть решена ни в одной сети.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 также указывает реализацию JSTL 1.1 Apache через
taglibs:standard
. Это не нужно и даже опасно, когда вы уже JSTL 1.2 API + impl в комплекте черезjavax.servlet:jstl
, потому что 1.1 и 1.2 будут явно конфликтовать друг с другом. Просто только следующая зависимость JSTL 1.2 должна сделать это, чтобы установить JSTL в вашем веб-приложении Tomcat-targeted (do не установить<scope>
доprovided
как Tomcat на самом деле не предоставляет его из коробки!):<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
не-Maven пользователи могут достичь того же, отбросив один jstl-1.2.банку на
/WEB-INF/lib
папка проекта веб-приложения (do не стандартные капли.банку или любой свободный .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
объявляется conform по крайней мере сервлет 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>
Читайте также:
- JSTL core taglib documentation (для правого Taglib URI)
- информационная страница тега JSTL (для ссылок загрузки JSTL и
web.xml
примеры)
@BalusC полностью прав, но если вы все еще сталкиваетесь с этим исключением, это означает, что что-то вы сделали неправильно. Самая важная информация, которую вы найдете, находится на SO информация о теге JSTL
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. В моем случае эти два решили проблему.
Я нашел еще одну причину для этого типа ошибки: в моем случае, кто-то ставил Каталина.настройка свойств
tomcat.util.scan.StandardJarScanFilter.jarsToSkip
свойство*
чтобы избежать предупреждающих сообщений журнала, тем самым пропуская необходимую проверку Tomcat. Изменение этого назад к значению по умолчанию Tomcat и добавление соответствующего списка банок для пропуска (не включая jstl-1.2 или spring-webmvc) решило проблему.
- скачать jstl-1.2.банку
добавьте эту директиву на свою страницу:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
вставьте файл JAR в папку WEB-INF/lib. Это должно сработать. (Он работать на меня.)
Я уже упоминал, что зависимость Maven в pom.XML-это неправильно. Он должен быть!--2-->
<dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
Я просто хотел добавить исправить я нашел для этой проблемы. Я не знаю, почему это сработало. У меня была правильная версия 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 и посмотреть, исправит ли это его. Как я уже сказал, это сработало для меня.
Я полностью отключил MAVEN и пружинные инструменты. И мне пришлось добавить следующую банку для того, чтобы моя среда работала правильно.
- spring-aop-4.0.3.ОСВОБОЖДАТЬ.банку
- весна-бобы-4.0.3.ОСВОБОЖДАТЬ.jar (трудно найти это исправление, другая организация.springframework просто не было работа.
- spring-context-4.0.3.ОСВОБОЖДАТЬ.банку
- весна-ядро-4.0.3.ОСВОБОЖДАТЬ.банку
- весна-выражение-4.0.3.ОСВОБОЖДАТЬ.банку
- spring-web-4.0.3.ОСВОБОЖДАТЬ.банку
- spring-webmvc-4.0.3.ОСВОБОЖДАТЬ.банку
- jstl-1.2.банку
хуже всего было
jstl-api-1.2.jar
иjavax-servlet.jsp.jst-api-1.2.1.jar
. Они просто не работа.' jstl-1.2.Джар работал хорошо.
все ответы на этот вопрос помогли мне, но я думал, что добавлю дополнительную информацию для потомков.
оказалось, что у меня была тестовая зависимость от
gwt-test-utils
, которые принес вgwt-dev
пакета. К сожалениюgwt-dev
содержит полную копию Jetty, JSP,JSTL и др. который был впереди соответствующих пакетов на пути к классам. Поэтому, хотя у меня были правильные зависимости от JSTL 1.2, он загрузил бы версию 1.0 внутренне вgwt-dev
. Ворчать.решение для меня было не запускать с тестовой областью, поэтому я не забираю во время выполнения. Удаление
gwt-dev
пакет из classpath каким-то другим способом также исправил бы проблему.
Если вы пробовали все, но это не помогло, вы должны перезагрузить сервер. В моем случае я просто забыл перезапустить Tomcat, после добавления
javax.servlet.jsp.jstl-1.2.1.jar
до