Jsf java.lang.ClassNotFoundException:com.sun.faces.config.ConfigureListener

Jsf java.lang.ClassNotFoundException:com.sun.faces.config.ConfigureListener,jsf,tomcat,classnotfoundexception,Jsf,Tomcat,Classnotfoundexception,我们是三个人在开发一个JSF项目,我们以前从未接触过JSF。奇怪的是,对于从SVN中检出的相同数据,其中一名团队成员每次使用Tomcat7.0.27时都会收到404错误 当Tomcat(在Eclipse中使用)启动时,会写出以下日志: 01.06.2012 11:45:16 org.apache.catalina.core.AprLifecycleListener init INFO: The APR based Apache Tomcat Native library which allows

我们是三个人在开发一个JSF项目,我们以前从未接触过JSF。奇怪的是,对于从SVN中检出的相同数据,其中一名团队成员每次使用Tomcat7.0.27时都会收到404错误

当Tomcat(在Eclipse中使用)启动时,会写出以下日志:

01.06.2012 11:45:16 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: ......
01.06.2012 11:45:16 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:SnapManCloud' did not find a matching property.
01.06.2012 11:45:16 org.apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
01.06.2012 11:45:16 org.apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
01.06.2012 11:45:16 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 677 ms
01.06.2012 11:45:16 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
01.06.2012 11:45:16 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.12
01.06.2012 11:45:17 org.apache.catalina.core.StandardContext listenerStart
FATAL: Error configuring application listener of class com.sun.faces.config.ConfigureListener
java.lang.ClassNotFoundException: com.sun.faces.config.ConfigureListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4638)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5204)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5199)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    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)
01.06.2012 11:45:17 org.apache.catalina.core.StandardContext listenerStart
FATAL: Skipped installing application listeners due to previous error(s)
01.06.2012 11:45:17 org.apache.catalina.core.StandardContext startInternal
FATAL: Error listenerStart
01.06.2012 11:45:17 org.apache.catalina.core.StandardContext startInternal
FATAL: Context [/SnapManCloud] startup failed due to previous errors
01.06.2012 11:45:17 org.apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["http-bio-8080"]
01.06.2012 11:45:17 org.apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
01.06.2012 11:45:17 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1279 ms
我们正在使用Mojarra 2.0.3作为JSF实现,它已经被Eclipse包含在项目中(并且可能包含在类路径中)

实际上,
web.xml

<listener>
     <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>

com.sun.faces.config.ConfigureListener

有人从哪里开始寻找错误吗?另外,如果需要其他信息,请告诉我。

JSF通常捆绑在成熟的Java EE应用服务器中,如GlassFish、JBoss as/EAP、WildFly、WebSphere、WebLogic等。但是,Tomcat是一个简单的JSP/Servlet容器,它只捆绑JSP和Servlet API,而不捆绑JSF API

如果您想在Tomcat上使用JSF,那么您需要将JSF库与webapp捆绑在它的
/WEB-INF/lib
文件夹中,或者通过将JSF库放在它的
/lib
文件夹中在Tomcat中安装JSF。显然,该应用程序是为真正的JavaEE应用程序服务器设计的,因此没有将JSF库捆绑在
/WEB-INF/lib

有两种JSF实现可用,和。
com.sun.faces
包表示Mojara,因此下载该包并将其放入webapp的运行时类路径(即webapp的
/WEB-INF/lib
或Tomcat的
/lib


另一个可能的原因是您将该项目部署到使用MyFaces而不是Mojarra的JavaEE应用服务器上,而该项目最初显然是为Mojarra开发的。那个听众就是莫哈拉特有的。在这种情况下,最好从
web.xml
中删除整个
条目

在任何情况下,Mojarra的
ConfigureListener
web.xml
中的显式注册实际上只是为了解决GlassFish v3和Jetty等在Mojarra的TLD文件中找不到监听器的老问题。当部署到一个合适的服务器时,整个
条目是不必要的

另见:

在Tomcat的
/lib
中删除JSF JAR有帮助。非常感谢。您可以添加关于如何使用Eclipse将下载的Mojarra.jar添加到项目中的说明吗?这将非常有帮助。@problemofficer:答案是:“将它放在webapp的运行时类路径中(即,放在webapp的/WEB-INF/lib或Tomcat的/lib中)”。通常的方法是将其放入project的/WEB-INF/lib文件夹中。