web-dev-qa-db-fra.com

javax.servlet.ServletException: Java.lang.NoClassDefFoundError: javax / servlet / jsp / jstl / core / ConditionalTagSupport

J'utilise Sitemesh pour décorer les pages. J'utilise une page JSP pour cela. La page a bien fonctionné jusqu'à ce que j'utilise le <c:if> balise conditionnelle. J'ai les fichiers jstl-impl-1.2.jar et sitemesh-3.0-alpha-1.jar dans le dossier WEB-INF/lib. J'ai les déclarations de bibliothèque de balises suivantes dans la page jsp:

<%@ taglib uri="http://Java.Sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://Java.Sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib uri="http://Java.Sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://Java.Sun.com/jsp/jstl/sql" prefix="sql" %>

J'utilise Tomcat 7.0 avec Java 6. Lorsque j'ai créé le nouveau projet Web dynamique dans Eclipse, j'ai défini la version du module Web dynamique sur 2.4. La page contient <c:set/> balises, elles fonctionnent bien, mais lorsque j'utilise la balise if conditionnelle, j'obtiens l'erreur suivante:

javax.servlet.ServletException: Java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSupport
org.Apache.jasper.servlet.JspServlet.service(JspServlet.Java:342)
javax.servlet.http.HttpServlet.service(HttpServlet.Java:722)
org.sitemesh.webapp.WebAppContext.dispatch(WebAppContext.Java:158)
org.sitemesh.webapp.WebAppContext.decorate(WebAppContext.Java:133)
org.sitemesh.BaseSiteMeshContext.decorate(BaseSiteMeshContext.Java:39)
org.sitemesh.webapp.SiteMeshFilter.postProcess(SiteMeshFilter.Java:74)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.bufferAndPostProcess(ContentBufferingFilter.Java:175)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.doFilter(ContentBufferingFilter.Java:126)
org.sitemesh.config.ConfigurableSiteMeshFilter.doFilter(ConfigurableSiteMeshFilter.Java:157)

root cause

Java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSupport
Java.lang.ClassLoader.defineClass1(Native Method)
Java.lang.ClassLoader.defineClassCond(Unknown Source)
Java.lang.ClassLoader.defineClass(Unknown Source)
Java.security.SecureClassLoader.defineClass(Unknown Source)
org.Apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.Java:2820)
org.Apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.Java:1150)
org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1645)
org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1523)
org.Apache.jasper.compiler.Parser.parseCustomTag(Parser.Java:1223)
org.Apache.jasper.compiler.Parser.parseElements(Parser.Java:1450)
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:644)
org.Apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.Java:358)
org.Apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.Java:389)
org.Apache.jasper.servlet.JspServlet.service(JspServlet.Java:333)
javax.servlet.http.HttpServlet.service(HttpServlet.Java:722)
org.sitemesh.webapp.WebAppContext.dispatch(WebAppContext.Java:158)
org.sitemesh.webapp.WebAppContext.decorate(WebAppContext.Java:133)
org.sitemesh.BaseSiteMeshContext.decorate(BaseSiteMeshContext.Java:39)
org.sitemesh.webapp.SiteMeshFilter.postProcess(SiteMeshFilter.Java:74)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.bufferAndPostProcess(ContentBufferingFilter.Java:175)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.doFilter(ContentBufferingFilter.Java:126)
org.sitemesh.config.ConfigurableSiteMeshFilter.doFilter(ConfigurableSiteMeshFilter.Java:157)

root cause

Java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.ConditionalTagSupport
org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1678)
org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1523)
Java.lang.ClassLoader.defineClass1(Native Method)
Java.lang.ClassLoader.defineClassCond(Unknown Source)
Java.lang.ClassLoader.defineClass(Unknown Source)
Java.security.SecureClassLoader.defineClass(Unknown Source)
org.Apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.Java:2820)
org.Apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.Java:1150)
org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1645)
org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1523)
org.Apache.jasper.compiler.Parser.parseCustomTag(Parser.Java:1223)
org.Apache.jasper.compiler.Parser.parseElements(Parser.Java:1450)
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:644)
org.Apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.Java:358)
org.Apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.Java:389)
org.Apache.jasper.servlet.JspServlet.service(JspServlet.Java:333)
javax.servlet.http.HttpServlet.service(HttpServlet.Java:722)
org.sitemesh.webapp.WebAppContext.dispatch(WebAppContext.Java:158)
org.sitemesh.webapp.WebAppContext.decorate(WebAppContext.Java:133)
org.sitemesh.BaseSiteMeshContext.decorate(BaseSiteMeshContext.Java:39)
org.sitemesh.webapp.SiteMeshFilter.postProcess(SiteMeshFilter.Java:74)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.bufferAndPostProcess(ContentBufferingFilter.Java:175)
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.doFilter(ContentBufferingFilter.Java:126)
org.sitemesh.config.ConfigurableSiteMeshFilter.doFilter(ConfigurableSiteMeshFilter.Java:157)
25
Ghost-Man

Cette exception suggère que l'API JSTL est manquante dans le chemin de classe d'exécution. Vous semblez n'avoir que l'impl JSTL. Je suggère de le supprimer et d'utiliser à la place jstl-1.2.jar qui contient à la fois l'API et l'impl.

De plus, je vous recommande également de mettre à jour votre web.xml déclaration racine pour se conformer à la spécification Servlet 3.0. JSTL 1.2 nécessite un minimum de Servlet 2.5, il ne fonctionnera donc pas très bien avec un projet ciblé Servlet 2.4. Comme Tomcat 7 est un conteneur Servlet 3.0 et que Servlet 3.0 offre de nombreuses nouvelles fonctionnalités intéressantes sur 2.5, j'irais pour cela.

<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_3_0.xsd"
    version="3.0">

N'oubliez pas de corriger la version de votre facette de projet Web dynamique en conséquence dans les propriétés du projet.

Voir également:

56
BalusC