English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Quando si scrive un programma JSP, il programmatore potrebbe trascurare alcuni BUG, che potrebbero apparire in qualsiasi parte del programma. Nei codici JSP, ci sono generalmente i seguenti tipi di eccezioni:
Questa sezione fornirà alcuni modi semplici ed eleganti per gestire le eccezioni e gli errori in esecuzione.
L'oggetto exception è un esempio di sottoclasse di Throwable, disponibile solo nella pagina di errore. La tabella seguente elenca alcuni metodi importanti della classe Throwable:
Numero | Metodo&Descrizione |
---|---|
1 | public String getMessage() Restituire l'informazione dell'eccezione. Questa informazione viene inizializzata nel costruttore di Throwable |
2 | public Throwable getCause() Restituire la causa dell'eccezione, di tipo oggetto Throwable |
3 | public String toString() Restituire il nome della classe |
4 | public void printStackTrace() Esportare la traccia della pila dell'eccezione su System.err |
5 | public StackTraceElement [] getStackTrace() Restituire la traccia della pila dell'eccezione come array di elementi di traccia della pila |
6 | public Throwable fillInStackTrace() Utilizzare la traccia della pila corrente per riempire l'oggetto Throwable |
JSP offre un'opzione per specificare una pagina di errore per ogni pagina JSP. Ogni volta che una pagina lancia un'eccezione, il container JSP chiama automaticamente la pagina di errore.
L'esempio seguente assegna una pagina di errore a main.jsp. Utilizzare l'istruzione <%@page errorPage="XXXXX"%> per specificare una pagina di errore.
<%@ page errorPage="ShowError.jsp" %> <html> <head> <title>Gestione degli Errori Esempio</title> </head> <body> <% // Lanciare un'eccezione per invocare la pagina di errore int x = 1; if (x == 1) } throw new RuntimeException("Error condition!!!"); } %> </body> </html>
Ora, scrivete il file ShowError.jsp come segue:
<%@ page isErrorPage="true" %> <html> <head> <title>Show Error Page</title> </head> <body> <h1>Opps...</h1> <p>Spiacenti, è capitato un errore.</p> <p>Ecco la traccia di eccezione:</p> <pre> <% exception.printStackTrace(response.getWriter()); %>
Notare che il file ShowError.jsp utilizza l'instruzione <%@page isErrorPage="true"%>, che informa il compilatore JSP di generare una variabile di esempio di eccezione.
Ora provate a visitare la pagina main.jsp, che produrrà il seguente risultato:
java.lang.RuntimeException: Error condition!!! ...... Opps... Spiacenti, è capitato un errore. Ecco la traccia di eccezione:
Si può utilizzare il tag JSTL per scrivere la pagina di errore ShowError.jsp. Il codice di questo esempio è quasi identico a quello dell'esempio precedente, ma ha una struttura migliore e può fornire 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>
运行结果如下:
如果您想要将异常处理放在一个页面中,并且对不同的异常进行不同的处理,那么您就需要使用try…catch块了。
接下来的这个例子显示了如何使用try…catch块,将这些代码放在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>
试着访问main.jsp,它将会产生如下结果:
An exception occurred: / by zero