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

使用MyFaces 2.3替代Mojarra启动Tomcat时遇404错误求助

排查MyFaces 2.3 + Tomcat启动后404错误的步骤

嘿,刚上手JSF 2.3和MyFaces是吧?遇到Tomcat跑项目时出404确实挺闹心的,我帮你梳理几个关键排查点,一步步来解决:

1. 补全并检查web.xml的核心配置

你贴的web.xml内容被截断了,这大概率是问题根源之一。JSF必须通过FacesServlet来处理请求,所以你的web.xml里必须包含这个核心配置。给你一个标准的基础配置示例:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!-- 配置JSF核心Servlet -->
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.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> <!-- 所有xhtml请求都交给JSF处理 -->
    </servlet-mapping>

    <!-- 开发阶段参数,方便调试 -->
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
</web-app>

重点提醒:你的访问URL必须匹配这个url-pattern,比如要访问index.xhtml,不能直接输index.jsp或者不带后缀的路径。

2. 确认MyFaces jar包的部署位置

  • 确保myfaces-api-2.3.0.jar和myfaces-impl-2.3.0.jar放在项目的WEB-INF/lib目录下,不要放到Tomcat的全局lib文件夹里,否则会引发类加载冲突。
  • 在Eclipse中,右键项目 → Properties → Deployment Assembly,检查这两个jar包是否已经被添加到部署列表中,否则Tomcat部署时不会把它们打包进去。

3. 核对访问URL的正确性

  • 先确认Tomcat中项目的上下文路径:Eclipse的Servers视图里,右键你的Tomcat服务器 → Add and Remove,选中你的项目后,右侧会显示上下文路径(比如/my-jsf-project)。
  • 访问URL应该是http://localhost:8080/[上下文路径]/[你的xhtml页面],比如http://localhost:8080/my-jsf-project/index.xhtml,别直接访问根路径http://localhost:8080。
  • 还要确认你的项目里确实存在对应的xhtml页面,比如index.xhtml要放在WebContent(非Maven项目)或src/main/webapp(Maven项目)目录下。

4. 查看Tomcat启动日志找线索

404有时候是表面现象,背后可能有初始化失败的问题。打开Tomcat的logs/catalina.out或者Eclipse的Console视图,看看有没有报错信息:

  • 比如ClassNotFoundException:说明jar包没部署到位,或者版本不对。
  • 比如FacesServlet初始化失败:可能是web.xml配置有误,或者MyFaces版本和Tomcat不兼容。

5. 确认Tomcat版本兼容性

JSF 2.3需要Servlet 4.0的支持,所以你的Tomcat版本必须是9.0及以上(Tomcat 9支持Servlet 4.0,Tomcat 8.5只支持Servlet 3.1,会出现兼容性问题)。如果用的是Tomcat 7或更早版本,直接换Tomcat 9吧。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:52:57