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>
Réponses:
Cet URI est pour JSTL 1.0, mais vous utilisez en fait JSTL 1.2 qui utilise des URI avec un
/jsp
chemin supplémentaire (car JSTL, qui a inventé les expressions EL, était depuis la version 1.1 intégrée dans le cadre de JSP afin de partager / réutiliser la logique EL dans JSP simple aussi).Donc, corrigez l'URI taglib en conséquence en vous basant sur la documentation JSTL :
De plus, vous devez absolument vous assurer de ne pas lancer plusieurs fichiers JAR JSTL versionnés différents ensemble dans le chemin de classe d'exécution. C'est une erreur assez courante parmi les utilisateurs de Tomcat. Le problème avec Tomcat est qu'il n'offre pas JSTL prêt à l'emploi et que vous devez donc l'installer manuellement. Cela n'est pas nécessaire sur les serveurs Java EE normaux. Voir aussi Qu'est-ce que Java EE exactement?
Dans votre cas spécifique, votre pom.xml vous indique essentiellement que vous avez jstl-1.2.jar et standard-1.1.2.jar ensemble. C'est faux. Vous mélangez essentiellement JSTL 1.2 API + impl d'Oracle avec JSTL 1.1 impl d'Apache. Vous devez supprimer tout fichier
standard-xxx.jar
. Il suffit que l'jstl-1.2.jar
est suffisante.Les utilisateurs non-Maven peuvent réaliser la même chose en déposant le fichier physique jstl-1.2.jar dans le
/WEB-INF/lib
dossier du projet d'application Web (ne déposez absolument pas standard.jar ou tout autre fichier .tld lâche!). Retirez-les si nécessaire.Si vous utilisez réellement 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 du tout besoin d'installer explicitement JSTL. Les serveurs Java EE normaux fournissent déjà JSTL. En d'autres termes, vous n'avez pas besoin d'ajouter JSTL
pom.xml
ni de supprimer des fichiers JAR / TLD dans webapp. Seule laprovided
coordonnée Java EE étendue est suffisante:De plus, vous devez également vous assurer que votre
web.xml
est déclaré conforme au moins Servlet 2.4 et donc pas comme Servlet 2.3 ou plus ancien. Sinon, les expressions EL à l'intérieur des balises JSTL ne fonctionneraient pas. Choisissez la version la plus élevée correspondant à votre conteneur cible et assurez-vous que vous n'avez<!DOCTYPE>
nulle part dans votreweb.xml
. Voici un exemple compatible Servlet 4.0 (Tomcat 9):Voir également:
web.xml
exemples)la source
standard
taglib. Lisez la page d'informations sur les balises pour plus de détails.compile('javax.servlet:jstl:1.2')
@BalusC a tout à fait raison, mais si vous rencontrez toujours cette exception, cela signifie que vous avez mal fait quelque chose. Les informations les plus importantes que vous trouverez se trouvent sur la page d' informations sur les balises SO JSTL .
En gros, il s'agit d'un résumé de ce que vous devez faire pour faire face à cette exception.
Vérifiez la version du servlet dans web.xml:
<web-app version="2.5">
Vérifiez si la version JSTL est prise en charge pour cette version de servlet: la version 2.5 du servlet utilise JSTL 1.2 ou la version 2.4 du servlet utilise JSTL 1.1
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 fichiers jar appropriés dans votre répertoire WEB-INF / lib (cela ne fonctionnera que pour votre application) ou dans le tomcat / lib (fonctionnera globalement pour toutes les applications).
La dernière chose est un taglib dans vos fichiers jsp. Pour JSTL 1.2, la bonne est la suivante:
la source
J'ai trouvé une autre raison à ce type d'erreur: dans mon cas, quelqu'un a défini la propriété de
conf/catalina.properties
réglagetomcat.util.scan.StandardJarScanFilter.jarsToSkip
sur*
pour éviter les messages d'avertissement de journal, ignorant ainsi l'analyse nécessaire par Tomcat. Le retour à la valeur par défaut de Tomcat et l'ajout d'une liste appropriée de fichiers JAR à ignorer (sans inclure jstl-1.2 ou spring-webmvc) ont résolu le problème.la source
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*
encatalina.properties
fichier dans une tentative (mal comprise?) D'accélérer le temps de démarrage de Tomcat. Arghh!jarsToSkip
paramètre, en dessous se trouve unjarsToScan
paramètre qui remplace tout élément dansjarsToSkip
. Nous avons fini par ajoutertaglibs*.jar
à notrejarsToScan
comme nos taglibs étaienttaglibs-standard-impl-1.2.5.jar
ettaglibs-standard-spec-1.2.5.jar
.conf/catalina.properties
, je suis passétomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar
àtomcat.util.scan.StandardJarScanFilter.jarsToScan=jstl*.jar
et cela l'a corrigé.vérifiez également les fichiers jars de dépendances que vous avez ajoutés
javax.servlet.jar
etjavax.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.la source
Ajoutez le
jstl-1.2.jar
dans letomcat/lib
dossier.Avec cela, votre erreur de dépendance sera à nouveau corrigée.
la source
Ajoutez cette directive à votre page:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Collez le fichier JAR dans votre dossier WEB-INF / lib. Cela devrait fonctionner. (Cela a fonctionné pour moi.)
la source
J'ai mentionné que la dépendance Maven dans le pom.xml est fausse. Ça devrait être
la source
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)
J'ai également eu la bonne adresse dans ma page comme suggéré dans ce fil, qui est
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 a résolu le problème, mais juste au cas où quelqu'un ferait le printemps avec le tutoriel JPA et Hibernate sur pluralsight et aurait sa configuration pom de cette façon, essayez de supprimer la balise scope et voyez si cela le résout. Comme je l'ai dit, cela a fonctionné pour moi.
la source
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.
Le pire de tout était
jstl-api-1.2.jar
etjavax-servlet.jsp.jst-api-1.2.1.jar
. Ils n'ont tout simplement pas fonctionné.jstl-1.2.jar
a bien fonctionné.la source
jstl-1.2
au lieu dejstl-1.2.1
travailler pour moi aussi, et je ne sais pas pourquoi.Si vous utilisez Spring Boot, envisagez de supprimer
server.tomcat.additional-tld-skip-patterns=*.jar
deApplication.properties
s'il y en ala source
Toutes les réponses à cette question m'ont aidé mais j'ai pensé ajouter des informations supplémentaires pour la postérité.
Il s'est avéré que j'avais une dépendance de test sur
gwt-test-utils
laquelle legwt-dev
package était introduit .gwt-dev
Contient malheureusement une copie complète de Jetty, JSP, JSTL, etc. qui était en avance sur les paquets appropriés sur le chemin de classe. Ainsi, même si j'avais des dépendances appropriées sur le JSTL 1.2, il chargerait la version 1.0 interne àgwt-dev
. Plaindre.La solution pour moi était de ne pas exécuter avec la portée de test, donc je ne récupère pas le
gwt-test-utils
package au moment de l'exécution. La suppression dugwt-dev
package du classpath d'une autre manière aurait également résolu le problème.la source
Juste eu un problème similaire dans Eclipse corrigé avec:
quelque chose l'a expulsé avant, pendant que je modifiais mon pom.xml
J'avais tous les fichiers jar nécessaires, l'URI taglib et web.xml était ok
la source
Une réponse pour l'année 2020
La question est toujours très populaire, mais toutes les réponses sont sérieusement dépassées. Tous les composants Java EE ont été divisés en divers projets Jakarta et JSTL n'est pas différent. Voici donc les dépendances Maven correctes à ce jour:
Oui, les versions et les groupIds ne correspondent pas, mais c'est une bizarrerie de l'état actuel du projet .
la source
Cela a fonctionné pour moi
la source
J'ai eu le même problème, j'utilise eclipse, juste au cas où d'autres rencontreraient le même problème:
dans eclipse, double-cliquez sur le serveur tomcat,
arrêtez le serveur
décochez la case "modules serveur sans publication",
démarrez le serveur.
la source
Résolution d'un problème similaire dans IBM RAD 7.5 en sélectionnant:
la source