跳至主要内容

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会选择第一个。