如何在运行时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.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(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; } }