我正在使用JSF开发Web应用程序。我测试了它,但我不时会抛出运行时异常。
那么,每次抛出异常时如何将用户重定向到特殊错误页面(而不是显示完整tomcat日志的500错误)?
答案 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.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(禁止)等指定其他页面。
如果您在<%@page isErrorPage="true" %>
之前声明error.jsp
,那么您可以通过EL中的${exception}
访问引发的Exception
(以及所有其获取者)。
<p>Message: ${exception.message}</p>
答案 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;
}
}