我正在使用Javascript和JSF为网站开发FB登录应用程序。我已在here发布了我的代码。问题是,当我运行我的应用程序时,它不会显示JSF页面,而是抛出以下异常:
Nov 28, 2013 7:21:46 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/FacebookLogin] 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:344)
at com.sun.faces.application.view.JspViewHandlingStrategy.buildView(JspViewHandlingStrategy.java:153)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:99)
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:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
这里有什么问题,如何解决?
答案 0 :(得分:24)
java.lang.NoClassDefFoundError:javax / servlet / jsp / jstl / core / Config
当包名称提示时,提到的类是JSTL的一部分。例外情况清楚地表明,在运行时类路径中找不到所提到的类的类定义文件。即webapp的运行时类路径中缺少Config.class
文件或至少包含该类的JAR文件。
JSTL通常已由完整的Java EE容器提供,例如TomEE,JBoss AS / EAP / WildFly,{{ 3}} / Payara,GlassFish等,但不是由WebLogic和Tomcat等准系统JSP / Servlet容器。对于他们来说,您需要自己提供JSTL以及Web应用程序,就像您为JSF所做的那样(也已经完全由成熟的Java EE容器提供)。
您正面临此异常,因为Facelets的Jetty依赖于JSTL实现JAR文件,而您使用的Tomcat并未随JSTL一起提供。 JSTL是一个独立的库,可以使用<c:xxx>
tags的风格。只需下载并将其放在webapp的/WEB-INF/lib
文件夹中,以及已经放置在那里的JSF JAR文件,这个异常就会消失。 Maven用户可以通过添加以下依赖项(并执行完全重建/重新部署)来实现这一目标:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
或者,只需用真正的Java EE容器替换Tomcat。
答案 1 :(得分:1)
如果有人在尝试为jboss-eap-6.4.0.GA创建springframework-4.0.7-RELEASE模块时遇到此错误,我只想添加我的贡献。我的module.xml
现在包含:
<dependencies>
...
<!-- Contains javax.servlet.jsp.jstl.core.Config -->
<module name="javax.servlet.jstl.api"/>
...
</dependencies>