English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Manejo de excepciones de JSP

Al escribir programas JSP, los programadores pueden omitir algunos BUG, que pueden aparecer en cualquier lugar del programa. En el código JSP, hay varios tipos de excepciones comunes:

  • Excepción comprobada: Una excepción comprobada es un error típico del usuario o un error que el programador no puede prever. Por ejemplo, si se va a abrir un archivo pero no se puede encontrar, se lanza una excepción. Estas excepciones no se pueden ignorar simplemente en la etapa de compilación.
  • Excepción en tiempo de ejecución: Una excepción en tiempo de ejecución puede haber sido evitada por el programador, y esta excepción se ignorará en la etapa de compilación.
  • Error: El error no es una excepción, pero el problema es que está fuera del alcance del usuario o del programador. Los errores suelen ser ignorados en el código y prácticamente no se puede hacer nada con ellos. Por ejemplo, errores de desbordamiento de pila. Estos errores se ignoran en la etapa de compilación.

Esta sección presentará algunos métodos simples y elegantes para manejar excepciones y errores en tiempo de ejecución.

Uso del objeto Exception

El objeto exception es un ejemplo de subclase de Throwable, que solo está disponible en la página de error. La siguiente tabla enumera algunos métodos importantes de la clase Throwable:

Número Método&Descripción
1 public String getMessage()

Devuelve la información de la excepción. Esta información se inicializa en el constructor de Throwable
2 public Throwable getCause()

Devuelve la causa de la excepción, que es un objeto de tipo Throwable
3 public String toString()

Devuelve el nombre de la clase
4 public void printStackTrace()

Escribe la pila de trazas de excepciones en System.err
5 public StackTraceElement [] getStackTrace()

Devuelve la pila de trazas de excepciones en forma de un array de elementos de pila
6 public Throwable fillInStackTrace()

Usa la pila de llamadas actual para llenar el objeto Throwable

JSP ofrece opciones para especificar una página de error para cada página JSP. Siempre que la página lance una excepción, el contenedor JSP llama automáticamente a la página de error.

El siguiente ejemplo especifica una página de error para main.jsp. Se especifica una página de error utilizando la instrucción <%@page errorPage="XXXXX"%>.

<%@ page errorPage="ShowError.jsp" %>
<html>
<head>
   <title> Ejemplo de manejo de errores</title>
</head>
<body>
<%
   // Lanza una excepción para invocar la página de error
   int x == 1;
   if (x == 1)
   {
      throw new RuntimeException("Error condition!!!");
   }
%>
</body>
</html>

Ahora, escribe el archivo ShowError.jsp de la siguiente manera:

<%@ page isErrorPage="true" %>
<html>
<head>
<title>Show Error Page</title>
</head>
<body>
<h1>Opps...</h1>
<p>Disculpe, se produjo un error.</p>
<p>Aquí está la traza de pila de excepciones: </p>
<pre>
<% exception.printStackTrace(response.getWriter()); %>

Notar que el archivo ShowError.jsp utiliza la instrucción <%@page isErrorPage="true"%>, que informa al compilador de JSP de que se debe generar una variable de ejemplo de excepción.

Ahora intenta acceder a la página main.jsp, que producirá el siguiente resultado:

java.lang.RuntimeException: Error condition!!!
......
Opps...
Disculpe, se produjo un error.
Aquí está la traza de pila de excepciones:

Uso de etiquetas JSTL en la página de error

Se puede utilizar etiquetas JSTL para escribir la página de error ShowError.jsp. El código de este ejemplo es prácticamente igual al del ejemplo anterior, pero tiene una estructura mejor y puede proporcionar más información:

<%@ 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>Trace de pila:</b></td>
<td>
<c:forEach var="trace" 
         items="${pageContext.exception.stackTrace}">
<p>${trace}</p>
</c:forEach>
</td>
</tr>
</table>
</body>
</html>

Los resultados de la ejecución son los siguientes:

Uso de bloques try…catch

Si desea manejar excepciones en una página y realizar diferentes tratamientos para diferentes excepciones,则需要使用try…catch块。

El siguiente ejemplo muestra cómo usar el bloque try…catch, coloque este código en main.jsp:

<html>
<head>
   <title>Ejemplo de Try...Catch</title>
</head>
<body>
<%
   try{
      int i = 1;
      i = i / 0;
      out.println("La respuesta es ", + i);
   }
   catch (Exception e){
      out.println("Se produjo una excepción: ", + e.getMessage());
   }
%>
</body>
</html>

Intente acceder a main.jsp, que producirá el siguiente resultado:

Se produjo una excepción: / por zero