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)当我试图使用Faces部署应用程序时,我得到了这个堆栈跟踪。这意味着没有可用的FacesServlet,但显然并非如此,因为这些库在战争中是可用的。
我一点也不知道可能出了什么问题。正如标题中所述,我正在使用Tomcat 7.0.37。
发布于 2013-03-03 15:21:01
这个问题很可能与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的正常Java语义加载WAR中库WAR中包含的任何资源。正如Java许可协议中所描述的那样,不属于Java产品一部分的servlet容器不应该允许应用程序覆盖Java平台类,例如java.*和javax.*名称空间中的类,而Java不允许修改这些类。容器不应该允许应用程序覆盖或访问容器的实现类。还建议实现应用程序类加载器,以便优先加载包装在WAR中的类和资源,而不是驻留在容器范围的库JAR中的类和资源。实现还必须保证,对于部署在容器中的每个web应用程序,对Thread.currentThread.getContextClassLoader()的调用都必须返回实现本节中指定的契约的ClassLoader实例。此外,ClassLoader实例必须是每个已部署的web应用程序的单独实例。在对web应用程序进行任何回调(包括侦听器回调)之前,容器必须设置前面描述的线程上下文ClassLoader,并在回调返回后将其设置为原始ClassLoader。
清理您的依赖!
https://stackoverflow.com/questions/15185300
复制相似问题