webentwicklung-frage-antwort-db.com.de

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

Ich benutze Sitemesh, um die Seiten zu dekorieren. Ich benutze dafür eine JSP-Seite. Die Seite hat gut funktioniert, bis ich das <c:if> Bedingter Tag. Ich habe die Dateien jstl-impl-1.2.jar & sitemesh-3.0-alpha-1.jar im Ordner WEB-INF/lib. Ich habe folgende Tag-Bibliotheksdeklarationen auf der JSP-Seite:

<%@ 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" %>

Ich verwende Tomcat 7.0 mit Java 6. Als ich das neue dynamische Webprojekt in Eclipse erstellte, stellte ich die Version des dynamischen Webmoduls auf 2.4 ein. Die Seite hat <c:set/>-Tags funktionieren einwandfrei, aber wenn ich das if-bedingte Tag verwende, wird der folgende Fehler angezeigt:

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

Diese Ausnahme deutet darauf hin, dass die JSTL-API im Laufzeitklassenpfad fehlt. Sie scheinen nur den JSTL-Impl zu haben. Ich schlage vor, es zu entfernen und stattdessen jstl-1.2.jar zu verwenden, das sowohl die API als auch den impl enthält.

Außerdem würde ich empfehlen, Ihre Root-Deklaration web.xml Zu aktualisieren, um die Servlet 3.0-Spezifikation zu erfüllen. Für JSTL 1.2 ist mindestens Servlet 2.5 erforderlich, sodass es mit einem auf Servlet 2.4 ausgerichteten Projekt nicht sehr gut funktioniert. Da Tomcat 7 ein Servlet 3.0-Container ist und Servlet 3.0 viele neue coole Funktionen über 2.5 bietet, würde ich mich dafür entscheiden.

<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">

Vergessen Sie nicht, die Facettenversion Ihres dynamischen Webprojekts in den Projekteigenschaften entsprechend zu korrigieren.

Siehe auch:

56
BalusC