跳至主要内容

Error Handling

在 ChatGPT 中打开

错误处理是开发可靠网络应用程序的重要方面。在webforJ中,错误处理被设计得灵活且可定制,允许开发人员以最符合其应用需求的方式处理异常。

概述

在webforJ中,错误处理围绕ErrorHandler接口展开。这个接口允许开发人员定义应用在执行过程中发生异常时应如何响应。默认情况下,webforJ提供了一个GlobalErrorHandler,它以通用方式处理所有异常。然而,开发人员可以为特定异常创建自定义错误处理程序,以提供更加针对性的响应。

发现和使用错误处理程序

webforJ使用Java的服务提供程序接口(SPI)来发现和加载错误处理程序。

发现过程

  1. 服务注册:错误处理程序通过META-INF/services机制进行注册。
  2. 服务加载:在应用程序启动时,webforJ加载META-INF/services/com.webforj.error.ErrorHandler中列出的所有类。
  3. 错误处理:当发生异常时,webforJ检查是否存在针对该特定异常的错误处理程序。

处理程序选择

  • 如果存在针对该异常的特定处理程序,则使用它。
  • 如果没有找到特定处理程序,但定义了自定义全局错误处理程序WebforjGlobalErrorHandler,则使用它。
  • 如果都没有找到,则使用默认的GlobalErrorHandler

ErrorHandler 接口

ErrorHandler接口旨在处理在webforJ应用程序执行过程中发生的错误。希望管理特定异常的应用程序应实现该接口。

方法

  • onError(Throwable throwable, boolean debug):在发生错误时被调用。此方法应包含处理异常的逻辑。
  • showErrorPage(String title, String content):一个默认方法,显示具有给定标题和内容的错误页面。

命名约定

实现类的名称必须以其处理的异常命名,后缀为ErrorHandler。例如,要处理NullPointerException,类应命名为NullPointerExceptionErrorHandler

注册

自定义错误处理程序必须在META-INF/services/com.webforj.error.ErrorHandler文件中注册,以便webforJ能够发现和使用它。

实现自定义错误处理程序

以下步骤详细说明了实现特定异常的自定义错误处理程序:

步骤1:创建错误处理程序类

创建一个新的类,该类实现ErrorHandler接口,并以其处理的异常命名。

package com.example.error;

import com.webforj.error.ErrorHandler;

public class NullPointerExceptionErrorHandler implements ErrorHandler {

@Override
public void onError(Throwable throwable, boolean debug) {
// NullPointerException的自定义处理逻辑
String title = "空指针异常";
String content = "在需要对象的地方遇到了空值。";

showErrorPage(title, content);
}
}
showErrorPage() 方法

showErrorPage方法是一个实用程序方法,使用webforJ API将提供的HTML内容和页面标题发送到浏览器,显示错误页面。当发生异常且应用程序无法恢复时,使用webforJ组件构建自定义错误页面将变得不可能。然而,Page API仍然可访问,允许开发人员重定向或显示错误页面作为最后的尝试。

步骤2:注册错误处理程序

在应用程序的META-INF/services目录下创建一个名为com.webforj.error.ErrorHandler的文件。将错误处理程序类的完全限定名添加到此文件中。

文件META-INF/services/com.webforj.error.ErrorHandler

com.example.error.NullPointerExceptionErrorHandler

现在,每当抛出NullPointerException时,webforJ将选择注册的处理程序并执行其逻辑以处理错误。

使用AutoService简化注册

开发人员容易忘记更新或正确指定服务描述符。通过使用Google的AutoService,可以自动生成META-INF/services/com.webforj.error.ErrorHandler文件。只需在错误处理程序上添加AutoService注解即可。您可以在此了解更多有关AutoService的信息

@AutoService(ErrorHandler.class)
public class NullPointerExceptionErrorHandler implements ErrorHandler {

@Override
public void onError(Throwable throwable, boolean debug) {
// NullPointerException的自定义处理逻辑
String title = "空指针异常";
String content = "在需要对象的地方遇到了空值。";

showErrorPage(title, content);
}
}

GlobalErrorHandler

GlobalErrorHandler是webforJ提供的默认错误处理程序。它实现了ErrorHandler接口并提供通用的错误处理。

行为

  • 日志记录:错误被记录到服务器和浏览器控制台。
  • 错误页面显示:根据调试模式,错误页面显示堆栈跟踪或通用错误消息。

定义自定义全局错误处理程序

要定义全局错误处理程序,您需要创建一个名为WebforjGlobalErrorHandler的新错误处理程序。然后遵循注册错误处理程序的步骤如前所述。在这种情况下,webforJ首先查找任何自定义错误处理程序以管理异常。如果未找到,则webforJ回退到自定义全局错误处理程序。

信息

如果注册了多个WebforjGlobalErrorHandler,则webforJ选择第一个。