Manejo de Excepciones JSP – Página de Error JSP

El manejo de excepciones en JSP se realiza mediante páginas de excepción de JSP.

Manejo de Excepciones en JSP

Hace algún tiempo escribí una publicación acerca del Manejo de Excepciones en Servlet y por qué lo necesitamos. La misma explicación también es aplicable para las páginas JSP y es por eso que Java EE proporciona un enfoque claro para el manejo de excepciones en JSP utilizando páginas de error de JSP. Para manejar las excepciones lanzadas por la página JSP, todo lo que necesitamos es una página de error y definir la página de error en JSP utilizando la directiva de página jsp.

Página de Error JSP

Para crear una página de error de JSP, necesitamos establecer el atributo de directiva de página isErrorPage con valor verdadero, luego podemos acceder a la excepción objeto implícito jsp en la JSP y usarlo para enviar un mensaje de error personalizado al cliente.

Configuración de Página de Error JSP

Necesitamos establecer el atributo errorPage de la directiva de página para definir la JSP que manejará cualquier excepción lanzada por el método de servicio JSP. Cuando la página de error JSP se traduce a código servlet, extiende org.apache.jasper.runtime.HttpJspBase en Tomcat.

Configuración del Descriptor de Implementación de Página de Error

En la mayoría de los casos, tenemos una página de error común que queremos usar para todas las JSP, así que en lugar de configurarla en cada JSP individualmente, podemos definir la página de error en web.xml con el elemento error-page. También podemos configurar la página de error JSP para manejar otros códigos de error como el 404. Veamos cómo se integran todos estos elementos en una aplicación web. Crearemos una aplicación web simple llamada JSPExceptionHandling, cuya estructura del proyecto se verá como en la siguiente imagen. El punto de entrada de la aplicación es index.jsp, cuyo código se muestra a continuación.

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Login Page</title>
</head>
<body>
<form action="login.jsp" method="post">
<strong>User ID</strong>:<input type="text" name="id"><br>
<strong>Password</strong>:<input type="password" name="password"><br>
<input type="submit" value="Login">
</form>
</body>
</html>

Cuando enviamos el formulario, la solicitud se enviará a login.jsp, cuyo código es el siguiente.

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII" errorPage="error.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>User Home Page</title>
</head>
<body>
<%
	String user = request.getParameter("id");
	String pwd = request.getParameter("password");
	
	if(user == null || "".equals(user) || pwd == null || "".equals(pwd)){
		throw new ServletException("Mandatory Parameter missing");
	}
	
%>

<%-- do some DB processing, not doing anything for simplicity --%>
Hi <%=user %>
</body>
</html>

Ten en cuenta que si los parámetros de entrada son nulos o vacíos, se lanza una ServletException con un mensaje adecuado y se define errorPage como error.jsp, cuyo código es el siguiente.

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII" isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Error Page</title>
</head>
<body>
<% if(response.getStatus() == 500){ %>
<font color="red">Error: <%=exception.getMessage() %></font><br>

<%-- include login page --%>
<%@ include file="index.jsp"%>
<%}else {%>
Hi There, error code is <%=response.getStatus() %><br>
Please go to <a href="/index.jsp">home page</a>
<%} %>
</body>
</html>

Observa que el valor del atributo de la directiva de página isErrorPage es true. Cuando los recursos de la aplicación generan excepciones, el código de error es 500, y el código está escrito para manejar tanto excepciones a nivel de la aplicación como errores como el 404 – página no encontrada. También observa el uso de la directiva include para presentar al usuario la página de inicio de sesión en caso de cualquier excepción. Aquí está el web.xml donde estamos definiendo la página de error para la aplicación.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://java.sun.com/xml/ns/javaee" xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>JSPExceptionHandling</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
   
   <error-page>
   <error-code>404</error-code>
   <location>/error.jsp</location>
   </error-page>
   
   <error-page>
   <exception-type>java.lang.Throwable</exception-type>
   <location>/error.jsp</location>
   </error-page>
   
</web-app>

Ahora, cuando ejecutamos la aplicación anterior, obtenemos las siguientes páginas como respuesta. Página de inicio de sesión Página de error JSP para la excepción Página de error JSP para el código de error 404 Eso es todo para el manejo de excepciones en páginas JSP. Es muy fácil de implementar y deberíamos usarlo para asegurarnos de manejar todas las excepciones y códigos de error y enviar una respuesta útil al cliente en lugar de la página de error predeterminada del contenedor.

Source:
https://www.digitalocean.com/community/tutorials/jsp-exception-handling-jsp-error-page