java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
Tomcat 启动项目报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
一、异常描述:
1 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 2 at org.apache.catalina.loader.WebappClassLoaderBase.loadClass 3 (WebappClassLoaderBase.java:1892) 4 at org.apache.catalina.loader.WebappClassLoaderBase.loadClass 5 (WebappClassLoaderBase.java:1735) 6 at org.apache.catalina.core.DefaultInstanceManager.loadClass 7 (DefaultInstanceManager.java:495) 8 at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged 9 (DefaultInstanceManager.java:477) 10 at org.apache.catalina.core.DefaultInstanceManager.newInstance 11 (DefaultInstanceManager.java:113) 12 at org.apache.catalina.core.StandardContext.listenerStart 13 (StandardContext.java:5026) 14 at org.apache.catalina.core.StandardContext.startInternal 15 (StandardContext.java:5633) 16 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 17 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1700) 18 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1690) 19 at java.util.concurrent.FutureTask.run(FutureTask.java:266) 20 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 21 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 22 at java.lang.Thread.run(Thread.java:748)
二、错误分析:
Java虚拟机是根据 Java ClassLoader (类加载器)决定如何加载Class。
系统默认提供了3个 ClassLoader
Root ClassLoader,ClassPath Loader,Ext ClassLoader
我们也可以编写自己的 ClassLoader,去加载特定环境下的jar文件。
能不能加载jar,加载哪里的jar,是由 ClassLoader 决定的。
问题: 导入的仅仅是jar包的引用,例如在eclipse中通过build path加进user lib……(类似快捷方式)
这种在Java Application中没问题,但在web Application中可能会出现找不到类的异常。
在WEB Application中jar包最好放在webroot或webcontent下的lib文件夹内,特别是xml中用到的jar包。
三、解决方法:
1. jar包放在webroot或webcontent下的lib文件夹内
2. 右击项目名称-Properties--Deployment Assembly--右边点击ADD-Java Build path entries --添加自定义的user-lib