码迷,mamicode.com
首页 > 编程语言 > 详细

java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener

时间:2017-04-29 16:20:01      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:监听   rtu   adapter   lead   rect   架构   错误分析   blog   dex   

在使用spring框架构建一个Web工程的时候,我们需要在web.xml中配置了一个spring的上下文监听器:

技术分享
  1   <!-- 服务器启动时,在Context域中初始化一个applicationContext -->
  2   <listener>
  3     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  4   </listener>
XML Code

随后在启动Tomcat服务器后,Console控制台报错java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener。

异常描述:

技术分享
  1 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
  2 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
  3 	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1858)
  4 	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1701)
  5 	at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:504)
  6 	at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:486)
  7 	at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:113)
  8 	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4984)
  9 	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5584)
 10 	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
 11 	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
 12 	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
 13 	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
 14 	at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1260)
 15 	at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:2002)
 16 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
 17 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
 18 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
 19 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 20 	at java.lang.Thread.run(Thread.java:745)
 21 
Error Code

错误分析:

错误的意思很明确:找不到“ org.springframework.web.context.ContextLoaderListener”这个类,ContextLoaderListener这个类是在spring-web.jar包下,仔细检查了项目jar环境,发现在Web项目下lib导入的spring的jar包中,确实缺少导入一个名为 spring-web-4.3.8.RELEASE.jar 的jar包。然后导入,重新启动Tomcat服务器即可顺利通过。

 

问题补充:

如果在检查了项目jar环境,发现该jar包确实存在,而且也能找到编译后的ContextLoaderListener.class文件。但在启动Tomcat服务器后,Console控制台依旧报错java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener。

问题的原因可能是你导入的仅仅是jar包的引用,例如在eclipse的build path直接引用的jar包(类似快捷方式),没有把jar文件拷贝到lib目录下。即使这种在Java Application中没有问题,但在web Application中也可能会出现找不到类的异常。 

我们知道JVM虚拟机是根据Java ClassLoader(类加载器)决定如何加载Class。  系统默认提供了3个ClassLoader 。Root ClassLoader、ClassPath Loader 和 Ext ClassLoader  。

而web Application使用的是自定义的ClassLoader,而非JVM中的存在的三种ClassLoader。所以它无法识别出我们写在xml文件中的第三方类库的class文件,而只有我们写在src目录下的java文件才能使用。

因此,我们必须要把所需的第三方的类库放入到WEB-INF/lib目录下,web Application 才会识别我们定义在xml中的类。然后再重新启动Tomcat服务器便可顺利通过。

java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener

标签:监听   rtu   adapter   lead   rect   架构   错误分析   blog   dex   

原文地址:http://www.cnblogs.com/justlove/p/6785210.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!