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

如何在Apache Tomcat 10上运行Java Server Faces及配置报错解决

异常根因

java.lang.ClassNotFoundException: com.sun.faces.util.Util报错是JSF实现依赖配置错误导致,具体问题出在pom.xml的两处错误配置:

  1. 你引入的Mojarra(JSF官方参考实现,对应依赖org.glassfish:jakarta.faces)加了<optional>true</optional>参数,项目打包时该依赖不会被打入war包,而Apache Tomcat本身没有内置JSF实现,运行时自然找不到对应的实现类。
  2. 依赖版本不兼容:你使用的父pom是Jakarta EE 9.1.0版本,但引入了4.0.0-M1版本的Mojarra,该版本是适配Jakarta EE 10的测试版,和你当前的基础环境不匹配,同时冗余引入了jakarta.faces:jakarta.faces-api接口包,存在依赖冲突隐患。
修复步骤
  • 移除冗余的jakarta.faces:jakarta.faces-api依赖,你已经引入了全量的jakarta.jakartaee-api:9.1.0,其中已经包含了JSF接口定义,无需单独引入。
  • 修改Mojarra依赖配置,去掉optional参数,替换为适配Jakarta EE 9.1的稳定版本:
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>jakarta.faces</artifactId>
    <version>3.0.2</version>
    <scope>runtime</scope>
</dependency>
  • 检查web.xml中Faces Servlet的配置,确保使用Jakarta EE 9+的正确全类名,不要使用旧的javax命名空间下的类:
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
  • 清理本地Maven缓存,重新执行mvn clean package打包后部署到Tomcat即可解决该异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:24:01