Quando si verifica un errore nell'esecuzione di una jsp (oovero
nell'esecuzione della servlet equivalente), il container inoltra
il controllo ad una specifica pagina JSP alla quale viene
fornito l'accesso all'oggetto implicito exception
.
Ogni pagina jsp definisce qual è la pagina di errore a
cui inoltrare il controllo in caso di errore la direttiva
page
:
<%@ page errorPage="/jsp/error.jsp" isErrorPage="false" %>
Mentre un file JSP che DEVE gestire errori (error.jsp
),
conterrè la seguente direttiva:
<%@ page isErrorPage="true" %>
Supponiamo di voler scrivere una pagina JSP che produce il risultato della divisione di due interi dati come parametri d'input.
Se non si vuole gestire direttamente il caso di divisione per 0, ma si vuole sfruttare il meccanismo dell'eccezione, allora è necessario creare anche una pagina JSP per la gestione dell'eccezioni:
Filediv.jsp
:
<%--div.jsp Esegue una divisione tra due numeri dati in input --%>
<%@ page errorPage="error.jsp" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>Esempio di jsp con gestione errori</title>
</head>
<body>
<% String s;
int x = ((s=request.getParameter("x"))==null) ? 10 : Integer.parseInt(s);
int y = ((s=request.getParameter("y"))==null) ? 10 : Integer.parseInt(s);
%>
<h1>Divisione intera</h1>
<pre><%= x %>/<%= y %> = <%= x/y %></pre>
</body>
</html>
err.jsp
:
<%@ page isErrorPage="true" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>Errore!</title>
</head>
<body>
<h2>Pagina per il trattamento dell'errore:</h2>
<h3>È stata generata la seguente eccezione:</h3>
<pre> <%= exception %> </pre>
<hr>
L'oggetto <code>exception</code> ha i seguenti metodi:
<h4>getMessage()</h4>
<%= exception.getMessage() %>
<h4>printStackTrace(out)</h4>
<pre>
<% exception.printStackTrace(new java.io.PrintWriter(out)); %>
</pre>
</body>
</html>