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

Exceção no tratamento em JSP é feito por páginas de exceção JSP.

Tratamento de Exceções em JSP

Algum tempo atrás, escrevi um post sobre Tratamento de Exceção em Servlet e por que precisamos disso. A mesma explicação também se aplica às páginas JSP, e é por isso que o Java EE fornece uma abordagem clara para o tratamento 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 diretiva de página jsp.

Página de Erro JSP

Para criar uma página de erro JSP, precisamos definir o valor do atributo isErrorPage da diretiva de página como true. Em seguida, podemos acessar a exceção 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

Precisamos definir o atributo errorPage da diretiva da página para indicar a JSP que 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 desejamos usar para todas as JSPs. Portanto, 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, também. Vamos ver como todas essas peças se encaixam 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>

Quando enviamos o formulário, a solicitação será enviada para login.jsp, cujo código é como 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 forem nulos ou vazios, é lançada uma ServletException com uma mensagem adequada e errorPage é definido como error.jsp, cujo código é como abaixo.

<%@ 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, o código é 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 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, quando executamos a aplicação acima, obtemos as seguintes páginas como resposta. Página de Login Página de Erro JSP para Exceção 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 lidamos com todas as exceções e códigos de erro e enviamos uma resposta útil para o 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