Al escribir programas JSP, los programadores pueden pasar por alto algunos errores, y estos errores pueden aparecer en cualquier parte del programa. Generalmente existen los siguientes tipos de excepciones en el código JSP:
Excepción marcada: una excepción marcada es un error típico del usuario o un error que el programador no puede prever. Por ejemplo, si un archivo está a punto de abrirse, pero no se puede encontrar, se genera una excepción. Estas excepciones no pueden simplemente ignorarse en el momento de la compilación.
Excepción en tiempo de ejecución: es posible que el programador haya evitado una excepción en tiempo de ejecución. Esta excepción se ignorará en el momento de la compilación.
Error: Aquí no hay excepción, pero el problema es que escapa al control del usuario o programador. Los errores a menudo se ignoran en el código y es poco lo que se puede hacer al respecto. Por ejemplo, error de desbordamiento de pila. Estos errores se ignorarán en el momento de la compilación.
Esta sección le brindará varias formas simples y elegantes de manejar excepciones y errores en tiempo de ejecución.
El objeto de excepción es una instancia de una subclase Throwable y solo está disponible en páginas de error. La siguiente tabla enumera algunos métodos importantes de la clase Throwable:
número de serie | Método y descripción |
---|---|
1 | public String getMessage() devuelve información de excepción. Esta información se inicializa en el constructor Throwable. |
2 | public ThrowablegetCause() devuelve la causa de la excepción, el tipo es objeto Throwable |
3 | public String toString() devuelve el nombre de la clase |
4 | public void printStackTrace() genera el seguimiento de la pila de excepciones en System.err |
5 | public StackTraceElement [] getStackTrace() devuelve el seguimiento de la pila de excepción en forma de una matriz de elementos de seguimiento de la pila |
6 | public ThrowablefillInStackTrace() usa el seguimiento de la pila actual para llenar el objeto Throwable |
JSP proporciona la opción de especificar páginas de error para cada página JSP. Siempre que una página arroja 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. Utilice la directiva <%@page errorPage="XXXXXX"%> para especificar una página de error.
<%@ 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 ("¡¡¡Condición de error!!!" } %></body></html>
Ahora, escriba el archivo ShowError.jsp de la siguiente manera:
<%@ page isErrorPage="true" %><html><head><title>Mostrar página de error</title></head><body><h1>Opps...</h1><p>Lo siento, se produjo un error.</p><p>Aquí está el seguimiento de la pila de excepciones: </p><pre><% excepción.printStackTrace(response.getWriter() %>);
Observe que el archivo ShowError.jsp utiliza la directiva <%@page isErrorPage="true"%>, que le indica al compilador JSP que necesita generar una variable de instancia de excepción.
Ahora intente acceder a la página main.jsp, producirá los siguientes resultados:
java.lang.RuntimeException: ¡¡¡Condición de error!!!... Opps... Lo sentimos, se produjo un error. Aquí está el seguimiento de la pila de excepciones:
Puede utilizar etiquetas JSTL para escribir la página de error ShowError.jsp. El código de este ejemplo tiene casi la misma lógica que el código del ejemplo anterior, pero el código de este ejemplo está mejor estructurado y proporciona más información:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@page isErrorPage="true" %><html><head><title> Mostrar página de error</title></head><body><h1>Opps...</h1><table><tr valign="top"><td><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>Estado código:</b></td><td>${pageContext.errorData.statusCode}</td></tr><tr valign="top"><td><b>Seguimiento de pila:</b> </td><td><c:forEach var="rastro" items="${pageContext.exception.stackTrace}"><p>${trace}</p></c:forEach></td></tr></table></body></html>
Los resultados de ejecución son los siguientes:
Si desea poner manejo de excepciones en una página y manejar diferentes excepciones de manera diferente, entonces necesita usar el bloque try...catch.
El siguiente ejemplo muestra cómo utilizar un bloque try...catch colocando este código en main.jsp:
<html><head> <title>Probar... Ejemplo de captura</title></head><body><% try{ int i = 1; i = i / 0; + i); } catch (Exception e){ out.println("Se produjo una excepción: " + e.getMessage() } %></body></html>);
Intente acceder a main.jsp, producirá los siguientes resultados:
Se produjo una excepción: / por cero