我正在使用 JSF 开发 Web 应用程序。我尽可能地对其进行了测试,但不时会引发运行时异常。
那么,每次抛出异常时如何将用户重定向到特殊的错误页面(而不是显示 500 错误和完整的 tomcat 日志)?
我正在使用 JSF 开发 Web 应用程序。我尽可能地对其进行了测试,但不时会引发运行时异常。
那么,每次抛出异常时如何将用户重定向到特殊的错误页面(而不是显示 500 错误和完整的 tomcat 日志)?
只需声明一个<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.Throwable
or 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(禁止)等指定另一个页面。
如果你<%@page isErrorPage="true" %>
在 top of 中声明error.jsp
,那么你可以访问 EL 中抛出的Exception
(以及它的所有 getter)${exception}
。
<p>Message: ${exception.message}</p>
另请参阅有关该主题的 Java EE 5 教程。
在您的 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>
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;
}
}