在FileNotFoundException的情况下,web.xml错误页面不起作用

时间:2012-11-22 16:02:38

标签: jsf error-handling

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

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

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

这是如何引起的?如何解决?

2 个答案:

答案 0 :(得分:4)

FileNotFoundException上的此错误页面仅在您实际请求的网址与FacesServlet的网址格式匹配时才有效。所以假设FacesServlet映射到*.jsf,然后打开/somenotexistent.jsf,如果Mojarra确实抛出了FileNotFoundException的子类,它确实与您的错误页面匹配。

但是,如果您要求的网址匹配FacesServlet的网址格式,那么请求将由另一个servlet处理,通常是容器自己的{ {1}}。如果资源不存在,那么它通常会返回404而不是抛出异常。

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

DefaultServlet

但是,为了防止这种重复,您还可以考虑使用servlet filter来捕获来自<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> 的任何FileNotFoundException实例,然后正确返回404. JSF实用程序库{ {3}}已经有了这样的过滤器OmniFaces。这样,您最终只能得到错误代码为404的错误页面。

答案 1 :(得分:3)

不,正如您所写的那样,当您的servlet / JSP / JSF /无论如何抛出FileNotFoundException时,都会显示错误页面。在404的情况下,你的servlet甚至都没有被调用,所以它不会抛出任何东西。

使用此

<error-page>
  <error-code>404</error-code>
  <location>/the404_page.html</location>
</error-page>