39

我正在使用 JSF 开发 Web 应用程序。我尽可能地对其进行了测试,但不时会引发运行时异常。

那么,每次抛出异常时如何将用户重定向到特殊的错误页面(而不是显示 500 错误和完整的 tomcat 日志)?

4

3 回答 3

59

只需声明一个<error-page>in web.xml,您可以在其中指定应在某个Throwable(或其任何子类)或HTTP 状态代码上显示的页面。例如

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/error.jsp</location>
</error-page>

这将在 的任何子类上显示错误页面java.lang.Exception,但不会显示java.lang.Throwableor java.lang.Error。这样,您就可以为任何类型的Throwable. 例如java.sql.SQLExceptionjava.io.IOException等等。

或者,

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

这将在 HTTP 500 错误上显示错误页面,但您也可以为 404(页面未找到)、403(禁止)等指定另一个页面。

如果你<%@page isErrorPage="true" %>在 top of 中声明error.jsp,那么你可以访问 EL 中抛出的Exception(以及它的所有 getter)${exception}

<p>Message: ${exception.message}</p>

另请参阅有关该主题的 Java EE 5 教程

于 2010-04-30T23:40:08.803 回答
10

在您的 web.xml 中:

<error-page>
  <error-code>500</error-code>
  <location>/errorpages/500.jsp</location>
</error-page>

您还可以捕获特定的异常或扩展的异常Throwable

<error-page>
  <exception-type>java.lang.Throwable</exception-type>
  <location>/errorpages/500.jsp</location>
</error-page>
于 2010-04-30T23:39:45.827 回答
0
    If you use java config in spring, you can follow,

   @Configuration
   public class ExcpConfig {

    @Bean(name = "simpleMappingExceptionResolver")
    public SimpleMappingExceptionResolver simpleMappingExceptionResolver() {
        SimpleMappingExceptionResolver resolver= new SimpleMappingExceptionResolver();

        Properties mappings = new Properties();
        resolver.setExceptionMappings(mappings); // None by default
        resolver.setExceptionAttribute("ErrorOccurred"); // Default is "exception"
        resolver.setDefaultErrorView("500"); // 500.jsp
        return r;
    }

}
于 2014-12-01T11:59:28.413 回答