0

我对海关错误页面及其异常类型有一些问题。我在web.xml这个错误页面中有;

<error-page>
    <exception-type>java.io.FileNotFoundException</exception-type>
    <location>/faces/error.xhtml</location>
</error-page>

当我单击链接并且 JSF 文件不存在时会发生此错误。我的问题是发生此错误时,网页不会重定向到我的error.xhtml页面。

这是如何引起的,我该如何解决?

4

2 回答 2

4

FileNotFoundException当您实际请求的 URL 与FacesServlet. 所以想象一下FacesServlet被映射到*.jsf,然后打开/somenotexistent.jsf会在 Mojarra 的情况下确实抛出一个子类,FileNotFoundException它确实会匹配你的错误页面。

但是,如果您请求的 URL与 的 URL 模式匹配FacesServlet,则该请求将由另一个 servlet 处理,通常是容器自己的DefaultServlet. 如果资源不存在,那么它通常会返回 404 而不是抛出异常。

您还想添加另一个错误页面来覆盖它:

<error-page>
    <error-code>404</error-code>
    <location>/faces/error.xhtml</location>
</error-page>
<error-page>
    <exception-type>java.io.FileNotFoundException</exception-type>
    <location>/faces/error.xhtml</location>
</error-page>

但是,为了防止这种重复,您还可以考虑使用一个servlet 过滤器,该过滤器捕获FileNotFoundException来自的任何实例,FacesServlet然后正确返回 404。JSF 实用程序库OmniFaces已经有这样一个过滤器FacesExceptionFilter . 这样,您最终只能得到错误代码 404 上的错误页面。

于 2012-11-22T16:24:29.800 回答
3

不,正如您编写的那样,当您的 servlet/JSP/JSF/whatever 抛出FileNotFoundException. 在 404 的情况下,您的 servlet 甚至没有被调用,因此它不会抛出任何东西。

用这个

<error-page>
  <error-code>404</error-code>
  <location>/the404_page.html</location>
</error-page>
于 2012-11-22T16:08:04.130 回答