Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tomcat 7.0.37 JSF应用程序部署类NotFound FacesServlet_Jsf_Maven_Tomcat7_Classnotfound - Fatal编程技术网

Tomcat 7.0.37 JSF应用程序部署类NotFound FacesServlet

Tomcat 7.0.37 JSF应用程序部署类NotFound FacesServlet,jsf,maven,tomcat7,classnotfound,Jsf,Maven,Tomcat7,Classnotfound,当我尝试使用FacesServlet部署应用程序时,我得到了这个stacktrace。 这意味着没有FacesServlet可用,但显然不是这样,因为这些库在战争中可用 jsf-api-2.2.0-m09.jar jsf-impl-2.2.0-m09.jar javaee-web-api-6.0.jar 我一点也不知道会出什么问题。如标题所述,我运行的是Tomcat 7.0.37。问题最有可能出现在javaee-web-api-6.0.jar上。这个jar包含javax.servlet.*类

当我尝试使用FacesServlet部署应用程序时,我得到了这个stacktrace。 这意味着没有FacesServlet可用,但显然不是这样,因为这些库在战争中可用

  • jsf-api-2.2.0-m09.jar
  • jsf-impl-2.2.0-m09.jar
  • javaee-web-api-6.0.jar

我一点也不知道会出什么问题。如标题所述,我运行的是Tomcat 7.0.37。

问题最有可能出现在
javaee-web-api-6.0.jar上。这个jar包含
javax.servlet.*
类。当Tomcat在这个jar中找到它们时,它会阻止jar进行类加载。这意味着这个jar中根本无法加载任何类!其中包括
javax.faces.webapp.FacesServlet
。见servlet规范(3.0),第10.7.2节:

容器用于在WAR中加载servlet的类加载器必须允许开发人员使用getResource按照正常的JavaSE语义加载WAR中的库JAR中包含的任何资源如Java EE许可协议中所述,不属于Java EE产品一部分的servlet容器不应允许应用程序覆盖Java SE平台类,例如Java.*和javax.*名称空间中的类,Java SE不允许修改这些类。容器不应允许应用程序重写或访问容器的实现类。还建议实现应用程序类装入器,以便装入WAR中打包的类和资源,而不是装入容器范围的库JAR中的类和资源。实现还必须保证,对于容器中部署的每个web应用程序,对Thread.currentThread.getContextClassLoader()的调用必须返回实现本节中指定的约定的ClassLoader实例。此外,ClassLoader实例必须是每个已部署web应用程序的单独实例。在对web应用程序进行任何回调(包括侦听器回调)之前,容器需要如上所述设置线程上下文类加载器,并在回调返回后将其设置回原始类加载器


清理你的依赖关系

例外不会说谎。这些库在战争的
/WEB-INF/lib
中肯定是不存在的。我知道你在用Maven。提取并探索Maven制作的战争,您将看到。相应地重新解释问题;这不是JSF的问题,而是Maven的问题。JAR的列表是WAR内部的列表(
PROJECT/target/PROJECT.WAR/WEB-INF/lib/
),如问题所述。这就是发布这篇文章的确切原因,你是对的,尽管例外情况并不存在。我已经使用另一个项目尝试了这一点,但Tomcat仍然从上面抛出错误(从第一个项目)。即使此应用程序不再部署?您还没有清理tomcat安装,这就是为什么您从第一个项目中得到一个异常。这意味着我根本无法使用
javax.servlet
中的任何类?不。这意味着您不应该在战争中打包它们。它们由servlet容器提供给您。检查。啊,像这样。非常感谢。将清除我的依赖项。在您提到清理tomcat安装的另一条评论中,我应该如何摆脱旧的部署?从
/work
目录中删除文件夹(我是Tomcat新手)?通常,这意味着您的旧war位于服务器的上下文查找路径中。它包括Tomcat本身的
webapps
文件夹。但是,举例来说,Eclipse将应用程序部署到
wtpwebapps
。。。所以检查war文件是否存在。非常有用。ApacheTomcat9.0.3、libJavaEEAPI6也面临同样的情况。
Mar 03, 2013 12:09:05 PM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet Faces Servlet as unavailable
Mar 03, 2013 12:09:05 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /mavenproject1 threw load() exception
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1713)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1558)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:527)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:509)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:137)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5033)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5317)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:657)
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1637)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    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:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)