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

今天在用Eclipse+tomcat6做springMVC+mybatis的项目遇到下面的问题:

2014-5-27 14:55:19 org.apache.catalina.core.StandardContext listenerStart

严重: Error configuring application listener of class org.springframework.web.util.Log4jConfigListener

java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)

at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4149)

at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)

at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)

at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)

at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)

at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)

at org.apache.catalina.core.StandardService.start(StandardService.java:525)

at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)

at org.apache.catalina.startup.Catalina.start(Catalina.java:595)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)

at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

 

        项目用ivy管理的jar包,本人从网上找了n多的解决办法,但都没有适合自己的,于是翻开自己以前的笔记,没想到居然找到了解决办法。

      

        先说说网上的解决办法,多数说的都是关于spring的jar包问题,要么少jar,要么jar没有导入lib,如果是maven就是没有加载依赖;更多的也有说是tomcat缓存问题,让删除建的server,clean一下工程,然后重新发布。但这些都没有解决我的问题

 

       我的解决办法:右键工程-Properties-Deployment Assembly,如下图:



       点击右边的add按钮,弹出下图:



      选中Java Build Path Entries,点击next,我这里是ivy管理jar,出现下图(其他方式也是类似的):



        选中Ivy,点击Finish,然后重新启动项目即可

### 关于 `java.lang.ClassNotFoundException` 的解决方案 当遇到 `java.lang.ClassNotFoundException: org.springframework.web.context.support.ServletRequestHandledEvent` 错误时,通常是因为项目中缺少必要的依赖项或者存在版本不兼容的情况。 #### 1. 检查 Spring 版本 该类 `org.springframework.web.context.support.ServletRequestHandledEvent` 存在于较旧的 Spring 版本中。如果当前使用的 Spring 版本已经废弃了此类,则需要调整代码逻辑以适应新版本的功能[^1]。例如,在 Spring 4.x 或更高版本中,可能不再推荐直接使用此事件类。 #### 2. 添加正确的 Maven 依赖 确保项目的 `pom.xml` 文件中包含了正确的 Spring WebContext 组件依赖。以下是典型的依赖声明: ```xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.10</version> <!-- 替换为实际所需的版本 --> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.10</version> <!-- 确保与 spring-web 版本一致 --> </dependency> ``` 注意:Spring 各模块之间可能存在版本依赖关系,因此建议统一管理所有 Spring 相关组件的版本号[^3]。 #### 3. 验证 web.xml 中的配置 错误也可能由 `web.xml` 文件中的不当配置引发。确认 `<listener>` 节点是否正确引用了 `ContextLoaderListener` 类型。例如: ```xml <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> ``` 如果 Tomcat 报告无法找到上述监听器类,则可能是由于 Spring JAR 文件未被加载到运行时环境所致[^4]。 #### 4. 排查 Classpath 冲突 有时多个不同版本的 Spring 库会被引入同一个项目中,从而导致 NoClassDefFoundError 或 ClassNotFoundException。可以借助工具(如 Maven Dependency Tree 插件)来分析并清理冗余依赖: 命令如下: ```bash mvn dependency:tree -Dverbose=true ``` 通过以上方法定位冲突源,并移除不必要的依赖项。 --- ### 示例修复后的 pom.xml (部分) 假设目标是升级至最新稳定版 Spring Framework: ```xml <!-- Core utilities used by other modules internally --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.10</version> </dependency> <!-- Application context support and integration with Servlet API --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.10</version> </dependency> ``` 完成这些更改之后重新构建项目即可尝试解决问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值