WDHK 2025-04-20 21:28 采纳率: 87.5%
浏览 21
已结题

关于#java#的问题:Tomcat 版本是 9.0.104(相关搜索:服务器)

Tomcat 版本是 9.0.104。
Java 版本: 1.8.0_121-b13
IntelliJ IDEA 2021.1.3 x64
Tomcat 服务器无法找到以下两个类:
org.springframework.web.context.ContextLoaderListener
org.springframework.web.util.IntrospectorCleanupListener

  • 写回答

5条回答 默认 最新

  • nntxthml 2025-04-21 08:59
    关注

    这个问题本质上是Spring框架的核心类未正确加载导致的,通常发生在Tomcat部署Spring项目时。我来帮你一步步分析原因和解决方案。

    首先需要明确的是,这两个类都属于spring-web模块,ContextLoaderListener是Spring Web应用的启动入口,负责初始化根应用上下文;IntrospectorCleanupListener则是用来清理JavaBeans Introspector缓存的。它们找不到的根本原因就是相关jar包没有正确部署到Tomcat的classpath中。

    检查你的项目结构,重点看WEB-INF/lib目录下是否包含spring-web-xxx.jar(xxx对应你的Spring版本)。在IntelliJ IDEA中,需要确保:1)项目使用Maven/Gradle构建时,spring-web依赖的scope应该是compile(默认值);2)使用Artifacts部署时,要把所有依赖库打包进WEB-INF/lib。有个常见陷阱是开发者只在开发依赖中添加了spring-web,但部署配置漏掉了库文件。

    对于Maven项目,建议检查pom.xml是否有类似配置:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.3.23</version> <!-- 版本需与其他Spring组件一致 -->
    </dependency>
    

    如果确认依赖配置正确,但问题依旧,可能是IDE的部署配置有问题。在IntelliJ IDEA的Run/Debug Configurations里,检查Tomcat配置的Deployment选项卡,确保"Build Artifact"选择了包含所有依赖的war包。也可以尝试手动把生成的war包解压,检查WEB-INF/lib目录的实际内容。

    特殊情况下,如果你使用了Spring Boot,需要注意其内嵌Tomcat机制与传统部署方式的区别。Spring Boot项目应该用spring-boot-starter-web依赖,并通过SpringBootServletInitializer启动,此时不需要手动配置这些Listener。

    最后提醒版本兼容性问题:Spring 5.x要求Java 8+,而你的Java 1.8.0_121已经比较旧(2017年版本),建议至少升级到1.8.0_202以上。Tomcat 9.0.x与Spring 5.x是兼容的,但最好保持Spring全家桶版本一致(比如都用5.3.x系列)。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 4月29日
  • 已采纳回答 4月21日
  • 创建了问题 4月20日