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

PrimeFaces11+JDK17+Tomcat10.1.7部署后访问404且无日志报错

PrimeFaces 11 + Tomcat 10.1.7 404错误排查修复

问题背景

使用PrimeFaces 11、JDK 17、Tomcat 10.1.7、Maven 3.8.8创建名为pf2的PrimeFaces应用,WAR包已成功部署到Tomcat,但访问http://localhost:8080/pf2/时出现HTTP 404错误,且控制台/日志无报错信息。

核心问题分析

Tomcat属于Servlet容器,本身不包含Jakarta Faces(JSF)的实现类,你的pom.xml仅引入了Jakarta EE API(jakarta.jakartaee-api),但该依赖是provided范围,意味着运行时需要容器提供实现,而Tomcat并没有提供JSF实现,导致FacesServlet无法初始化,最终引发404。此外还有几处配置不匹配当前技术栈的问题,一并修复:

具体修复步骤

1. 添加Jakarta Faces(Mojarra)实现依赖

在pom.xml的<dependencies>中添加适配Jakarta EE 10的Mojarra依赖:

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>jakarta.faces</artifactId>
    <version>4.0.1</version>
</dependency>

2. 修正Maven编译版本

JDK用的是17,但maven-compiler-plugin指定的release是11,需同步改为17,并升级插件版本以支持JDK17:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
    <configuration>
        <release>17</release>
    </configuration>
</plugin>

3. 更新web.xml到Servlet 5.0版本

Tomcat 10.1对应Servlet 5.0,原web.xml的4.0版本不匹配,更新schema和版本:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    
    <display-name>My PrimeFaces Application</display-name>
    
    <context-param>
        <param-name>primefaces.THEME</param-name>
        <param-value>ui-lightness</param-value>
    </context-param>
    
    <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>
    
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    
    <welcome-file-list>
        <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

4. 验证页面路径

确保index.xhtml放在项目src/main/webapp根目录下,而非子文件夹中。

5. 完整修正后的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.test</groupId>
  <artifactId>pf2</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>pf2</name>
  <description>test for primefaces</description>
  
    <dependencies>
        <dependency>
            <groupId>jakarta.platform</groupId>
            <artifactId>jakarta.jakartaee-api</artifactId>
            <version>10.0.0</version>
            <scope>provided</scope>
        </dependency>
        
        <!-- PrimeFaces Jakarta版本 -->
        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>11.0.0</version>
            <classifier>jakarta</classifier>
        </dependency>
        
        <!-- 添加JSF实现Mojarra -->
        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>jakarta.faces</artifactId>
            <version>4.0.1</version>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.11.0</version>
                <configuration>
                    <release>17</release>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.2</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
  
</project>

验证修复

  1. 执行mvn clean package重新生成WAR包
  2. 重新部署到Tomcat
  3. 访问http://localhost:8080/pf2/或直接访问http://localhost:8080/pf2/index.xhtml确认页面正常显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:42:50