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

Tomcat 10.x+JSF 3.0启动报错:javax.faces.webapp.FacesServlet类未找到

解决Tomcat 10.1.20 + JDK21下JSF启动报错java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet

问题根源

Tomcat 10.x 基于 Jakarta EE 9+ 规范,彻底移除了对javax.*命名空间API的支持,全部替换为jakarta.*命名空间。而旧版JSF库使用的是javax.faces包路径,导致Tomcat无法找到对应的类。

解决方案

1. 替换JSF依赖为Jakarta版本

在pom.xml中移除所有旧版javax.faces相关依赖,替换为Jakarta EE兼容的JSF实现(以Mojarra为例):

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>jakarta.faces</artifactId>
    <version>4.0.1</version> <!-- 适配JDK21与Tomcat10.1的稳定版本 -->
</dependency>

注:MyFaces的Jakarta版本依赖为org.apache.myfaces.core:myfaces-api和org.apache.myfaces.core:myfaces-impl,版本选择4.x即可。

2. 修改web.xml中的JSF配置

将所有javax.faces相关的配置项替换为jakarta.faces命名空间:

  • 调整FacesServlet类路径:
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <!-- 替换前:javax.faces.webapp.FacesServlet -->
    <servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
  • 调整上下文参数(如项目阶段配置):
<context-param>
    <!-- 替换前:javax.faces.PROJECT_STAGE -->
    <param-name>jakarta.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>

3. 确保JDK21编译配置正确

在pom.xml的build节点中配置Maven编译插件,适配JDK21:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <source>21</source>
                <target>21</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

4. 清理并重新构建项目

执行以下Maven命令,清理旧依赖并重新打包:

mvn clean install

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:12:43