Jak zainstalować JSTL? Absolutny uri: http://java.sun.com/jstl/core nie można rozwiązać

Nie wiem co zrobiłem źle, ale nie mogę włączyć JSTL. Mam jstl-1.2.jar, ale niestety dostaję wyjątek:

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)

Mam:

  • 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>
    
Author: BalusC, 2011-02-08

13 answers

Org.Apacz.jasper.JasperException: the absolute uri: http://java.sun.com/jstl/core nie można rozwiązać w żadnej sieci.xml lub pliki JAR wdrożone z tą aplikacją

Ten URI jest dla JSTL 1.0, ale w rzeczywistości używasz JSTL 1.2, który używa Uri z dodatkową ścieżką /jsp (ponieważ JSTL, który wynalazł wyrażenia EL, był od wersji 1.1 zintegrowany jako część JSP, aby udostępnić/ponownie użyć logiki EL w zwykłym JSP zbyt).

Więc napraw taglib URI:

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

Ponadto Twój POM określa również implementację JSTL Apache 1.1 poprzez taglibs:standard. Jest to niepotrzebne, a nawet niebezpieczne, gdy masz już JSTL 1.2 API+impl w pakiecie za pośrednictwem javax.servlet:jstl, ponieważ 1.1 i 1.2 oczywiście będą ze sobą sprzeczne. Po prostu tylko następująca zależność JSTL 1.2 powinna to zrobić, aby mieć JSTL zainstalowany w aplikacji webowej ukierunkowanej na Tomcat (do Nie ustawić <scope> na provided, ponieważ Tomcat nie dostarcza jej z pudełka!):

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

Użytkownicy spoza Mavena mogą osiągnąć to samo, opuszczając pojedynczy jstl-1.2.jar plik w folderze /WEB-INF/lib projektu aplikacji webowej (do Nie drop standard.słoik lub jakikolwiek luźny .tam są pliki tld!).

W przypadku, gdy używasz zwykłego serwera Java EE, takiego jak WildFly, Payara, itp., zamiast zwykłego servletcontainera, takiego jak Tomcat, Jetty, itp., nie musisz w ogóle instalować JSTL. Zwykłe Serwery Java EE już dostarcz JSTL po wyjęciu z pudełka. Innymi słowy, nie musisz dodawać JSTL do pom.xml ani upuszczać żadnych plików JAR / TLD w aplikacji webapp. Tylko provided współrzędna Java EE jest wystarczająca:

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

Ponadto powinieneś również upewnić się, że twój web.xml jest zadeklarowany jako conform co najmniej Servlet 2.4, a zatem nie jako Servlet 2.3 lub starszy. W przeciwnym razie wyrażenia el wewnątrz znaczników JSTL nie będą działać. Wybierz najwyższą wersję odpowiadającą docelowemu kontenerowi i upewnij się, że nie miej <!DOCTYPE> w dowolnym miejscu web.xml. Oto przykład zgodny z Servletem 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>

Zobacz też:

  • W tym celu należy skontaktować się z Działem obsługi klienta pod adresem .]}
  • JSTL tag info page (dla linków do pobrania JSTL i przykładów web.xml)
 153
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-23 09:07:43

@BalusC ma całkowitą rację, ale jeśli nadal napotkasz ten wyjątek, oznacza to, że coś zrobiłeś źle. Najważniejsze informacje znajdziesz na stronie So JSTL Tag Info.

Zasadniczo jest to podsumowanie tego, co musisz zrobić, aby poradzić sobie z tym wyjątkiem.

  1. Sprawdź wersję servleta w web.xml: <web-app version="2.5">

  2. Sprawdź, czy wersja JSTL jest obsługiwana dla tej wersji servletu: Servlet version 2.5 używa JSTL 1.2 lub Wersja Servleta 2.4 używa JSTL 1.1

  3. Twój kontener servleta musi mieć odpowiednią bibliotekę lub musisz dołączyć ją ręcznie do swojej aplikacji. Na przykład: JSTL 1.2 wymaga jstl-1.2.jar

Co zrobić z Tomcat 5 czy 6:

Musisz dołączyć odpowiedni jar (y) do katalogu WEB-INF / lib (będzie działać tylko dla Twojej aplikacji) lub do tomcat/lib (będzie działać globalnie dla wszystkich aplikacje).

Ostatnią rzeczą jest taglib w plikach jsp. Dla JSTL 1.2 poprawne jest to:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 33
Author: smas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-15 22:43:13
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" %>

Sprawdź również, czy w Twoim folderze WEB-INF/lib nie znajdują się słoiki zależności, które dodałeś (aś) javax.servlet.jar i javax.servlet.jsp.jstl-1.2.1.jar lub nie. W moim przypadku ta dwójka rozwiązała problem.

 13
Author: streethawk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-03 18:01:10

Znalazłem inny powód tego typu błędu: w moim przypadku ktoś ustawił Catalinę.properties ustawienie właściwości tomcat.util.scan.StandardJarScanFilter.jarsToSkip Na *, aby uniknąć komunikatów ostrzegawczych dziennika, pomijając w ten sposób konieczne skanowanie przez Tomcat. Zmiana tego z powrotem do domyślnego Tomcat i dodanie odpowiedniej listy jarów do pominięcia (nie włączając jstl-1.2 lub spring-webmvc) rozwiązało problem.

 7
Author: resnbl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-09 06:13:06
  1. Pobierz jstl-1.2.jar
  2. Dodaj tę dyrektywę do swojej strony: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

  3. Wklej plik JAR do folderu WEB-INF / lib. To powinno zadziałać. (It dla mnie zadziałało.)

 7
Author: Prashant Ghimire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-16 17:11:39

Dodaj jstl-1.2.jar do folderu tomcat/lib.

Dzięki temu twój błąd zależności zostanie naprawiony ponownie.

 6
Author: Hadi Rasouli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-22 06:50:45

Wspomniałem, że zależność Mavena w pom.xml jest zły. Powinno być

    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
 3
Author: LoBo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-06 06:05:01

Chciałem tylko dodać poprawkę, którą znalazłem dla tego problemu. Nie wiem, dlaczego to zadziałało. Miałem poprawną wersję jstl (1.2), a także poprawną wersję 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>

Miałem również poprawny adres na mojej stronie, zgodnie z sugestią w tym wątku, czyli

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

Naprawiłem ten problem, usuwając znacznik scope z mojego pliku xml w pom dla mojej zależności jstl 1.2. Znowu Nie wiem, dlaczego to Naprawiono, ale na wypadek, gdyby ktoś robił sprężynę z JPA i Hibernate tutorial na pluralsight i ma swoją konfigurację pom w ten sposób, spróbuj usunąć znacznik scope i zobacz, czy to go naprawia. Jak mówiłem, zadziałało na mnie.

 2
Author: gnattyp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-14 22:53:11

Wyłączyłem Mavena i narzędzia sprężynowe. I musiałem dodać następujący słoik, aby moje środowisko działało dobrze.

  • spring-AOP-4.0.3.Uwolnij.jar
  • spring-beans-4.0.3.Uwolnij.jar (trudno znaleźć tę poprawkę, inne org.springframework po prostu nie praca.
  • spring-context-4.0.3.Uwolnij.jar
  • spring-core-4.0.3.Uwolnij.jar
  • Spring-expression-4.0.3.Uwolnij.jar
  • spring-web-4.0.3.Uwolnij.jar
  • spring-webmvc-4.0.3.Uwolnij.jar
  • jstl-1.2.jar

Najgorsze były jstl-api-1.2.jar i javax-servlet.jsp.jst-api-1.2.1.jar. Po prostu nie zadziałały.

" jstl-1.2.słoik działał dobrze.

 2
Author: Siddharth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-13 09:04:04

Wszystkie odpowiedzi na to pytanie pomogły mi, ale pomyślałem, że dodam dodatkowe informacje dla potomności.

Okazało się, że miałem testową zależność od gwt-test-utils, która przyniosła gwt-dev pakiet. Niestety gwt-dev zawiera pełną kopię Jetty, JSP, JSTL, itp. który wyprzedził odpowiednie pakiety na ścieżce klasowej. Więc mimo że miałem odpowiednie zależności od JSTL 1.2 to załadowałbym wersję 1.0 do gwt-dev. Marudzić.

Rozwiązaniem dla mnie było aby nie uruchomić z zakresu testowego, więc nie odbieram gwt-test-utils pakietu w czasie wykonywania. Usunięcie pakietu gwt-dev ze ścieżki klas w inny sposób również naprawiłoby problem.

 0
Author: Gray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-05 21:00:44

Jeśli próbowałeś wszystkiego, ale to nie pomogło, powinieneś ponownie uruchomić serwer. W moim przypadku po prostu zapomniałem zrestartować Tomcat, po dodaniu javax.servlet.jsp.jstl-1.2.1.jar do lib katalogu.

 0
Author: Mike Yakovets,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-16 02:47:37

Właśnie miałem podobny problem w Eclipse stałe z:

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

Coś wyrzuciło to przed, podczas edycji mojego pom.xml

Miałem wszystkie potrzebne pliki jar, taglib uri i web.xml był ok

 0
Author: w3Charlie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-20 13:26:19

Rozwiązano podobny problem w IBM RAD 7.5 wybierając:

  1. Projects properties
  2. Aspekty Projektu
  3. pole wyboru JSTL
 -2
Author: c. hantzis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-24 03:04:57