English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Gestion des exceptions JSP

Lors de l'écriture de programmes JSP, le programmeur peut oublier certains BUG, qui peuvent apparaître n'importe où dans le programme. Les exceptions dans le code JSP sont généralement de plusieurs types:

  • Exception vérifiée: Une exception vérifiée est une erreur typique de l'utilisateur ou une erreur que le programmeur ne peut pas prévoir. Par exemple, si un fichier doit être ouvert mais qu'il ne peut pas être trouvé, une exception est lancée. Ces exceptions ne peuvent pas être simplement ignorées à la phase de compilation.
  • Exception en temps de fonctionnement: Une exception en temps de fonctionnement peut déjà avoir été évitée par le programmeur, cette exception sera ignorée à la phase de compilation.
  • Erreur: L'erreur n'est pas une exception, mais le problème est qu'elle dépasse le contrôle de l'utilisateur ou du programmeur. Les erreurs sont généralement ignorées dans le code et vous ne pouvez presque rien faire à leur sujet. Par exemple, une erreur de dépassement de pile. Ces erreurs seront ignorées à la phase de compilation.

Cette section présentera plusieurs façons simples et élégantes de gérer les exceptions et les erreurs en temps de fonctionnement.

Utiliser l'objet Exception

L'objet exception est un exemple de sous-classe de Throwable, disponible uniquement dans la page d'erreur. Le tableau suivant liste quelques méthodes importantes de la classe Throwable:

Numéro Méthode&Description
1 public String getMessage()

Retourner l'information de l'exception. Cette information est initialisée dans le constructeur de Throwable
2 public Throwable getCause()

Retourner la cause de l'exception, de type objet Throwable
3 public String toString()

Retourner le nom de la classe
4 public void printStackTrace()

Sortir la trace de pile de l'exception vers System.err
5 public StackTraceElement [] getStackTrace()

Retourner la trace de pile de l'exception sous forme d'un tableau d'éléments de pile
6 public Throwable fillInStackTrace()

Utiliser la trace de pile actuelle pour remplir l'objet Throwable

JSP offre une option pour spécifier une page d'erreur pour chaque page JSP. Chaque fois que la page lève une exception, le conteneur JSP appelle automatiquement la page d'erreur.

L'exemple suivant attribue une page d'erreur à main.jsp. Utilisez l'instruction <%@page errorPage="XXXXX"%> pour spécifier une page d'erreur.

<%@ page errorPage="ShowError.jsp" %>
<html>
<head>
   <title>Gestion des erreurs d'exemple</title>
</head>
<body>
<%
   // Lancer une exception pour appeler la page d'erreur
   int x == 1;
   if (x == 1)
   {
      throw new RuntimeException("Condition d'erreur!!!");
   }
%>
</body>
</html>

Maintenant, écrivez le fichier ShowError.jsp comme suit :

<%@ page isErrorPage="true" %>
<html>
<head>
<title>Show Error Page</title>
</head>
<body>
<h1>Opps...</h1>
<p>Désolé, une erreur s'est produite.</p>
<p>Voici le pile d'exception : </p>
<pre>
<% exception.printStackTrace(response.getWriter()); %>

On remarque que le fichier ShowError.jsp utilise l'instruction <%@page isErrorPage="true"%>, qui informe le compilateur JSP de la nécessité de générer une variable d'exemple d'exception.

Maintenant, essayez d'accéder à la page main.jsp, elle produira le résultat suivant :

java.lang.RuntimeException: Condition d'erreur!!!
......
Opps...
Désolé, une erreur s'est produite.
Voici le pile d'exception :

Utilisation des balises JSTL dans la page d'erreur

On peut utiliser les balises JSTL pour écrire la page d'erreur ShowError.jsp. Le code de cet exemple est presque identique à celui de l'exemple précédent, mais il a une meilleure structure et fournit plus d'informations :

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page isErrorPage="true" %>
<html>
<head>
<title>Show Error Page</title>
</head>
<body>
<h1>Opps...</h1>
<table width="100%" border="1">
<tr valign="top">
<td width="40%"><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>Status code:</b></td>
<td>${pageContext.errorData.statusCode}</td>
</tr>
<tr valign="top">
<td><b>Trace du stack :</b></td>
<td>
<c:forEach var="trace" 
         items="${pageContext.exception.stackTrace}">
<p>${trace}</p>
</c:forEach>
</td>
</tr>
</table>
</body>
</html>

Résultat de l'exécution :

Utilisation du bloc try...catch

Si vous souhaitez gérer les exceptions sur une page et traiter différentes exceptions différemment, vous devez utiliser le bloc try...catch.

Le prochain exemple montre comment utiliser le bloc try...catch, mettez ce code dans main.jsp :

<html>
<head>
   <title>Try...Catch Example</title>
</head>
<body>
<%
   try{
      int i = 1;
      i = i / 0;
      out.println("The answer is ") + i);
   }
   catch (Exception e){
      out.println("An exception occurred: ") + e.getMessage());
   }
%>
</body>
</html>

Essayer d'accéder à main.jsp, il会产生以下结果:

Une exception s'est produite : / par zero