Gestion des exceptions JSP – Page d’erreur JSP

La gestion des exceptions en JSP est effectuée par les pages d’exceptions JSP.

Gestion des exceptions en JSP

Il y a quelque temps, j’ai écrit un article sur la gestion des exceptions de servlet et pourquoi nous en avons besoin. La même explication s’applique également aux pages JSP, c’est pourquoi Java EE propose une approche claire pour la gestion des exceptions en JSP à l’aide des pages d’erreur JSP. Pour gérer les exceptions générées par la page JSP, tout ce dont nous avons besoin est une page d’erreur et de définir la page d’erreur en JSP à l’aide de la directive jsp page.

Page d’erreur JSP

Pour créer une page d’erreur JSP, nous devons définir la valeur de l’attribut isErrorPage de la directive de la page à true, puis nous pouvons accéder à l’exception objet implicite jsp dans la JSP et l’utiliser pour envoyer un message d’erreur personnalisé au client.

Configuration de la page d’erreur JSP

Nous devons définir l’attribut de directive de page errorPage pour définir le JSP qui gérera toute exception lancée par la méthode de service JSP. Lorsque la page d’erreur JSP est traduite en code de servlet, elle étend org.apache.jasper.runtime.HttpJspBase dans Tomcat.

Configuration du descripteur de déploiement de la page d’erreur

La plupart du temps, nous avons une page d’erreur commune que nous voulons utiliser pour tous les JSPs, donc plutôt que de la configurer dans tous les JSPs individuellement, nous pouvons définir la page d’erreur dans web.xml avec l’élément error-page. Nous pouvons configurer la page d’erreur JSP pour gérer également d’autres codes d’erreur comme 404. Voyons comment tout cela s’assemble dans une application web. Nous allons créer une application web simple JSPExceptionHandling dont la structure du projet ressemblera à l’image ci-dessous. Le point d’entrée de l’application est index.jsp dont le code est donné ci-dessous.

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

Lorsque nous soumettons le formulaire, la demande sera envoyée à login.jsp, le code est comme ci-dessous.

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

Remarquez que si les paramètres d’entrée sont nuls ou vides, cela déclenche une ServletException avec un message approprié et errorPage est défini comme error.jsp dont le code est comme ci-dessous.

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

Remarquez que la valeur de l’attribut de directive de page isErrorPage est true. Lorsque les ressources de l’application lancent des exceptions, le code d’erreur est 500, le code est écrit pour gérer à la fois les exceptions au niveau de l’application et les erreurs telles que 404 – page non trouvée. Remarquez également l’utilisation de la directive include pour présenter à l’utilisateur la page de connexion en cas d’exception. Voici le web.xml où nous définissons la page d’erreur pour l’application.

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

Maintenant, lorsque nous exécutons l’application ci-dessus, nous obtenons les pages suivantes en réponse. Page de connexion Page d’erreur JSP pour l’exception Page d’erreur JSP pour le code d’erreur 404 C’est tout pour la gestion des exceptions dans les pages JSP, c’est très facile à implémenter et nous devrions l’utiliser pour nous assurer de gérer toutes les exceptions et les codes d’erreur et envoyer une réponse utile au client plutôt que la page d’erreur par défaut du conteneur.

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