web-dev-qa-db-fra.com

L'URI absolu: http://Java.Sun.com/jsp/jstl/core ne peut être résolu ni dans le fichier web.xml ni dans les fichiers jar déployés avec cette application.

J'utilise JDK 1.7, Apache Tomcat 7.0.23 et j'ai placé la bibliothèque principale JSTL (1.2) et le fichier jar STANDARD dans le dossier lib WEB_INF. Cela ne me donne aucun avertissement, mais je vais essayer d'exécuter le code.

<%@ taglib uri="http://Java.Sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- Create Bean Instance-->
<jsp:useBean id="listdomain" class="bean.PopulateMultiDomain" scope="session"></jsp:useBean>

<jsp:setProperty property="*" name="listdomain"/>

<c:forEach var="item" items="${listdomain.status}">
    <option>
        <c:out value="${item}" />
    </option>
</c:forEach> 

cela me donne l'erreur suivante:

org.Apache.jasper.JasperException: The absolute uri: http://Java.Sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
    org.Apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.Java:56)
    org.Apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.Java:410)
    org.Apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.Java:117)
    org.Apache.jasper.compiler.TagLibraryInfoImpl.generateTLDLocation(TagLibraryInfoImpl.Java:311)
    org.Apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.Java:152)
    org.Apache.jasper.compiler.Parser.parseTaglibDirective(Parser.Java:410)
    org.Apache.jasper.compiler.Parser.parseDirective(Parser.Java:475)
    org.Apache.jasper.compiler.Parser.parseElements(Parser.Java:1425)
    org.Apache.jasper.compiler.Parser.parse(Parser.Java:138)
    org.Apache.jasper.compiler.ParserController.doParse(ParserController.Java:242)
    org.Apache.jasper.compiler.ParserController.parse(ParserController.Java:102)
    org.Apache.jasper.compiler.Compiler.generateJava(Compiler.Java:198)
    org.Apache.jasper.compiler.Compiler.compile(Compiler.Java:373)
    org.Apache.jasper.compiler.Compiler.compile(Compiler.Java:353)
    org.Apache.jasper.compiler.Compiler.compile(Compiler.Java:340)
    org.Apache.jasper.JspCompilationContext.compile(JspCompilationContext.Java:646)
    org.Apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.Java:357)
    org.Apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.Java:390)
    org.Apache.jasper.servlet.JspServlet.service(JspServlet.Java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.Java:722)

Quelqu'un peut-il me suggérer quelle erreur je fais?

45
Nishit Jain

Retirer le standard.jar. C'est apparemment de l'ancienne version de JSTL 1.0 lorsque les URI TLD étaient sans le /jsp chemin. Avec JSTL 1.2 comme disponible ici vous n’avez pas besoin d’un standard.jar du tout. Seulement le jstl-1.2.jar dans /WEB-INF/lib est suffisant.

Voir également:

43
BalusC

J'ai résolu le même problème. Je viens d'ajouter JSTL-1.2.jar à /Apache-Tomcat-x.x.x/lib et définissez la portée sur fournie dans maven pom.xml:

 <dependency>
     <groupId>jstl</groupId>
     <artifactId>jstl</artifactId>
     <version>1.2</version>
     <scope>provided</scope>
 </dependency>
23
Yauhen

Assurez-vous de ne pas sauter tous bocaux dans

Tomcat.util.scan.StandardJarScanFilter.jarsToSkip

dans Tomcat catalina.properties.

4
MGorgon

J'ai supprimé la portée, puis utilisé une mise à jour Maven pour résoudre ce problème.

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
    **<!-- <scope>provided</scope> -->**
</dependency>

La bibliothèque jstl n'est pas présente dans le dossier Tomcat lib. Nous devons donc l'inclure. Je ne comprends pas pourquoi on nous dit de conserver la portée de servlet-api et de jstl telles qu'elles sont fournies.

2
Nirmalya Kar

L’erreur en question peut également être provoquée par un désactivé JarScanner dans Tomcat/conf/context.xml.

Voir aussi La mise à niveau de Tomcat 8.0.39 à 8.0.41 entraîne des erreurs "Fail to Scan" (- Echec de l'analyse) .

<JarScanner scanManifest="false"/> permet d'éviter les deux problèmes.

1
Vadzim

Si vous utilisez Eclipse et maven pour gérer les dépendances, vous devrez peut-être suivre ces étapes supplémentaires pour vous assurer qu'Eclipse copie correctement les dépendances dépendances Maven non visibles dans WEB-INF/lib (notamment l'assembly de déploiement Application web dynamique)

1
Colin D

si vous utilisez Spring Boot Check in application.propertiese cette propriété est commentée ou supprimez-la si elle existe.

server.Tomcat.additional-tld-skip-patterns = *. jar

0
Ahmad R. Nazemi

Si vous utilisez le projet maven, il vous suffit d'ajouter le fichier jstl-1.2 dans votre dépendance. Si vous ajoutez simplement le fichier JAR à votre projet, il est possible que le fichier JAR ne soit pas ajouté à l'artefact de projet de votre projet. Vous devez simplement ajouter le fichier jar dans le fichier WEB-INF/lib.

enter image description here

Voici à quoi devrait ressembler votre projet lorsque jstl n'est pas ajouté à l'artefact. Appuyez simplement sur le bouton de réparation et intellij ajoutera le fichier jar dans le chemin mentionné ci-dessus. Exécutez le projet et bang.

0
Sayantan Dey

Cela peut être dû aux dépendances transitives.

Essayez d’ajouter ou de supprimer la portée de la bibliothèque JSTL.

Cela a fonctionné pour moi!

0
Gru