You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat 9.0.69添加跳过扫描JAR后仍无法启动求助

问题分析与解决方案

核心异常:Servlet API版本不兼容

java.lang.ClassCastException: class org.springframework.web.servlet.DispatcherServlet cannot be cast to class jakarta.servlet.Servlet 是导致服务器启动失败的根本原因——你的Spring Web组件依赖的是Jakarta Servlet API(jakarta.servlet.*),但Tomcat 9.0.x仅支持传统Java EE规范的Servlet API(javax.servlet.*)。

Spring 6.0及以上版本已全面切换到Jakarta EE规范,不再兼容javax包的Servlet API;而Tomcat 10.x及更高版本才原生支持Jakarta Servlet API。

解决办法二选一:

  • 降级Spring版本:将spring-web、spring-webmvc等核心依赖降到5.x版本,Spring 5.x完全适配Tomcat 9的javax.servlet API。
  • 升级Tomcat版本:如果不想降级Spring,直接把Tomcat换成10.0.x或更高版本。

Jar扫描配置无效的问题

你添加tomcat.util.scan.StandardJarScanFilter.jarsToSkip后无变化,还涉及workspace临时目录的jar,主要是这两个原因:

  • 临时目录的jar是IDE编译/部署时自动生成的,里面大概率混杂了不同版本的Servlet API依赖
  • 项目依赖中同时存在javax.servlet和jakarta.servlet的jar包,导致依赖冲突

处理步骤:

  1. 清理临时文件:删掉workspace下的temp、target(Maven)或build(Gradle)目录,重新编译部署
  2. 排查依赖冲突:确保项目里不同时存在javax.servlet和jakarta.servlet的jar,比如用Maven排除多余依赖:
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>6.0.0</version>
        <exclusions>
            <exclusion>
                <groupId>jakarta.servlet</groupId>
                <artifactId>jakarta.servlet-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  3. 修正Tomcat扫描配置:如果改的是全局conf/catalina.properties,确保配置格式正确:
    tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar,${catalina.base}/work/**/*.jar
    
    也可以在项目的context.xml里单独配置:
    <Context>
        <JarScanner>
            <JarScanFilter defaultPluggabilityScan="false" jarsToSkip="*.jar"/>
        </JarScanner>
    </Context>
    

验证顺序

先解决Servlet API版本冲突(降级Spring或升级Tomcat),这是服务器能启动的前提;之后清理临时文件重新部署,最后检查日志确认异常是否消失。

内容的提问来源于stack exchange,提问作者utente1234567890

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:05:15