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

Tomcat部署SpringBoot服务请求静态资源报AbstractMethodError求助

问题分析与解决方案

从错误日志可以定位核心问题:

java.lang.AbstractMethodError: Method org/apache/catalina/connector/ResponseFacade.setContentLengthLong(J)V is abstract

日志里的catalina.jar:7.0.99说明实际运行环境是Tomcat7,但你部署的SpringBoot 2.5.x(对应spring-web 5.3.9)依赖Servlet API 4.0,而Tomcat7仅支持Servlet 3.0规范——setContentLengthLong是Servlet 3.1才新增的方法,Tomcat7的ResponseFacade类未实现该方法,导致调用时抛出抽象方法错误。

解决步骤

方案1:确认并使用兼容的Tomcat版本

如果目标是用Tomcat8部署:

  1. 检查服务器上的Tomcat实际版本,确保是Tomcat8.5.x(Tomcat8.0支持Servlet3.1,8.5版本更稳定),避免误装成Tomcat7。
  2. 修正pom.xml中排除内嵌Tomcat的配置,同时添加Tomcat Servlet API依赖(设为provided,避免打包到war包中):
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 引入Tomcat8.5的Servlet API,由容器提供实现 -->
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-servlet-api</artifactId>
    <version>8.5.81</version>
    <scope>provided</scope>
</dependency>
  1. 重新执行mvn clean package生成war包,部署到Tomcat8.5中运行。

方案2:降级SpringBoot版本适配Tomcat7

如果必须使用Tomcat7:

  1. 将SpringBoot版本降级到1.5.x系列(SpringBoot 1.5.x最高支持Tomcat7,对应Servlet3.0规范),修改pom.xml中的父依赖:
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.22.RELEASE</version>
    <relativePath/>
</parent>
  1. 移除之前添加的Tomcat Servlet API依赖,SpringBoot 1.5.x默认依赖的Servlet API版本与Tomcat7兼容。
  2. 重新打包部署到Tomcat7即可。

额外注意

  • 无需修改Tomcat的server.xml文档根路径,SpringBoot的静态资源访问由自身的ResourceHttpRequestHandler处理,修改容器文档根会导致资源路由冲突。
  • 可执行mvn dependency:tree排查项目依赖树,确保没有引入Tomcat7相关的jar包。

内容的提问来源于stack exchange,提问作者Green 绿色

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:15:34