通过web.xml进行异常和错误处理配置

时间:2013-05-24 12:55:13

标签: jsf jsf-2 web.xml

我正在使用Apache MyFaces并且需要以不同于其他内部服务器错误的方式处理ViewExpiredException。但是我发现如果我包含错误代码,则为500;然后在ViewExpiredException错误中它也采用错误代码的路径。

下面是web.xml配置:

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/login.xhtml?faces-redirect=true</location>
</error-page> 

<error-page>
    <error-code>500</error-code>
    <location>/error.xhtml</location>
</error-page>

如何确保我可以重定向到上述两种情况的不同网址? 提到multiple error-code configuration web.xml,我可以用一个servlet替换该位置;但是如何捕获servlet中的错误?

2 个答案:

答案 0 :(得分:0)

对于ViewExpiredException,为什么不尝试通过CustomExceptionHandler处理异常,并通过handle()方法将用户重定向到您想要的任何页面

答案 1 :(得分:0)

我在这里遇到了两个问题:

一个。识别javax.faces.application.ViewExpiredException并重定向到/login.xhtml?faces-redirect=true。没有faces-redirect,重定向到XHTML页面会抛出错误

湾确保将状态代码为500的其他错误重定向到适当的页面。

通过以下方式解决:

1&GT;创建了一个 servlet ,它检查HTTP代码,然后检查错误是否是由于ViewExpiredException引起的。根据错误情况,servlet将请求转发到特定URL。

if (request.getAttribute("javax.servlet.error.status_code") == 500) {
      excep = (Class<? extends Exception>) request
              .getAttribute("javax.servlet.error.exception_type");
      if (excep != null) {
            if (excep.getCanonicalName().equalsIgnoreCase(
                "javax.faces.application.ViewExpiredException")) {
              //you can forward to another page like /login.xhtml?faces-redirect=true
            } else {
             //you can forward to different page with error message
            }
      }
      }

2 - ;更改 web.xml 以将所有500个异常转发到此servlet

<error-page>
    <error-code>500</error-code>
    <location>/error</location><!-- here error is name of servlet -->
</error-page>