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

Spring MVC项目遇Java.lang.NoSuchMethodError及servlet-api依赖缺失求助

解决Spring MVC项目中Java.lang.NoSuchMethodError及servlet-api未打包问题

问题根源

你的servlet-api依赖设置了<scope>provided</scope>,这个Maven scope的含义是:该依赖由运行Web应用的容器(比如Tomcat)提供,Maven打包时不会把它复制到WEB-INF/lib目录中。如果运行容器没有提供对应版本的servlet-api,或者容器提供的版本和你依赖的4.0.0不匹配,就会触发NoSuchMethodError。

解决方案

针对不同场景,有以下几种处理方式:

  • 本地开发调试场景:
    如果你用内嵌容器或者本地Tomcat调试,直接把servlet-api的scope改成compile,这样Maven打包时会将它包含到WEB-INF/lib中:

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.0</version>
        <!-- 去掉provided,改为compile(默认就是compile,也可以不写) -->
        <scope>compile</scope>
    </dependency>
    

    注意:生产环境部署时,记得改回provided,避免和容器自带的servlet-api冲突。

  • 容器版本匹配场景:
    确认你的运行容器支持Servlet 4.0规范,比如Tomcat 9.x对应Servlet 4.0。如果你的容器是Tomcat 8.x(对应Servlet 3.1),需要把servlet-api版本降到3.1.0,同时保持provided scope:

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    
  • Maven插件运行场景:
    如果你用tomcat-maven-plugin启动项目,需要在插件配置中指定和依赖匹配的Servlet版本,确保环境一致:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat9-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/springmvc01-base</path>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

内容的提问来源于stack exchange,提问作者平芜尽处外

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:57:03