JSP - Ausnahmebehandlung

In diesem Kapitel. Wir werden diskutieren, wie Ausnahmen in JSP behandelt werden. Wenn Sie einen JSP-Code schreiben, können Codierungsfehler auftreten, die an jedem Teil des Codes auftreten können. In Ihrem JSP-Code können folgende Fehler auftreten:

Überprüfte Ausnahmen

Eine aktivierte Ausnahme ist eine Ausnahme, bei der es sich normalerweise um einen Benutzerfehler oder ein Problem handelt, das vom Programmierer nicht vorhergesehen werden kann. Wenn beispielsweise eine Datei geöffnet werden soll, die Datei jedoch nicht gefunden werden kann, tritt eine Ausnahme auf. Diese Ausnahmen können zum Zeitpunkt der Kompilierung nicht einfach ignoriert werden.

Laufzeitausnahmen

Eine Laufzeitausnahme ist eine Ausnahme, die der Programmierer wahrscheinlich hätte vermeiden können. Im Gegensatz zu den aktivierten Ausnahmen werden Laufzeitausnahmen zum Zeitpunkt der Kompatibilität ignoriert.

Fehler

Dies sind überhaupt keine Ausnahmen, sondern Probleme, die außerhalb der Kontrolle des Benutzers oder des Programmierers auftreten. Fehler werden in Ihrem Code normalerweise ignoriert, da Sie selten etwas gegen einen Fehler unternehmen können. Wenn beispielsweise ein Stapelüberlauf auftritt, tritt ein Fehler auf. Sie werden zum Zeitpunkt der Kompilierung ebenfalls ignoriert.

Wir werden weiter diskutieren, wie Sie mit Laufzeitausnahmen / -fehlern umgehen können, die in Ihrem JSP-Code auftreten.

Ausnahmeobjekt verwenden

Das Ausnahmeobjekt ist eine Instanz einer Unterklasse von Throwable (z. B. java.lang. NullPointerException) und nur auf Fehlerseiten verfügbar. In der folgenden Tabelle sind die wichtigen Methoden aufgeführt, die in der Throwable-Klasse verfügbar sind.

S.No. Methoden & Beschreibung
1

public String getMessage()

Gibt eine detaillierte Nachricht über die aufgetretene Ausnahme zurück. Diese Nachricht wird im Throwable-Konstruktor initialisiert.

2

public Throwable getCause()

Gibt die Ursache der Ausnahme zurück, die durch ein Throwable-Objekt dargestellt wird.

3

public String toString()

Gibt den Namen der Klasse zurück, die mit dem Ergebnis von verkettet ist getMessage().

4

public void printStackTrace()

Druckt das Ergebnis von toString() zusammen mit dem Stack Trace zu System.err, der Fehlerausgabestream.

5

public StackTraceElement [] getStackTrace()

Gibt ein Array zurück, das jedes Element in der Stapelverfolgung enthält. Das Element am Index 0 repräsentiert den oberen Rand des Aufrufstapels, und das letzte Element im Array repräsentiert die Methode am unteren Rand des Aufrufstapels.

6

public Throwable fillInStackTrace()

Füllt die Stapelverfolgung dieses Throwable-Objekts mit der aktuellen Stapelverfolgung und fügt alle vorherigen Informationen in der Stapelverfolgung hinzu.

JSP bietet Ihnen eine Option zur Angabe Error Pagefür jede JSP. Immer wenn die Seite eine Ausnahme auslöst, ruft der JSP-Container automatisch die Fehlerseite auf.

Im Folgenden finden Sie ein Beispiel für die Angabe einer Fehlerseite für a main.jsp. Verwenden Sie zum Einrichten einer Fehlerseite die<%@ page errorPage = "xxx" %> Richtlinie.

<%@ page errorPage = "ShowError.jsp" %>

<html>
   <head>
      <title>Error Handling Example</title>
   </head>
   
   <body>
      <%
         // Throw an exception to invoke the error page
         int x = 1;
         
         if (x == 1) {
            throw new RuntimeException("Error condition!!!");
         }
      %>
   </body>
</html>

Wir werden jetzt eine Fehlerbehandlung JSP ShowError.jsp schreiben, die unten angegeben ist. Beachten Sie, dass die Seite zur Fehlerbehandlung die Direktive enthält<%@ page isErrorPage = "true" %>. Diese Anweisung veranlasst den JSP-Compiler, die Ausnahmeinstanzvariable zu generieren.

<%@ page isErrorPage = "true" %>

<html>
   <head>
      <title>Show Error Page</title>
   </head>
   
   <body>
      <h1>Opps...</h1>
      <p>Sorry, an error occurred.</p>
      <p>Here is the exception stack trace: </p>
      <pre><% exception.printStackTrace(response.getWriter()); %></pre>
   </body>
</html>

Greife auf ... zu main.jsperhalten Sie eine Ausgabe wie folgt:

java.lang.RuntimeException: Error condition!!!
......

Opps...
Sorry, an error occurred.

Here is the exception stack trace:

Verwenden von JSTL-Tags für die Fehlerseite

Sie können JSTL-Tags verwenden, um eine Fehlerseite zu schreiben ShowError.jsp. Diese Seite hat fast die gleiche Logik wie im obigen Beispiel, mit besserer Struktur und mehr Informationen -

<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<%@page isErrorPage = "true" %>

<html>
   <head>
      <title>Show Error Page</title>
   </head>
   
   <body>
      <h1>Opps...</h1>
      <table width = "100%" border = "1">
         <tr valign = "top">
            <td width = "40%"><b>Error:</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>

Greifen Sie auf die Datei main.jsp zu. Folgendes wird generiert:

Opps...

Error:

java.lang.RuntimeException: Error condition!!!

URI:

/main.jsp

Status code:

500

Stack trace:

org.apache.jsp.main_jsp._jspService(main_jsp.java:65)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:68)

javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)

javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

Verwenden von Try ... Catch Block

Wenn Sie Fehler auf derselben Seite behandeln und Maßnahmen ergreifen möchten, anstatt eine Fehlerseite auszulösen, können Sie die verwenden try....catch Block.

Das folgende Beispiel zeigt, wie der try ... catch-Block verwendet wird. Lassen Sie uns den folgenden Code in main.jsp einfügen -

<html>
   <head>
      <title>Try...Catch Example</title>
   </head>
   
   <body>
      <%
         try {
            int i = 1;
            i = i / 0;
            out.println("The answer is " + i);
         }
         catch (Exception e) {
            out.println("An exception occurred: " + e.getMessage());
         }
      %>
   </body>
</html>

Greifen Sie auf die Datei main.jsp zu. Sie sollte eine Ausgabe wie die folgende generieren:

An exception occurred: / by zero