servlet抛出运行时异常时如何在浏览器中显示用户友好的错误页面?

Posted

技术标签:

【中文标题】servlet抛出运行时异常时如何在浏览器中显示用户友好的错误页面?【英文标题】:How to show user-friendly error page in browser when runtime exception is thrown by servlet? 【发布时间】:2011-02-14 10:45:30 【问题描述】:

我正在使用 JSF 开发 Web 应用程序。我尽可能地对其进行了测试,但有时会引发运行时异常。

那么,如何在每次抛出异常时将用户重定向到特殊错误页面(而不是显示 500 错误和完整的 tomcat 日志)?

【问题讨论】:

【参考方案1】:
    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;
    


【讨论】:

【参考方案2】:

只需在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.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(页面未找到)、403(禁止)等指定其他页面。

如果您在error.jsp 之上声明&lt;%@page isErrorPage="true" %&gt;,那么您可以访问$exception 在EL 中抛出的Exception(以及它的所有getter)。

<p>Message: $exception.message</p>

另见Java EE 5 tutorial on the subject。

【讨论】:

如果我有一个 servlet 而不是 jsp 怎么办? isErrorPage="true" 是否有等价物? 非 JSP 的等价物是 request.getAttribute(RequestDispatcher.ERROR_EXCEPTION)【参考方案3】:

在您的 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>

【讨论】:

以上是关于servlet抛出运行时异常时如何在浏览器中显示用户友好的错误页面?的主要内容,如果未能解决你的问题,请参考以下文章

flutter DropDownButtonFormField 提示抛出运行时错误

如何使打字稿在失败的非空断言上抛出运行时错误?

小程序中存在构造函数会引发异常

Java程序中的异常应该在啥时候抛出

springboot统一异常处理

重载和重写的异同