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>
    
106
demandé sur BalusC 2011-02-08 03:19:37

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:

153
répondu BalusC 2018-08-23 09:07:43

@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.

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

  2. 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

  3. 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" %>
33
répondu 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" %>

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.

13
répondu streethawk 2014-03-03 18:01:10

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.

7
répondu 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. coller le fichier JAR dans votre dossier WEB-INF/lib. Cela devrait fonctionner. (Il a travaillé pour moi.)

7
répondu Prashant Ghimire 2016-02-16 17:11:39

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

avec ceci, votre erreur de dépendance sera corrigée à nouveau.

6
répondu Hadi Rasouli 2018-08-22 06:50:45

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>
3
répondu 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'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.

2
répondu gnattyp 2016-12-14 22:53:11

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é.

2
répondu 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. 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.

0
répondu 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
répondu Mike Yakovets 2016-01-16 02:47:37

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

0
répondu w3Charlie 2017-04-20 13:26:19

a résolu le même problème dans IBM RAD 7.5 en sélectionnant:

  1. propriétés de Projets
  2. Facettes Du Projet
  3. case à cocher JSTL
-2
répondu c. hantzis 2014-03-24 03:04:57