我对海关错误页面及其异常类型有一些问题。
我已经在web.xml
这个错误页面中了;
<error-page>
<exception-type>java.io.FileNotFoundException</exception-type>
<location>/faces/error.xhtml</location>
</error-page>
当我点击链接并且JSF文件不存在时,会发生此错误。我的问题是,当发生此错误时,网页不会重定向到我的error.xhtml
页面。
这是如何引起的?如何解决?
答案 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>