标签:监听 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>
随后在启动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
错误分析:
错误的意思很明确:找不到“ 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