如何在运行时exception被servlet抛出时在浏览器中显示用户友好的错误页面?
我正在开发与JSF的Web应用程序。 我testing了它,因为我能够但不时抛出运行时exception。
那么,如何在每次引发exception时将用户redirect到特殊的错误页面(而不是在完整的tomcat日志中显示500错误)呢?
只需在web.xml
声明一个<error-page>
,其中您可以指定应该在某个Throwable
(或其任何子类)或HTTP状态代码上显示的页面 。 例如
<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(Page Not Found),403(Forbidden)等等指定另一个。
如果在error.jsp
顶部声明<%@page isErrorPage="true" %>
,那么您可以通过EL中的${exception}
来访问抛出的Exception
(以及所有的getter)。
<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; } }