Beim Schreiben von JSP-Programmen übersehen Programmierer möglicherweise einige Fehler, die an einer beliebigen Stelle im Programm auftreten können. Im JSP-Code gibt es normalerweise die folgenden Arten von Ausnahmen:
Geprüfte Ausnahme: Eine geprüfte Ausnahme ist ein typischer Benutzerfehler oder ein Fehler, den der Programmierer nicht vorhersehen kann. Wenn beispielsweise eine Datei geöffnet werden soll, die Datei jedoch nicht gefunden werden kann, wird eine Ausnahme ausgelöst. Diese Ausnahmen können zur Kompilierungszeit nicht einfach ignoriert werden.
Laufzeitausnahme: Eine Laufzeitausnahme wurde möglicherweise vom Programmierer vermieden. Diese Ausnahme wird zur Kompilierungszeit ignoriert.
Fehler: Hier gibt es keine Ausnahme, aber das Problem besteht darin, dass es außerhalb der Kontrolle des Benutzers oder Programmierers liegt. Fehler im Code werden oft ignoriert und Sie können wenig dagegen tun. Beispiel: Stapelüberlauffehler. Diese Fehler werden zur Kompilierungszeit ignoriert.
In diesem Abschnitt erfahren Sie, wie Sie Laufzeitausnahmen und -fehler auf einfache und elegante Weise behandeln können.
Das Ausnahmeobjekt ist eine Instanz einer Throwable-Unterklasse und nur auf Fehlerseiten verfügbar. In der folgenden Tabelle sind einige wichtige Methoden der Throwable-Klasse aufgeführt:
Seriennummer | Methode und Beschreibung |
---|---|
1 | public String getMessage() gibt Ausnahmeinformationen zurück. Diese Informationen werden im Throwable-Konstruktor initialisiert |
2 | public ThrowablegetCause() gibt die Ursache der Ausnahme zurück, Typ ist Throwable-Objekt |
3 | public String toString() gibt den Klassennamen zurück |
4 | public void printStackTrace() gibt den Ausnahme-Stack-Trace an System.err aus |
5 | public StackTraceElement [] getStackTrace() gibt den Ausnahme-Stack-Trace in Form eines Arrays von Stack-Trace-Elementen zurück |
6 | public ThrowablefillInStackTrace() verwendet den aktuellen Stack-Trace, um das Throwable-Objekt zu füllen |
JSP bietet die Möglichkeit, Fehlerseiten für jede JSP-Seite anzugeben. Immer wenn eine Seite eine Ausnahme auslöst, ruft der JSP-Container automatisch die Fehlerseite auf.
Das folgende Beispiel gibt eine Fehlerseite für main.jsp an. Verwenden Sie die Anweisung <%@page errorPage="XXXXX"%>, um eine Fehlerseite anzugeben.
<%@ page errorPage="ShowError.jsp" %><html><head> <title>Beispiel zur Fehlerbehandlung</title></head><body><% // Eine Ausnahme auslösen, um die Fehlerseite aufzurufen int x = 1; if (x == 1) { throw new RuntimeException("Fehlerbedingung!!!" } %></body></html>
Schreiben Sie nun die Datei ShowError.jsp wie folgt:
<%@ page isErrorPage="true" %><html><head><title>Fehlerseite anzeigen</title></head><body><h1>Opps...</h1><p>Entschuldigung, Es ist ein Fehler aufgetreten.</p><p>Hier ist der Ausnahme-Stack-Trace: </p><pre><% Ausnahme.printStackTrace(response.getWriter());
Beachten Sie, dass die Datei ShowError.jsp die Direktive <%@page isErrorPage="true"%> verwendet, die dem JSP-Compiler mitteilt, dass er eine Ausnahmeinstanzvariable generieren muss.
Versuchen Sie nun, auf die Seite main.jsp zuzugreifen. Die folgenden Ergebnisse werden angezeigt:
java.lang.RuntimeException: Fehlerbedingung!!!......Opps...Leider ist ein Fehler aufgetreten.Hier ist der Ausnahme-Stack-Trace:
Sie können JSTL-Tags verwenden, um die Fehlerseite ShowError.jsp zu schreiben. Der Code in diesem Beispiel hat fast die gleiche Logik wie der Code im vorherigen Beispiel, aber der Code in diesem Beispiel ist besser strukturiert und bietet mehr Informationen:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@page isErrorPage="true" %><html><head><title> Fehlerseite anzeigen</title></head><body><h1>Opps...</h1><table><tr valign="top"><td><b>Fehler:</b></td><td>${pageContext.Exception}</td></tr><tr valign="top"><td> <b>URI:</b></td><td>${pageContext.errorData.requestURI}</td></tr><tr valign="top"><td><b>Status Code:</b></td><td>${pageContext.errorData.statusCode</td></tr><tr valign="top"><td><b>Stack-Trace:</b> </td><td><c:forEach var="trace" items="${pageContext.Exception.stackTrace}"><p>${trace}</p></c:forEach></td></tr></table></body></html>
Die Laufergebnisse sind wie folgt:
Wenn Sie eine Ausnahmebehandlung in eine Seite integrieren und verschiedene Ausnahmen unterschiedlich behandeln möchten, müssen Sie den Block try...catch verwenden.
Das folgende Beispiel zeigt, wie Sie einen try...catch-Block verwenden, indem Sie diesen Code in main.jsp einfügen:
<html><head> <title>Try...Catch-Beispiel</title></head><body><% try{ int i = 1; i = i / 0; + i); } Catch (Exception e){ out.println("Eine Ausnahme ist aufgetreten: " + e.getMessage()} %></body></html>
Versuchen Sie, auf main.jsp zuzugreifen. Es werden die folgenden Ergebnisse angezeigt:
Es ist eine Ausnahme aufgetreten: / von Null