Error Handling
Fehlerbehandlung ist ein entscheidender Aspekt bei der Entwicklung zuverlässiger Webanwendungen. In webforJ ist die Fehlerbehandlung so gestaltet, dass sie flexibel und anpassbar ist, sodass Entwickler Ausnahmen auf die Weise behandeln können, die am besten zu den Bedürfnissen ihrer Anwendung passt.
Übersicht
In webforJ dreht sich die Fehlerbehandlung um das ErrorHandler-Interface. Dieses Interface ermöglicht es Entwicklern, zu definieren, wie ihre Anwendung auf Ausnahmen reagieren soll, die während der Ausführung auftreten. Standardmäßig bietet webforJ einen GlobalErrorHandler, der alle Ausnahmen auf generische Weise behandelt. Entwickler können jedoch benutzerdefinierte Fehlerhandler für spezifische Ausnahmen erstellen, um maßgeschneiderte Antworten zu liefern.
Entdeckung und Verwendung von Fehlerhandlern
webforJ verwendet das Service Provider Interface (SPI) von Java, um Fehlerhandler zu entdecken und zu laden.
Entdeckungsprozess
- Dienstregistrierung: Fehlerhandler werden über den Mechanismus
META-INF/servicesregistriert. - Dienstladung: Beim Start der Anwendung lädt webforJ alle Klassen, die in
META-INF/services/com.webforj.error.ErrorHandleraufgeführt sind. - Fehlerbehandlung: Wenn eine Ausnahme auftritt, prüft webforJ, ob ein Fehlerhandler für diese spezifische Ausnahme existiert.
Auswahl des Handlers
- Wenn ein spezifischer Handler für die Ausnahme existiert, wird dieser verwendet.
- Wenn kein spezifischer Handler gefunden wird, aber ein benutzerdefinierter globaler Fehlerhandler
WebforjGlobalErrorHandlerdefiniert ist, wird dieser verwendet. - Wenn keiner gefunden wird, wird der Standard-
GlobalErrorHandlerverwendet.
Das ErrorHandler-Interface
Das ErrorHandler-Interface ist dafür ausgelegt, Fehler zu verarbeiten, die während der Ausführung einer webforJ-Anwendung auftreten. Anwendungen, die spezifische Ausnahmen verwalten möchten, sollten dieses Interface implementieren.
Methoden
onError(Throwable throwable, boolean debug): Wird aufgerufen, wenn ein Fehler auftritt. Diese Methode sollte die Logik zur Verarbeitung der Ausnahme enthalten.showErrorPage(String title, String content): Eine Standardmethode, die die Fehlerseite mit dem angegebenen Titel und Inhalt anzeigt.
Namenskonvention
Die implementierende Klasse muss nach der Ausnahme benannt werden, die sie verarbeitet, mit dem Suffix ErrorHandler. Um beispielsweise die NullPointerException zu behandeln, sollte die Klasse NullPointerExceptionErrorHandler heißen.
Registrierung
Der benutzerdefinierte Fehlerhandler muss in der Datei META-INF/services/com.webforj.error.ErrorHandler registriert werden, damit webforJ ihn entdecken und verwenden kann.
Implementierung eines benutzerdefinierten Fehlerhandlers
Die folgenden Schritte beschreiben die Implementierung eines benutzerdefinierten Fehlerhandlers für eine spezifische Ausnahme:
Schritt 1: Erstellen Sie die Fehlerhandler-Klasse
Erstellen Sie eine neue Klasse, die das ErrorHandler-Interface implementiert und nach der Ausnahme benannt ist, die sie verarbeitet.
package com.example.error;
import com.webforj.error.ErrorHandler;
public class NullPointerExceptionErrorHandler implements ErrorHandler {
@Override
public void onError(Throwable throwable, boolean debug) {
// Benutzerdefinierte Logik zur Behandlung der NullPointerException
String title = "Nullpointer-Ausnahme";
String content = "Ein Nullwert wurde an einer Stelle gefunden, wo ein Objekt erforderlich ist.";
showErrorPage(title, content);
}
}
showErrorPage()-MethodeDie showErrorPage-Methode ist eine Hilfsmethode, die die webforJ-API verwendet, um den bereitgestellten HTML-Inhalt und den Seitentitel an den Browser zu senden und eine Fehlerseite anzuzeigen. Wenn eine Ausnahme auftritt und die Anwendung nicht wiederhergestellt werden kann, ist es unmöglich, webforJ-Komponenten zu verwenden, um eine benutzerdefinierte Fehlerseite zu erstellen. Die Page-API bleibt jedoch zugänglich, sodass der Entwickler versuchen kann, eine Fehlerseite anzuzeigen oder weiterzuleiten.
Schritt 2: Registrieren Sie den Fehlerhandler
Erstellen Sie eine Datei namens com.webforj.error.ErrorHandler im Verzeichnis META-INF/services Ihrer Anwendung. Fügen Sie den vollqualifizierten Namen Ihrer Fehlerhandler-Klasse in diese Datei ein.
Datei: META-INF/services/com.webforj.error.ErrorHandler
com.example.error.NullPointerExceptionErrorHandler
Jetzt wird, wann immer eine NullPointerException ausgelöst wird, von webforJ Ihr registrierter Handler ausgewählt und seine Logik ausgeführt, um den Fehler zu behandeln.
Verwendung von AutoService zur Vereinfachung der Registrierung
Es ist leicht für Entwickler, zu vergessen, Dienstbeschreibungen zu aktualisieren oder korrekt festzulegen. Durch die Verwendung von Googles AutoService können Sie die Generierung der Datei META-INF/services/com.webforj.error.ErrorHandler automatisieren. Alles, was Sie tun müssen, ist, den Fehlerhandler mit der AutoService-Annotation zu versehen. Weitere Informationen zu AutoService finden Sie hier.
@AutoService(ErrorHandler.class)
public class NullPointerExceptionErrorHandler implements ErrorHandler {
@Override
public void onError(Throwable throwable, boolean debug) {
// Benutzerdefinierte Logik zur Behandlung der NullPointerException
String title = "Nullpointer-Ausnahme";
String content = "Ein Nullwert wurde an einer Stelle gefunden, wo ein Objekt erforderlich ist.";
showErrorPage(title, content);
}
}
Die GlobalErrorHandler-Klasse
Der GlobalErrorHandler ist der standardmäßige Fehlerhandler, der von webforJ bereitgestellt wird. Er implementiert das ErrorHandler-Interface und bietet generische Fehlerbehandlung.
Verhalten
- Protokollierung: Fehler werden sowohl in den Server- als auch in den Browserkonsolen protokolliert.
- Anzeige der Fehlerseite: Abhängig vom Debug-Modus wird auf der Fehlerseite der Stack-Trace oder eine generische Fehlermeldung angezeigt.
Definition eines benutzerdefinierten globalen Fehlerhandlers
Um einen globalen Fehlerhandler zu definieren, müssen Sie einen neuen Fehlerhandler mit dem Namen WebforjGlobalErrorHandler erstellen, und dann die Schritte zur Registrierung von Fehlerhandlern folgen, wie zuvor erklärt. In diesem Fall sucht webforJ zuerst nach benutzerdefinierten Fehlerhandlern, um Ausnahmen zu verwalten. Wenn keine gefunden werden, fällt webforJ auf den benutzerdefinierten globalen Fehlerhandler zurück.
Wenn mehrere WebforjGlobalErrorHandler registriert sind, wählt webforJ den ersten aus.