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

Tomcat 10启动Spring MVC Maven项目无法加载WebApplicationInitializer问题

问题根因
  • 命名空间不兼容:Tomcat 10及更高版本已全面迁移至Jakarta EE规范,Servlet相关类的包名从原来的javax.servlet.*全部改为jakarta.servlet.*。你当前使用的Spring 5.3.12、javax.servlet-api 4.0.1均基于旧的Java EE javax命名空间开发,与Tomcat 10的运行环境不兼容,导致WebApplicationInitializer无法被识别和调用。
  • 项目未成功部署:从你提供的Tomcat运行日志中,仅能看到Tomcat自带的docs、examples、host-manager等默认应用的部署记录,没有你开发的mvc-app项目的部署输出,说明项目并未被成功发布到当前运行的Tomcat实例中。
解决方案

你可以二选一执行:

方案1:降级Tomcat版本(改动最小,推荐)

直接将Tomcat版本降级到9.x系列,Tomcat 9仍使用javax.servlet命名空间,与你当前的依赖完全兼容,无需修改任何代码和pom配置,替换Tomcat后重新部署项目即可。

方案2:升级依赖适配Tomcat 10

如果需要继续使用Tomcat 10,需要做如下改动:

  1. 修改pom.xml中的Servlet依赖为Jakarta版本:
<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>5.0.0</version>
    <scope>provided</scope>
</dependency>
  1. 升级Spring WebMvc版本到6.x及以上,Spring 6才开始支持Jakarta EE规范:
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>6.0.0</version>
</dependency>
  1. 修改AppInitializer类的导入包,将所有javax.servlet替换为jakarta.servlet:
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import org.springframework.web.WebApplicationInitializer;

public class AppInitializer implements WebApplicationInitializer {
    public void onStartup(ServletContext servletContext) throws ServletException {
        System.out.println("<<<<<<<<<<<<<<<<<<<test>>>>>>>>>>>>>>>>>>>");
    }
}
补充检查项
  • 确认你的IDE(Eclipse)的Tomcat配置中,mvc-app项目已经被添加到部署列表中,部署上下文路径配置正确
  • 项目打包后,检查WEB-INF/classes目录下存在你的AppInitializer类对应的class文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:15:01