动态Web应用程序,Eclipse,JSF中的异常java.lang.NoClassDefFoundError

时间:2012-07-04 12:00:30

标签: eclipse jsf xhtml noclassdeffounderror

当我正在运行我的应用程序时,当我按下按钮并且我重定向到另一个xhtml页面时,一切都很好。然后eclipse控制台,直到我停止服务器显示:

SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/ChatAzure] threw exception [javax/servlet/jsp/jstl/core/Config] with root cause
java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
    at com.sun.faces.application.view.JspViewHandlingStrategy.executePageToBuildView(JspViewHandlingStrategy.java:345)
    at com.sun.faces.application.view.JspViewHandlingStrategy.buildView(JspViewHandlingStrategy.java:154)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

我用: eclipse,jsf2-1-7,jstl-1.2.jar,Tomcat v0.7。 我不知道出了什么问题,我需要帮助。

1 个答案:

答案 0 :(得分:9)

上述类是JSTL的一部分。这通常已由完整的Java EE容器提供,但在Tomcat中不是作为准系统JSP / Servlet容器提供的。您需要自己提供JSTL以及Web应用程序。它最终将被放置在webapp的运行时类路径中。

您正确地提到jstl-1.2.jar(我认为它正是您在our JSTL wiki page中找到的那个),但是这个问题表明它显然没有被放置在正确的位置。您需要将其放在Web项目的/WEB-INF/lib文件夹中。此文件夹由webapp的默认运行时类路径覆盖。没有什么需要做的了。如果您曾试图解决项目的 Build Path 属性,那么您应该撤消所有这些尝试。


无关具体问题:为什么还在使用旧版JSP?自JSF 2.0以来,它一直被弃用并由Facelets(XHTML)继承。在学习JSF时,确保您正在阅读最新的JSF 2.x资源而不是JSF 1.x资源。