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

Tomcat10部署Servlet提交表单触发ExceptionInInitializerError如何解决

问题根因
  • 核心API不兼容:Tomcat 10及以上版本完成了Java EE到Jakarta EE的迁移,所有Servlet相关API的包名从原来的javax.servlet.*全部改为jakarta.servlet.*。你当前的AddServlet代码导入的是旧版本javax.servlet下的HttpServlet、ServletRequest等类,和Tomcat 10运行环境提供的API完全不匹配,导致类加载失败触发ExceptionInInitializerError,Servlet容器无法完成Servlet实例化。
  • 配置遗漏:你没有给AddServlet添加访问路径映射配置,既没有加@WebServlet("/add")注解,也没有在web.xml中配置对应的Servlet映射,Tomcat无法将/add请求和对应Servlet类绑定。
解决方案
  1. 替换Servlet API依赖
    如果是Maven项目,把原来的javax.servlet依赖替换为适配Tomcat 10的jakarta.servlet依赖:
<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>5.0.0</version>
    <scope>provided</scope>
</dependency>
  1. 修正AddServlet的包导入与配置
    把代码顶部所有import javax.servlet.*的导入语句全部替换为import jakarta.servlet.*,同时添加路径映射注解,修正后完整代码如下:
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import java.io.IOException;

@WebServlet("/add")
public class AddServlet extends HttpServlet {
    public AddServlet() {
    }

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        int n1 = Integer.parseInt(req.getParameter("num1"));
        int n2 = Integer.parseInt(req.getParameter("num2"));

        int out = n1 + n2;
        System.out.println("Output: " + out);
    }
}
  1. 检查部署配置
    确认IntelliJ的Tomcat运行配置中,项目 artifacts 已经正确部署,WEB-INF/classes目录下已经编译生成了AddServlet的class文件。
  2. 可选降级方案
    如果不想修改API包名,可以降级使用Tomcat 9及以下版本,这些版本仍然兼容javax.servlet API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:36:01