【发布时间】:2011-02-14 10:45:30
【问题描述】:
我正在使用 JSF 开发 Web 应用程序。我尽可能地对其进行了测试,但有时会引发运行时异常。
那么,如何在每次抛出异常时将用户重定向到特殊错误页面(而不是显示 500 错误和完整的 tomcat 日志)?
【问题讨论】:
标签: jsp jsf facelets custom-error-pages
我正在使用 JSF 开发 Web 应用程序。我尽可能地对其进行了测试,但有时会引发运行时异常。
那么,如何在每次抛出异常时将用户重定向到特殊错误页面(而不是显示 500 错误和完整的 tomcat 日志)?
【问题讨论】:
标签: jsp jsf facelets custom-error-pages
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;
}
}
【讨论】:
只需在web.xml 中声明<error-page>,您可以在其中指定应在某个Throwable(或其任何子类)或HTTP status code 上显示的页面。例如
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>
这将在java.lang.Exception 的任何子类上显示错误页面,但不会在java.lang.Throwable 或java.lang.Error 上显示。这样您就可以为任何类型的Throwable 创建自己的错误页面。例如。 java.sql.SQLException、java.io.IOException 等等。
或者,
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
这将在 HTTP 500 错误时显示错误页面,但您也可以为 404(页面未找到)、403(禁止)等指定其他页面。
如果您在error.jsp 之上声明<%@page isErrorPage="true" %>,那么您可以访问${exception} 在EL 中抛出的Exception(以及它的所有getter)。
<p>Message: ${exception.message}</p>
【讨论】:
isErrorPage="true" 是否有等价物?
request.getAttribute(RequestDispatcher.ERROR_EXCEPTION)。
在您的 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>
【讨论】: