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.comstackr.DefaultErrorHandler.jspError(DefaultErrorHandler.java:51) at org.apache.jasper.comstackr.ErrorDispatcher.dispatch(ErrorDispatcher.java:409) at org.apache.jasper.comstackr.ErrorDispatcher.jspError(ErrorDispatcher.java:116) at org.apache.jasper.comstackr.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.java:315) at org.apache.jasper.comstackr.TagLibraryInfoImpl.(TagLibraryInfoImpl.java:148) at org.apache.jasper.comstackr.Parser.parseTaglibDirective(Parser.java:429) at org.apache.jasper.comstackr.Parser.parseDirective(Parser.java:492) at org.apache.jasper.comstackr.Parser.parseElements(Parser.java:1439) at org.apache.jasper.comstackr.Parser.parse(Parser.java:137) at org.apache.jasper.comstackr.ParserController.doParse(ParserController.java:255) at org.apache.jasper.comstackr.ParserController.parse(ParserController.java:103) at org.apache.jasper.comstackr.Comstackr.generateJava(Comstackr.java:170) at org.apache.jasper.comstackr.Comstackr.comstack(Comstackr.java:332) at org.apache.jasper.comstackr.Comstackr.comstack(Comstackr.java:312) at org.apache.jasper.comstackr.Comstackr.comstack(Comstackr.java:299) at org.apache.jasper.JspCompilationContext.comstack(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

      javax.servlet servlet-api 2.5 provided   javax.servlet.jsp jsp-api 2.1 provided   taglibs standard 1.1.2   javax.servlet jstl 1.2  
  • web.xml

      
  • index.jsp

          

org.apache.jasper.JasperException: L’URI absolu: http://java.sun.com/jstl/core ne peut pas être résolu dans les fichiers web.xml ou jar déployés avec cette application

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

Donc, corrigez l’URI taglib en conséquence:

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

De plus, votre POM spécifie également l’implémentation d’Apache JSTL 1.1 via taglibs:standard . Ceci est inutile et même dangereux lorsque vous avez déjà implémenté JSTL 1.2 API + javax.servlet:jstl via javax.servlet:jstl , car les javax.servlet:jstl 1.1 et 1.2 seront évidemment en conflit. Seule la dépendance JSTL 1.2 suivante doit le faire pour que JSTL soit installé dans votre application Web ciblée sur Tomcat (ne définissez pas sur provided car Tomcat ne le fournit pas dans la boîte!):

  javax.servlet jstl 1.2  

Les utilisateurs non-Maven peuvent obtenir le même résultat en déposant le seul fichier jstl-1.2.jar dans le dossier /WEB-INF/lib du projet d’application Web (ne déposez pas standard.jar ni aucun fichier .tld en vrac!).

Si vous utilisez un serveur Java EE normal tel que WildFly, Payara, etc. au lieu d’un conteneur de servlet barebones tel que Tomcat, Jetty, etc., vous n’avez pas besoin d’installer explicitement JSTL. Les serveurs Java EE normaux fournissent déjà JSTL. En d’autres termes, vous n’avez pas besoin d’append JSTL à pom.xml ni de supprimer des fichiers JAR / TLD dans webapp. Seule la coordonnée Java EE provided est suffisante:

  javax javaee-api  provided  

De plus, vous devez également vous assurer que votre web.xml est déclaré conforme au moins à Servlet 2.4 et donc pas à Servlet 2.3 ou plus ancien. Sinon, les expressions EL dans les balises JSTL ne fonctionneraient pas. Choisissez la version la plus élevée correspondant à votre conteneur cible et assurez-vous de ne pas avoir de < !DOCTYPE> n’importe où dans votre web.xml . Voici un exemple compatible avec Servlet 4.0 (Tomcat 9):

 < ?xml version="1.0" encoding="UTF-8"?>    

Voir également:

  • Documentation de base taglib JSTL (pour les bons URI taglib)
  • Page d’informations sur les balises JSTL (pour les liens de téléchargement JSTL et les exemples web.xml )

@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 sont sur la page d’ informations sur les tags SO JSTL .

Fondamentalement, il s’agit d’un résumé de ce que vous devez faire pour gérer cette exception.

  1. Vérifiez la version du servlet dans web.xml:

  2. Vérifiez si la version de JSTL est prise en charge pour cette version de servlet: La version 2.5 de Servlet utilise JSTL 1.2 ou la version 2.4 de Servlet 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.jar

Que faire avec Tomcat 5 ou 6:

Vous devez inclure les jar (s) appropriés dans votre répertoire WEB-INF / lib (cela ne fonctionnera que pour votre application) ou sur le tomcat / lib (fonctionnera globalement pour toutes les applications).

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

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

Veuillez également vérifier 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 problèmes ont résolu le problème.

  1. Télécharger jstl-1.2.jar
  2. Ajoutez 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. (Ça a marché pour moi)

J’ai trouvé une autre raison à ce type d’erreur: dans mon cas, quelqu’un a défini la propriété catalina.properties en tomcat.util.scan.StandardJarScanFilter.jarsToSkip propriété tomcat.util.scan.StandardJarScanFilter.jarsToSkip sur * pour éviter les messages d’avertissement du journal, ignorant ainsi l’parsing nécessaire par Tomcat. En revenant à la valeur par défaut Tomcat et en ajoutant une liste appropriée de jars à ignorer (sans inclure jstl-1.2 ou spring-webmvc), le problème a été résolu.

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

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

J’ai mentionné que la dépendance de Maven dans le fichier pom.xml est incorrecte. CA devrait etre

   jstl jstl 1.2  

Je voulais juste append le correctif trouvé pour ce problème. Je ne sais pas pourquoi cela a fonctionné. J’ai eu la bonne version de jstl (1.2) et aussi la bonne version de servlet-api (2.5)

  javax.servlet servlet-api 2.5 provided   javax.servlet jstl 1.2  

J’avais aussi la bonne adresse sur 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, c’était de supprimer la balise scope de mon fichier xml dans le fichier pom pour ma dépendance jstl 1.2. Encore une fois pas sûr pourquoi cela a résolu ce problème, mais juste au cas où quelqu’un fait le spring avec le tutoriel JPA et Hibernate sur pluralsight et a son installation pom de cette façon, essayez de supprimer la balise scope et voir si cela le corrige. Comme je l’ai dit, cela a fonctionné pour moi.

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

  • Spring-aop-4.0.3.RELEASE.jar
  • spring-beans-4.0.3.RELEASE.jar (difficile à trouver ce correctif, les autres org.springframework <3.versions> ne fonctionnaient tout simplement pas.
  • spring-context-4.0.3.RELEASE.jar
  • spring-core-4.0.3.RELEASE.jar
  • expression-spring-4.0.3.RELEASE.jar
  • spring-web-4.0.3.RELEASE.jar
  • spring-webmvc-4.0.3.RELEASE.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 n’ont tout simplement pas fonctionné.

`jstl-1.2.jar a bien fonctionné.

Toutes les réponses à cette question m’ont aidé, mais j’ai pensé append des informations supplémentaires à la postérité.

Il s’est avéré que j’avais une dépendance de test sur gwt-test-utils qui apportait le gwt-dev . Malheureusement, gwt-dev contient une copie complète de Jetty, JSP, JSTL, etc. qui était en avance sur les paquets appropriés sur le classpath. Donc, même si j’avais des dépendances sur JSTL 1.2, la version 1.0 interne à gwt-dev serait chargée. Plaindre.

La solution pour moi était de ne pas exécuter avec la scope de test, donc je ne prends pas le gwt-test-utils à l’exécution. Supprimer le gwt-dev du classpath d’une autre manière aurait également résolu le problème.

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 .

Juste eu problème similaire dans Eclipse corrigé avec:

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

quelque chose a été lancé avant, pendant que j’éditions mon pom.xml

J’avais tous besoin de fichiers jar, taglib uri et web.xml étaient ok

Problème similaire résolu dans IBM RAD 7.5 en sélectionnant:

  1. Propriétés des projets
  2. Facettes du projet
  3. Case à cocher JSTL