Comment installer JSTL? L'uri absolu: http://java.sun.com/jstl/core ne peut ê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 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>
13 réponses
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
que URI est pour JSTL 1.0, mais vous utilisez en fait JSTL 1.2 qui utilise URIs avec un chemin supplémentaire /jsp
(parce que 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 aussi).
ainsi, fixer 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
. C'est inutile et même dangereux quand vous avez déjà l'API JSTL 1.2+impl empaqueté via javax.servlet:jstl
, parce que les points 1.1 et 1.2 se contredisent évidemment. Juste seulement la dépendance JSTL 1.2 suivante devrait le faire afin d'avoir JSTL installé dans votre webapp Tomcat-cible (do not mettre le <scope>
à provided
comme Tomcat ne le fournit en fait pas la boîte!):
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
les utilisateurs Non Maven peuvent obtenir le même résultat en abandonnant le seul jstl-1.2.jar fichier /WEB-INF/lib
dossier de l'application web du projet (faire pas drop standard.en pot ou en tout lâche .des fichiers tld là-dedans!).
dans le cas où vous utilisez effectivement un serveur Java EE normal tel que WildFly, Payara, etc au lieu d'un servletcontainer barebones tel que Tomcat, Jetty, etc, alors vous n'avez pas besoin d'installer explicitement JSTL du tout. Les serveurs Java EE normaux fournissent déjà la boîte JSTL. En d'autres termes, vous n'avez pas besoin d'ajouter JSTL à pom.xml
ni de laisser tomber des fichiers JAR/TLD dans webapp. Seule la coordonnée provided
scoped Java EE 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 donc pas comme Servlet 2.3 ou plus. Sinon, les expressions EL à l'intérieur des balises JSTL ne fonctionneraient pas. Choisissez la version la plus haute correspondant à votre conteneur cible et assurez-vous que vous n'avez pas 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:
- JSTL de base taglib documentation (pour le droit taglib Uri)
- JSTL info tag page (pour JSTL les liens de téléchargement et de
web.xml
exemples)
@BalusC est tout à fait juste, mais si vous rencontrez toujours cette exception, cela signifie que quelque chose que vous avez fait de mal. L'information la plus importante que vous trouverez est sur le SO JSTL Tag Info page.
fondamentalement, ceci est un résumé de ce que vous devez faire pour traiter cette exception.
-
Vérifiez la version servlet sur le web.xml:
<web-app version="2.5">
-
vérifiez si la version JSTL est prise en charge pour cette version servlet: la version Servlet 2.5 utilise JSTL 1.2 ou la version Servlet 2.4 utilise JSTL 1.1
-
votre conteneur de servlet doit avoir la bibliothèque appropriée, ou vous devez l'inclure manuellement dans votre demande. Par exemple: JSTL 1.2 exige jstl-1.2.jar
quoi faire faire avec Tomcat 5 ou 6:
vous devez inclure jar(s) approprié (s) dans votre répertoire WEB-INF/lib (il fonctionnera seulement pour votre application) ou à la tomcat/lib (fonctionnera globalement pour toutes les applications).
la dernière chose est un taglib dans vos fichiers jsp. Pour JSTL 1.2, il est correct:
<%@ 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 pots de dépendances 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 a résolu le problème.
j'ai trouvé une autre raison pour ce type d'erreur: dans mon cas, quelqu'un a mis le catalina.propriétés paramètre tomcat.util.scan.StandardJarScanFilter.jarsToSkip
propriété à *
pour éviter les messages d'avertissement log, sautant ainsi le balayage nécessaire par Tomcat. Le fait de revenir à la valeur par défaut de Tomcat et d'ajouter une liste appropriée de pots à sauter (n'incluant pas jstl-1.2 ou spring-webmvc) a résolu le problème.
- Télécharger jstl-1.2.jar
-
ajouter cette directive à votre page:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-
coller le fichier JAR dans votre dossier WEB-INF/lib. Cela devrait fonctionner. (Il a travaillé pour moi.)
ajouter le jstl-1.2.jar
dans le dossier tomcat/lib
.
avec ceci, votre erreur de dépendance sera corrigée à nouveau.
j'ai mentionné que la dépendance Maven dans le pom.xml est mal. Il devrait être
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
je voulais juste ajouter le correctif que j'ai trouvé pour ce problème. Je ne sais pas pourquoi cela a fonctionné. J'ai eu la version correcte de la jstl (1.2) et aussi la version correcte 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'ai aussi eu la bonne adresse 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 corrigé 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 réparé mais juste au cas où quelqu'un ferait le printemps avec JPA et le tutoriel Hibernate sur pluralsight et aurait sa configuration pom de cette façon, essayez d'enlever la balise scope et voyez si cela la corrige. Comme je l'ai dit il a travaillé pour moi.
j'avais complètement désactivé le MAVEN et les outils à ressort. Et j'ai dû ajouter les pots suivants pour avoir fait fonctionner mon environnement.
- spring-AOP-4.0.3.PUBLIER.jar
- printemps-haricots-4.0.3.PUBLIER.jar (difficile de trouver cette solution, autre org.springframework<3.versions> juste ne fonctionnait pas.
- printemps-contexte-4.0.3.PUBLIER.jar
- printemps-core-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 juste n'a pas travail.
" jstl-1.2.pot a bien fonctionné.
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. qui était en avance sur les paquets appropriés sur le chemin de la classe. Donc, même si j'avais des dépendances appropriées sur la JSTL 1.2, elle chargerait la version 1.0 interne à gwt-dev
. Grogner.
la solution pour moi était de ne pas courir avec la portée de test donc je ne prends pas le paquet gwt-test-utils
à l'exécution. Retirer le paquet gwt-dev
du classpath d'une autre manière aurait également réglé 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
.
vient D'avoir un problème similaire à Eclipse fixée au:
rightclick on project->Properties->Deployment Assembly->add Maven Dependencies
quelque chose l'a jeté avant, pendant que je préparais mon pom.xml
j'avais tous les fichiers jar nécessaires, tagliburi et web.xml a été ok
a résolu le même problème dans IBM RAD 7.5 en sélectionnant:
- propriétés de Projets
- Facettes Du Projet
- case à cocher JSTL