Comment installer JSTL? L'uri absolu: http://java.sun.com/jstl/core ne peut pas être résolu


Je ne sais pas ce que j'ai mal fait, mais je ne peux pas inclure JSTL. J'ai jstl-1.2.jar, mais malheureusement je reçois une exception:

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)

J'ai:

  • 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.Apache.Jasper.JasperException: L'uri absolu: http://java.sun.com/jstl/core ne peut pas être résolu dans l'un ou l'autre web.xml ou les fichiers jar déployés avec cette application

Cet URI est pour JSTL 1.0, mais vous utilisez en fait JSTL 1.2 qui utilise des URI avec un chemin /jsp supplémentaire (car JSTL, qui a inventé les expressions EL, était depuis la version 1.1 intégrée dans JSP afin de partager/réutiliser la logique EL dans JSP ordinaire aussi).

Alors, corrigez le taglib URI en conséquence:

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

En outre, votre POM spécifie également l'implémentation JSTL 1.1 d'Apache via taglibs:standard. Ceci est inutile et même dangereux lorsque vous avez déjà JSTL 1.2 API + impl fourni via javax.servlet:jstl, parce que 1.1 et 1.2 vont évidemment entrer en conflit. Juste seulement la dépendance JSTL 1.2 suivante devrait le faire afin que JSTL soit installé dans votre application Web ciblée par Tomcat (do not set the <scope> to provided car Tomcat ne le fournit pas réellement sorti de la boîte!):

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

Les utilisateurs non-Maven peuvent réaliser la même chose en supprimant le seul jstl-1.2.fichier jar dans le dossier /WEB-INF/lib du projet d'application Web (do not drop standard.en pot ou en tout lâche .fichiers tld là-dedans!).

Dans le cas où vous utilisez un serveur Java EE normal tel que WildFly, Payara, etc. au lieu d'un servletcontainer barebones tel que Tomcat, Jetty, etc., vous n'avez pas besoin d'installer explicitement JSTL du tout. Serveurs Java EE normaux déjà fournir JSTL la boîte. En d'autres termes, vous n'avez pas besoin d'ajouter JSTL à pom.xml ni de supprimer des fichiers JAR/TLD dans webapp. Seule la coordonnée provided Java EE étendue est suffisante:

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

En Outre, vous devez également vous assurer que votre web.xml est déclaré conforme , au moins Servlet 2.4 et n'est donc pas Servlet 2.3 ou plus. Sinon, les expressions EL à l'intérieur des balises JSTL ne fonctionneraient pas à leur tour. Choisissez la version la plus élevée correspondant à votre conteneur cible et assurez-vous que vous ne le faites pas avoir un <!DOCTYPE> n'importe où dans votre web.xml. Voici un exemple compatible 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>

Voir aussi:

  • Je n'ai jamais eu de problème avec le taglib, mais je n'ai pas eu de problème avec le taglib.]}
  • JSTL info tag page (pour JSTL les liens de téléchargement et web.xml exemples)
 153
Author: BalusC, 2018-08-23 09:07:43

@BalusC a tout à fait raison, mais si vous rencontrez toujours cette exception, cela signifie que quelque chose que vous avez mal fait. Les informations les plus importantes que vous trouverez se trouvent sur la page SO JSTL Tag Info.

Fondamentalement, c'est un résumé de ce que vous devez faire pour faire face à cette exception.

  1. Vérifiez la version du servlet dans le web.xml: <web-app version="2.5">

  2. Vérifiez si la version JSTL est prise en charge pour cette version de servlet: la version de servlet 2.5 utilise JSTL 1.2 ou la version de servlet 2.4 utilise JSTL 1.1

  3. Votre conteneur de servlet doit avoir la bibliothèque appropriée, ou vous devez l'inclure manuellement dans votre application. Par exemple: JSTL 1.2 nécessite jstl-1.2.pot

Quoi faire avec Tomcat 5 ou 6:

Vous devez inclure bocal(s) dans votre WEB-INF/lib (cela ne fonctionne que pour votre demande) ou à l'tomcat/lib (elle fonctionne globalement pour tous les application).

La dernière chose est un taglib dans vos fichiers jsp. Pour JSTL 1.2, le bon est le suivant:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 33
Author: smas, 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" %>

Vérifiez également les jars de dépendance que vous avez ajoutés javax.servlet.jar et javax.servlet.jsp.jstl-1.2.1.jar ou non dans votre dossier WEB-INF/lib. Dans mon cas, ces deux ont résolu le problème.

 13
Author: streethawk, 2014-03-03 18:01:10

J'ai trouvé une autre raison à ce type d'erreur: dans mon cas, quelqu'un a défini la catalina.propriétés définir la propriété tomcat.util.scan.StandardJarScanFilter.jarsToSkip sur * pour éviter les messages d'avertissement de journal, sautant ainsi l'analyse nécessaire par Tomcat. La modification de ce retour à la valeur par défaut Tomcat et l'ajout d'une liste appropriée de fichiers jar à ignorer (sans jstl-1.2 ou spring-webmvc) ont résolu le problème.

 7
Author: resnbl, 2016-01-09 06:13:06
  1. Télécharger jstl-1.2.jar
  2. Ajouter cette directive à votre page: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

  3. Collez le fichier JAR dans votre dossier WEB-INF/lib. Cela devrait fonctionner. (Il a travaillé pour moi.)

 7
Author: Prashant Ghimire, 2016-02-16 17:11:39

Ajouter le jstl-1.2.jar dans le tomcat/lib dossier.

Avec cela, votre erreur de dépendance sera corrigée à nouveau.

 6
Author: Hadi Rasouli, 2018-08-22 06:50:45

J'ai mentionné que la dépendance Maven dans le pom.xml est faux. Il devrait être

    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
 3
Author: LoBo, 2015-05-06 06:05:01

, je voulais juste ajouter le correctif que j'ai trouvé pour ce problème. Je ne sais pas pourquoi cela a fonctionné. J'avais la bonne version de jstl (1.2) et aussi la bonne version de 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>

J'avais également l'adresse correcte dans ma page comme suggéré dans ce fil, qui est

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

Ce qui a résolu ce problème pour moi était de supprimer la balise scope de mon fichier XML dans le pom pour ma dépendance jstl 1.2. Encore une fois je ne sais pas pourquoi cela l'a corrigé mais juste au cas où quelqu'un ferait le printemps avec JPA et Hibernate tutorial sur pluralsight et a leur configuration pom de cette façon, essayez de supprimer la balise scope et voyez si cela le corrige. Comme je l'ai dit il a travaillé pour moi.

 2
Author: gnattyp, 2016-12-14 22:53:11

J'avais complètement désactivé les outils MAVEN et Spring. Et j'ai dû ajouter les pots suivants pour que mon environnement fonctionne correctement.

  • printemps-aop-4.0.3.PUBLIER.jar
  • printemps-haricots-4.0.3.PUBLIER.jar (difficile de trouver ce correctif, autre org.springframework tout simplement pas travail.
  • printemps-contexte-4.0.3.PUBLIER.jar
  • noyau de ressort-4.0.3.PUBLIER.jar
  • printemps-expression-4.0.3.PUBLIER.jar
  • printemps-web-4.0.3.PUBLIER.jar
  • printemps-webmvc-4.0.3.PUBLIER.jar
  • jstl-1.2.jar

Le pire de tous était jstl-api-1.2.jar et javax-servlet.jsp.jst-api-1.2.1.jar. Ils ont juste n'a pas travail.

`jstl-1.2.pot a bien fonctionné.

 2
Author: Siddharth, 2017-10-13 09:04:04

Toutes les réponses à cette question m'ont aidé mais j'ai pensé ajouter quelques informations supplémentaires pour la postérité.

Il s'est avéré que j'avais une dépendance de test sur gwt-test-utils qui a apporté le paquet gwt-dev. Malheureusement, gwt-dev contient une copie complète de Jetty, JSP, JSTL, etc. ce qui était en avance sur les paquets appropriés sur le chemin de classe. Donc, même si j'avais des dépendances appropriées sur le JSTL 1.2, il chargerait la version 1.0 interne à gwt-dev. Grogner.

La solution pour moi était pour ne pas fonctionner avec la portée de test, je ne récupère donc pas le package gwt-test-utils au moment de l'exécution. Supprimer le paquet gwt-dev du chemin de classe d'une autre manière aurait également résolu le problème.

 0
Author: Gray, 2014-03-05 21:00:44

Si vous avez tout essayé mais que cela n'a pas aidé, vous devez redémarrer le serveur. Dans mon cas, j'ai juste oublié de redémarrer Tomcat, après avoir ajouté javax.servlet.jsp.jstl-1.2.1.jar au répertoire lib.

 0
Author: Mike Yakovets, 2016-01-16 02:47:37

Vient d'avoir un problème similaire dans Eclipse fixé avec:

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

Quelque chose l'a expulsé avant, pendant que je montais mon pom.xml

J'avais tous les fichiers jar nécessaires, uri taglib et web.xml était ok

 0
Author: w3Charlie, 2017-04-20 13:26:19

Résolution d'un problème similaire dans IBM RAD 7.5 en sélectionnant:

  1. Propriétés des projets
  2. Facettes du projet
  3. Case à cocher JSTL
 -2
Author: c. hantzis, 2014-03-24 03:04:57