如何在servlet抛出运行时异常时在浏览器中显示用户友好的错误页面?

时间:2010-04-30 23:29:56

标签: jsp jsf facelets custom-error-pages

我正在使用JSF开发Web应用程序。我测试了它,但我不时会抛出运行时异常。

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

3 个答案:

答案 0 :(得分:59)

只需在<error-page>中声明web.xml即可在其中指定应在特定Throwable(或其任何子类)或HTTP status code上显示的页面。 E.g。

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

将在java.lang.Exception的任何子类上显示错误页面,但不会显示java.lang.Throwablejava.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" %>之前声明error.jsp,那么您可以通过EL中的${exception}访问引发的Exception(以及所有其获取者)。

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

另见Java EE 5 tutorial on the subject

答案 1 :(得分: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>

答案 2 :(得分: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;
    }

}