JSF应用index.xhtml资源找不到,404请求失败问题求助
解决JSF 2.2应用的404请求未找到错误
这种突然出现的404问题确实让人头疼,结合你描述的情况——5分钟前还正常,新增空白xhtml后出问题,/faces/*路径也失效,我整理了几个排查方向和解决方法:
1. 先确认访问URL是否正确
你提到index.xhtml在WebContent文件夹下,那对应的访问路径要匹配你的Servlet映射:
- 如果web.xml里配置的是
/faces/*映射,访问URL应该是:http://localhost:8080/你的应用上下文名/faces/index.xhtml - 如果新增的空白页面是
test.xhtml,那路径就是/faces/test.xhtml
别漏掉应用上下文名,也别写错页面文件名(注意大小写,服务器对文件名大小写敏感)。
2. 检查web.xml的JSF Servlet配置
之前正常的话,大概率是不小心改动了web.xml的配置。确保FacesServlet的映射正确配置:
<servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> <!-- 确保启动时加载Servlet --> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> <url-pattern>*.xhtml</url-pattern> <!-- 建议加上这个,直接访问xhtml更方便 --> </servlet-mapping>
如果之前的配置被误删或修改,恢复成上面的结构试试。
3. 排查服务器部署与日志
- 先看看服务器控制台有没有报错信息,比如FacesServlet初始化失败、类缺失、配置文件错误等——这些都会导致JSF无法正常处理请求,返回404。
- 尝试重新部署应用:先undeploy掉当前应用,然后clean项目(比如IDE里的Project Clean,或者Maven执行
mvn clean),再重新部署到服务器上。有时候部署缓存会导致文件没有同步。
4. 检查空白xhtml的基本结构
完全空白的xhtml页面可能导致JSF无法正确解析,建议给空白页面加上最基础的JSF标签结构:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html"> <h:head> <title>Blank Page</title> </h:head> <h:body> <!-- 可以留空,但结构要完整 --> </h:body> </html>
没有正确的JSF命名空间和根元素,服务器可能无法识别这是一个JSF页面,从而返回404。
5. 清理IDE缓存
有些IDE(比如Eclipse、IntelliJ)的缓存可能导致文件没有同步到服务器。试试:
- 刷新项目(右键项目 → Refresh)
- 清理IDE的缓存(比如Eclipse的
File → Clean,IntelliJ的File → Invalidate Caches...)
然后重新部署应用。
按照这个顺序排查,应该能找到问题所在。
内容的提问来源于stack exchange,提问作者Eutherpy
相关产品推荐
相关产品推荐

