Jsf 无法在Tomcat 7中初始化FacesServlet-ClassNotFoundException

Jsf 无法在Tomcat 7中初始化FacesServlet-ClassNotFoundException,jsf,tomcat,jsf-2,classnotfoundexception,Jsf,Tomcat,Jsf 2,Classnotfoundexception,我正在JSF中尝试一个简单的hello world应用程序,但基于tomcat在启动时抛出的异常,我发现FacesServlet没有得到初始化。我有所需的jar文件myfacesapi、bundle、impl和commons beanutils、codec、collections、digester、logging。除此之外,我还阅读了关于的另一个问题,因此我还需要jsf-api.jar和jsf impl.jar,我还将它们放在WEB-INF/lib中并添加到构建路径中 还是不走运。我正在Ubun

我正在JSF中尝试一个简单的hello world应用程序,但基于tomcat在启动时抛出的异常,我发现
FacesServlet
没有得到初始化。我有所需的
jar
文件
myfacesapi、bundle、impl
和commons beanutils、codec、collections、digester、logging。除此之外,我还阅读了关于的另一个问题,因此我还需要
jsf-api.jar和jsf impl.jar
,我还将它们放在
WEB-INF/lib
中并添加到构建路径中

还是不走运。我正在Ubuntu上开发,使用Eclipse和Tomcat7

这是我的
web.xml


厄运
JavaServerFaces
javax.faces.PROJECT_阶段
发展
faces/welcome.xhtml
Facesservlet
javax.faces.webapp.FacesServlet
1.
Facesservlet
/面孔/*
Facesservlet
*.jsf
Facesservlet
*.面孔
Facesservlet
*.xhtml
这是个例外

java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
    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.StandardWrapper.loadServlet(StandardWrapper.java:1062)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1010)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4935)
    at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5262)
    at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5257)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)

两周后我找到了答案。最终还是很简单。你需要把两者都抄下来

jsf-api.jar
jsf-impl.jar

到tomcat
lib
。在
项目
库中使用它似乎不起作用。

我遇到了同样的问题,使用EclipseJuno和Tomcat7-Tomee1.6.0

我想使用mojarra 2.0.3,在服务器部署中发现了许多问题。我已经解决了在Tomcat库中删除myfaces-*.jar的问题;然后在Tomcat目录中添加mojarra库,然后启动服务器。现在一切都好了,它在运行

在许多配置更改之后,我发现真正起作用的是安装在Tomcat目录中的库,直接忽略Eclipse配置。也许是虫子


最后,我自己手动更改Tomcat库,解决了我的问题。我认为这在将来不再是一个问题。

此依赖项包含必需的库,可能会解决您的问题

'org.glassfish:javax.faces:2.3.0'

添加以下依赖项可以解决此问题。我在web.xml中创建了一个带有JSF依赖项的webapp。因此,我们必须将这些添加到pom.xml中才能解决问题

    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.1.7</version>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.1.7</version>
    </dependency>

com.sun.faces
JSFAPI
2.1.7
com.sun.faces
jsf impl
2.1.7

使用您需要的任何版本。

显然,您的Eclipse配置严重混乱。我建议重新安装EclipseforJavaEE,并且不要更改它的任何设置,除非您真正理解了这个设置到底在做什么。请注意,将这些lib放在Tomcat的lib中不是一个解决方案,而是一种变通方法。真正的解决方案是将这些lib放在webapp的
/WEB-INF/lib
中。这部分不起作用是一个你仍然需要解决的问题。@BalusC感谢这个坏消息,但目前这对我来说是可行的,我真的很想学习一些jsf:)我希望你记住,你不应该解决这个问题以及它对jsf的所有未来后果,而是对恶劣的环境。您应该有一个良好的开发和运行时环境作为开始。将
javax.faces-2.2.0.jar
(from)添加到WEB-INF/lib为我解决了这个问题。请注意,接受的答案是在Tomcat上安装JSF的错误方法。要了解正确的方法,请参阅我们的JSFWiki页面:版本已经有8年了!!!!!由于这一点,最好的答案不是使用Maven。