Tratamento de Exceções JSP – Página de Erro JSP

Exceção no manuseio de JSP é feita por páginas de exceção JSP.

Manuseio de Exceção em JSP

Algum tempo atrás, escrevi uma postagem sobre Manuseio de Exceção Servlet e por que precisamos dele. A mesma explicação também é aplicável para páginas JSP, e é por isso que o Java EE fornece uma abordagem clara para o manuseio de exceções em JSP usando páginas de erro JSP. Para lidar com exceções lançadas pela página JSP, tudo o que precisamos é uma página de erro e definir a página de erro em JSP usando a diretiva de página JSP.

Página de Erro JSP

Para criar uma página de erro JSP, precisamos definir o valor do atributo da diretiva de página isErrorPage como true; então, podemos acessar a objeto implícito jsp na JSP e usá-lo para enviar uma mensagem de erro personalizada para o cliente.

Configuração da Página de Erro JSP

É necessário definir o atributo errorPage da diretiva da página para especificar a JSP que irá lidar com qualquer exceção lançada pelo método de serviço JSP. Quando a página de erro JSP é traduzida para código servlet, ela estende org.apache.jasper.runtime.HttpJspBase no Tomcat.

Configuração do Descritor de Implantação da Página de Erro

Na maioria das vezes, temos uma página de erro comum que queremos usar para todas as JSPs, então, em vez de configurá-la em todas as JSPs individualmente, podemos definir a página de erro no web.xml com o elemento error-page. Podemos configurar a página de erro JSP para lidar com outros códigos de erro, como 404. Vamos ver como tudo isso se encaixa em uma aplicação web. Vamos criar uma aplicação web simples chamada JSPExceptionHandling, cuja estrutura do projeto será semelhante à imagem abaixo. O ponto de entrada da aplicação é index.jsp, cujo código é fornecido abaixo.

<%@ 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>

Ao enviarmos o formulário, a solicitação será enviada para login.jsp, cujo código é semelhante ao abaixo.

<%@ 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>

Observe que se os parâmetros de entrada estiverem nulos ou vazios, será lançada a ServletException com uma mensagem apropriada, e a errorPage está definida como error.jsp, cujo código é o seguinte.

<%@ 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>

Observe que o valor do atributo da diretiva da página isErrorPage é true. Quando os recursos da aplicação lançam exceções, o código de erro é 500, e o código está escrito para lidar tanto com exceções de nível de aplicação quanto com erros como 404 – página não encontrada. Observe também o uso da diretiva de inclusão para apresentar ao usuário a página de login em caso de qualquer exceção. Aqui está o arquivo web.xml onde estamos definindo a página de erro para a aplicação.

<?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>

Agora, ao executar a aplicação acima, obtemos as seguintes páginas como resposta. Página de Login Página de Erro JSP para Exceções Página de Erro JSP para Código de Erro 404 Isso é tudo para o tratamento de exceções em páginas JSP; é muito fácil de implementar e devemos usá-lo para garantir que lidemos com todas as exceções e códigos de erro, enviando uma resposta útil ao cliente, em vez da página de erro padrão do contêiner.

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