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

Jakarta EE9配置H2 Console Servlet报类型不匹配如何解决

问题描述

我当前使用的依赖版本为 jakarta.jakartaee-api 9.1.0 和 H2 2.1.212。
当我尝试在web.xml文件中添加H2 Console Servlet配置时,出现如下错误:

'org.h2.server.web.WebServlet' is not assignable to 'javax.servlet.Servlet,jakarta.servlet.Servlet'

我的web.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="5.0"
         xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd">
    <data-source>
        <name>java:global/dataSource</name>
        <class-name>org.h2.jdbcx.JdbcDataSource</class-name>
        <url>jdbc:h2:mem:test;MODE=LEGACY</url>
    </data-source>

    <servlet>
        <servlet-name>H2Console</servlet-name>
        <servlet-class>org.h2.server.web.WebServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>H2Console</servlet-name>
        <url-pattern>/h2/*</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>jakarta.ws.rs.core.Application</servlet-name>
    </servlet>
    <servlet-mapping>
        <servlet-name>jakarta.ws.rs.core.Application</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>
</web-app>
问题原因

报错的核心原因是Servlet规范包名不兼容:

  • Jakarta EE 9 及以上版本将Servlet API的根包名从旧版的javax.servlet迁移为jakarta.servlet
  • 你使用的H2 2.1.212版本中,org.h2.server.web.WebServlet是基于旧版javax.servlet规范编译的,无法被Jakarta EE 9+的Servlet容器加载识别。
修复方案

你可以根据项目实际情况二选一:

  • 方案1(推荐):升级H2版本至2.2.220及以上。从该版本开始H2官方提供了适配Jakarta Servlet规范的控制台Servlet类,类全限定名为org.h2.server.web.JakartaWebServlet,你只需要将web.xml中H2控制台对应的servlet-class配置替换为该类即可,修改后的配置片段如下:
<servlet>
    <servlet-name>H2Console</servlet-name>
    <servlet-class>org.h2.server.web.JakartaWebServlet</servlet-class>
</servlet>

其余配置不需要改动,重启服务即可正常访问H2控制台。

  • 方案2:如果受项目依赖限制无法升级H2版本,可以将Jakarta EE版本降级至8(对应Servlet 4.0规范,使用javax.servlet包名),同时同步修改web.xml的版本号、命名空间为Jakarta EE 8对应的配置。该方案需要调整项目中所有依赖Jakarta EE 9+新特性的代码,非必要不选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:54:41