JSP - Gestione delle eccezioni

In questo capitolo. discuteremo come gestire le eccezioni in JSP. Quando scrivi un codice JSP, potresti commettere errori di codifica che possono verificarsi in qualsiasi parte del codice. Potrebbe verificarsi il seguente tipo di errori nel codice JSP:

Eccezioni verificate

Un'eccezione verificata è un'eccezione che è tipicamente un errore dell'utente o un problema che non può essere previsto dal programmatore. Ad esempio, se un file deve essere aperto, ma il file non può essere trovato, si verifica un'eccezione. Queste eccezioni non possono essere semplicemente ignorate al momento della compilazione.

Eccezioni di runtime

Un'eccezione di runtime è un'eccezione che probabilmente avrebbe potuto essere evitata dal programmatore. A differenza delle eccezioni controllate, le eccezioni di runtime vengono ignorate al momento della compilazione.

Errori

Queste non sono affatto eccezioni, ma problemi che sorgono al di fuori del controllo dell'utente o del programmatore. Gli errori vengono generalmente ignorati nel codice perché raramente puoi fare qualcosa per un errore. Ad esempio, se si verifica un overflow dello stack, si verificherà un errore. Vengono ignorati anche al momento della compilazione.

Discuteremo ulteriormente i modi per gestire l'eccezione / errore di runtime che si verifica nel codice JSP.

Utilizzo dell'oggetto eccezione

L'oggetto eccezione è un'istanza di una sottoclasse di Throwable (ad esempio, java.lang. NullPointerException) ed è disponibile solo nelle pagine di errore. La tabella seguente elenca i metodi importanti disponibili nella classe Throwable.

S.No. Metodi e descrizione
1

public String getMessage()

Restituisce un messaggio dettagliato sull'eccezione che si è verificata. Questo messaggio viene inizializzato nel costruttore Throwable.

2

public Throwable getCause()

Restituisce la causa dell'eccezione rappresentata da un oggetto Throwable.

3

public String toString()

Restituisce il nome della classe concatenata con il risultato di getMessage().

4

public void printStackTrace()

Stampa il risultato di toString() insieme alla traccia dello stack in System.err, il flusso di output dell'errore.

5

public StackTraceElement [] getStackTrace()

Restituisce un array contenente ogni elemento nella traccia dello stack. L'elemento all'indice 0 rappresenta la parte superiore dello stack di chiamate e l'ultimo elemento dell'array rappresenta il metodo in fondo allo stack di chiamate.

6

public Throwable fillInStackTrace()

Riempie la traccia dello stack di questo oggetto Throwable con la traccia dello stack corrente, aggiungendo a qualsiasi informazione precedente nella traccia dello stack.

JSP ti offre un'opzione per specificare Error Pageper ogni JSP. Ogni volta che la pagina genera un'eccezione, il contenitore JSP richiama automaticamente la pagina di errore.

Di seguito è riportato un esempio per specificare una pagina di errore per un file main.jsp. Per impostare una pagina di errore, utilizzare il<%@ page errorPage = "xxx" %> direttiva.

<%@ 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>

Ora scriveremo uno ShowError.jsp per la gestione degli errori JSP, fornito di seguito. Si noti che la pagina di gestione degli errori include la direttiva<%@ page isErrorPage = "true" %>. Questa direttiva fa in modo che il compilatore JSP generi la variabile di istanza dell'eccezione.

<%@ 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>

Accedi al file main.jsp, riceverai un output simile al seguente:

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

Opps...
Sorry, an error occurred.

Here is the exception stack trace:

Utilizzo dei tag JSTL per la pagina di errore

È possibile utilizzare i tag JSTL per scrivere una pagina di errore ShowError.jsp. Questa pagina ha quasi la stessa logica dell'esempio precedente, con una struttura migliore e più informazioni -

<%@ 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>

Accedi al main.jsp, verrà generato quanto segue:

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)

Utilizzo di Try ... Catch Block

Se desideri gestire gli errori all'interno della stessa pagina e desideri eseguire un'azione invece di attivare una pagina di errore, puoi utilizzare il try....catch bloccare.

Di seguito è riportato un semplice esempio che mostra come utilizzare il blocco try ... catch. Mettiamo il seguente codice in main.jsp -

<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>

Accedi a main.jsp, dovrebbe generare un output simile al seguente:

An exception occurred: / by zero