Lors de l'écriture de programmes JSP, les programmeurs peuvent manquer certains bogues, et ces bogues peuvent apparaître n'importe où dans le programme. Il existe généralement les types d’exceptions suivants dans le code JSP :
Exception vérifiée : une exception vérifiée est une erreur utilisateur typique ou une erreur que le programmeur ne peut pas prévoir. Par exemple, si un fichier est sur le point d’être ouvert, mais qu’il est introuvable, une exception est levée. Ces exceptions ne peuvent pas simplement être ignorées au moment de la compilation.
Exceptions d'exécution : une exception d'exécution peut avoir été évitée par le programmeur et sera ignorée au moment de la compilation.
Erreur : Il n'y a pas d'exception ici, mais le problème est que cela échappe au contrôle de l'utilisateur ou du programmeur. Les erreurs sont souvent ignorées dans le code et vous ne pouvez pas y faire grand-chose. Par exemple, erreur de débordement de pile. Ces erreurs seront ignorées au moment de la compilation.
Cette section vous présentera plusieurs façons simples et élégantes de gérer les exceptions et les erreurs d'exécution.
L'objet d'exception est une instance d'une sous-classe Throwable et n'est disponible que dans les pages d'erreur. Le tableau suivant répertorie quelques méthodes importantes de la classe Throwable :
numéro de série | Méthode et description |
---|---|
1 | public String getMessage() renvoie des informations sur les exceptions. Ces informations sont initialisées dans le constructeur Throwable |
2 | public ThrowablegetCause() renvoie la cause de l'exception, le type est un objet Throwable |
3 | public String toString() renvoie le nom de la classe |
4 | public void printStackTrace() génère la trace de la pile d'exceptions dans System.err |
5 | public StackTraceElement [] getStackTrace() renvoie la trace de pile d'exception sous la forme d'un tableau d'éléments de trace de pile |
6 | public ThrowablefillInStackTrace() utilise la trace actuelle de la pile pour remplir l'objet Throwable |
JSP offre la possibilité de spécifier des pages 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 spécifie une page d'erreur pour main.jsp. Utilisez la directive <%@page errorPage="XXXXX"%> pour spécifier une page d'erreur.
<%@ page errorPage="ShowError.jsp" %><html><head> <title>Exemple de gestion des erreurs</title></head><body><% // Lance 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>Afficher la page d'erreur</title></head><body><h1>Opps...</h1><p>Désolé, une erreur s'est produite.</p><p>Voici la trace de la pile d'exceptions : </p><pre><% exception.printStackTrace(response.getWriter() );
Notez que le fichier ShowError.jsp utilise la directive <%@page isErrorPage="true"%>, qui indique au compilateur JSP qu'il doit générer une variable d'instance d'exception.
Essayez maintenant d'accéder à la page main.jsp, cela produira les résultats suivants :
java.lang.RuntimeException : Condition d'erreur !!!... Opps... Désolé, une erreur s'est produite. Voici la trace de la pile d'exceptions :
Vous pouvez utiliser des balises JSTL pour écrire la page d'erreur ShowError.jsp. Le code de cet exemple a presque la même logique que le code de l'exemple précédent, mais le code de cet exemple est mieux structuré et fournit plus d'informations :
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@page isErrorPage="true" %><html><head><title> Afficher la page d'erreur</title></head><body><h1>Opps...</h1><table><tr valign="top"><td><b>Erreur :</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>Statut code :</b></td><td>${pageContext.errorData.statusCode}</td></tr><tr valign="top"><td><b>Trace de la pile :</b> </td><td><c:forEach var="trace" items="${pageContext.exception.stackTrace}"><p>${trace}</p></c:forEach></td></tr></table></body></html>
Les résultats en cours d'exécution sont les suivants :
Si vous souhaitez gérer les exceptions dans une page et gérer différentes exceptions différemment, vous devez utiliser le bloc try...catch.
L'exemple suivant montre comment utiliser un bloc try...catch en plaçant ce code dans main.jsp :
<html><head> <title>Essayez...Exemple de capture</title></head><body><% try{ int i = 1; i = i / 0; + i); } catch (Exception e){ out.println("Une exception s'est produite : " + e.getMessage() } %></body></html>);
Essayez d'accéder à main.jsp, cela produira les résultats suivants :
Une exception s'est produite : / par zéro