web-dev-qa-db-ja.com

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

Sitemeshを使用してページを装飾しています。これにはJSPページを使用しています。 <c:if>条件タグを使用するまで、ページは正常に機能しました。 WEB-INF/libフォルダーにjstl-impl-1.2.jarおよびsitemesh-3.0-alpha-1.jarファイルがあります。 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" %>

Java 6.でTomcat 7.0を使用しています。Eclipseで新しい動的Webプロジェクトを作成したとき、動的Webモジュールのバージョンを2.4に設定します。ページには<c:set/>タグがあります。正常に動作していますが、if条件タグを使用すると、次のエラーが表示されます。

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

この例外は、JSTL APIがランタイムクラスパスにないことを示しています。 JSTL実装のみを持っているようです。それを削除して、代わりにAPIとimplの両方をバンドルした jstl-1.2.jar を使用することをお勧めします。

さらに、web.xmlルート宣言をServlet 3.0仕様に準拠するように更新することもお勧めします。 JSTL 1.2には、少なくともServlet 2.5が必要であるため、Servlet 2.4をターゲットとするプロジェクトではうまく機能しません。 Tomcat 7はServlet 3.0コンテナーであり、Servlet 3.0は2.5を超える多くの新しいクールな機能を提供するので、私はそれを選びます。

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

それに応じて、プロジェクトのプロパティで動的Webプロジェクトファセットバージョンを修正することを忘れないでください。

こちらもご覧ください:

56
BalusC