java.lang.ClassNotFoundException: javax.servlet.ServletContainerInitializer

匿名 (未验证) 提交于 2019-12-03 10:24:21

问题:

I was working on writing some servlets and they all worked fine Tomcat had no issue running what so ever. Then I wrote a class file that used JERSEY and when I tried to run it Tomcat wouldn't start. I have the Web development tools plug in installed in Eclipse, everytime I hit compile I get

java.lang.ClassNotFoundException: javax.servlet.ServletContainerInitializer

Here is the output from the console

May 08, 2012 4:51:36 PM 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: C:\Program Files (x86)\Java\jre7\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files (x86)/Java/jre7/bin/client;C:/Program Files (x86)/Java/jre7/bin;C:/Program Files (x86)/Java/jre7/lib/i386;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files\TortoiseSVN\bin;c:\Program Files (x86)\Microsoft SQL Server\90\Tools\bin\;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools;C:\Windows\Microsoft.NET\Framework\v3.5;C:\Windows\Microsoft.NET\Framework\v2.0.50727;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\VCPackages;C:\Python27\Scripts;C:\Program Files (x86)\SSH Communications Security\SSH Tectia\SSH Tectia AUX;C:\Program Files (x86)\SSH Communications Security\SSH Tectia\SSH Tectia AUX\Support binaries;C:\Program Files (x86)\SSH Communications Security\SSH Tectia\SSH Tectia Broker;C:\Program Files (x86)\SSH Communications Security\SSH Tectia\SSH Tectia Client;C:\Program Files\CREDANT\Shield v7.1\;C:\Development Tools\java\eclipse;;. May 08, 2012 4:51:36 PM org.apache.tomcat.util.digester.SetPropertiesRule begin WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Test_Server' did not find a matching property. May 08, 2012 4:51:37 PM org.apache.coyote.AbstractProtocol init INFO: Initializing ProtocolHandler ["http-bio-80"] May 08, 2012 4:51:37 PM org.apache.coyote.AbstractProtocol init INFO: Initializing ProtocolHandler ["ajp-bio-8009"] May 08, 2012 4:51:37 PM org.apache.catalina.startup.Catalina load INFO: Initialization processed in 546 ms May 08, 2012 4:51:37 PM org.apache.catalina.core.StandardService startInternal INFO: Starting service Catalina May 08, 2012 4:51:37 PM org.apache.catalina.core.StandardEngine startInternal INFO: Starting Servlet Engine: Apache Tomcat/7.0.27 May 08, 2012 4:51:37 PM org.apache.catalina.core.ContainerBase startInternal SEVERE: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Test_Server]]     at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)     at java.util.concurrent.FutureTask.get(Unknown Source)     at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1128)     at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:782)     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1566)     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1556)     at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)     at java.util.concurrent.FutureTask.run(Unknown Source)     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)     at java.lang.Thread.run(Unknown Source) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Test_Server]]     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)     ... 7 more Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletContainerInitializer     at java.lang.ClassLoader.defineClass1(Native Method)     at java.lang.ClassLoader.defineClass(Unknown Source)     at java.security.SecureClassLoader.defineClass(Unknown Source)     at java.net.URLClassLoader.defineClass(Unknown Source)     at java.net.URLClassLoader.access$100(Unknown Source)     at java.net.URLClassLoader$1.run(Unknown Source)     at java.net.URLClassLoader$1.run(Unknown Source)     at java.security.AccessController.doPrivileged(Native Method)     at java.net.URLClassLoader.findClass(Unknown Source)     at java.lang.ClassLoader.loadClass(Unknown Source)     at java.lang.ClassLoader.loadClass(Unknown Source)     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)     at java.lang.ClassLoader.loadClass(Unknown Source)     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1626)     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)     at java.lang.Class.forName0(Native Method)     at java.lang.Class.forName(Unknown Source)     at org.apache.catalina.startup.ContextConfig.getServletContainerInitializer(ContextConfig.java:1601)     at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1519)     at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1222)     at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:855)     at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:345)     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)     at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5161)     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     ... 7 more Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContainerInitializer     at java.net.URLClassLoader$1.run(Unknown Source)     at java.net.URLClassLoader$1.run(Unknown Source)     at java.security.AccessController.doPrivileged(Native Method)     at java.net.URLClassLoader.findClass(Unknown Source)     at java.lang.ClassLoader.loadClass(Unknown Source)     at java.lang.ClassLoader.loadClass(Unknown Source)     ... 33 more  May 08, 2012 4:51:37 PM org.apache.catalina.core.ContainerBase startInternal SEVERE: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]     at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)     at java.util.concurrent.FutureTask.get(Unknown Source)     at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1128)     at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     at org.apache.catalina.startup.Catalina.start(Catalina.java:675)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)     at java.lang.reflect.Method.invoke(Unknown Source)     at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1566)     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1556)     at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)     at java.util.concurrent.FutureTask.run(Unknown Source)     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)     at java.lang.Thread.run(Unknown Source) Caused by: org.apache.catalina.LifecycleException: A child container failed during start     at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1136)     at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:782)     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     ... 7 more  May 08, 2012 4:51:37 PM org.apache.catalina.startup.Catalina start SEVERE: Catalina.start:  org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)     at org.apache.catalina.startup.Catalina.start(Catalina.java:675)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)     at java.lang.reflect.Method.invoke(Unknown Source)     at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)     at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     ... 7 more Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)     at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     ... 9 more Caused by: org.apache.catalina.LifecycleException: A child container failed during start     at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1136)     at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     ... 11 more  May 08, 2012 4:51:37 PM org.apache.catalina.startup.Catalina start INFO: Server startup in 416 ms 

How is this caused and how can I solve it?

回答1:

javax/servlet/ServletContainerInitializer is a class in Servlet 3.0 which is not support in Tomcat 6.

You probably have servlet.jar floating around somewhere in your CLASSPATH, it shouldn't be. This really messes up the classloaders since Tomcat's classloaders don't act quite as normal as one expects (see links above). servlet.jar should only be found only once in $CATALINA_HOME/lib.



回答2:

Sometimes if you are running a Tomcat server in Eclipse, the local Tomcat working directory can get jacked up and you have to clear it explicitly. Note that this is NOT the same as doing a Clean build on the project: From the Servers window: Right click on the server you are trying to start->Clean Tomcat work Directory...->OK



回答3:

simple right click on tomcat server then clean the tomcat work directory then clean the tomcat. it will work.



回答4:

A late answer but this may help someone.

I believe this happens because the Jersey was created using a newer java version and you're trying to run it in an older version of java. Either update your java version or download an older version of Jersey that supports your java version.

Window -> Preferences -> Java -> Compiler -> set "Compiler compliance level" to 1.7.  

From Jersey documentation:

Until version 2.6, Jersey was compiled with Java SE 6. This has changes in Jersey 2.7.  Now almost all Jersey components are compiled with Java SE 7 target. It means, that  you will need at least Java SE 7 to be able to compile and run your application  that is using latest Jersey. Only core-common and core-client modules are still  compiled with Java class version runnable with Java SE 6.  


回答5:

I got the same issue today. Eventually it turned out to be that a user library became empty. However the error message shown did not give any hints about that.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!