Gestion des exceptions JSP
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.
Exception d'exécution : Une exception d'exécution peut avoir été évitée par le programmeur. Cette exception 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 donnera plusieurs façons simples et élégantes de gérer les exceptions et les erreurs d'exécution.
Utilisation de l'objet Exception
L'objet exception est une instance de la 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&Description | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | < strong>public String getMessage()
<🎜>Renvoie des informations anormales. Ces informations sont initialisées dans le constructeur Throwable | ||||||||||||||
2 | public ThrowablegetCause()<🎜> >< 🎜 >Renvoie la cause de l'exception, tapez Throwable object | ||||||||||||||
3 | public String toString()<🎜>< br /><🎜>Nom de la classe de retour | ||||||||||||||
4 | public void printStackTrace()<🎜> < 🎜>Envoyez la trace de la pile d'exceptions vers System.err | ||||||||||||||
5 | public StackTraceElement [] getStackTrace()<🎜 > <🎜>Renvoyer la trace de la pile d'exceptions sous la forme d'un tableau d'éléments de trace de pile | ||||||||||||||
6 | public ThrowablefillInStackTrace( ) strong><🎜> <🎜>Utiliser la trace de pile actuelle pour remplir l'objet Throwable |
JSP offre la possibilité de 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 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>Error Handling Example</title> </head> <body> <% // Throw an exception to invoke the error page int x = 1; if (x == 1) { throw new RuntimeException("Error condition!!!"); } %> </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>Sorry, an error occurred.</p> <p>Here is the exception stack trace: </p> <pre> <% exception.printStackTrace(response.getWriter()); %>
Notez que le fichier ShowError.jsp utilise la directive <%@page isErrorPage="true"%> indique que le compilateur JSP 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: Error condition!!! ...... Opps... Sorry, an error occurred. Here is the exception stack trace:
Utilisez les balises JSTL dans les pages d'erreur
Vous pouvez utiliser les balises JSTL É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 a une meilleure structure et peut fournir 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>Stack trace:</b></td> <td> <c:forEach var="trace" items="${pageContext.exception.stackTrace}"> <p>${trace}</p> </c:forEach> </td> </tr> </table> </body> </html>
Les résultats d'exécution sont les suivants :
Utilisez le bloc try...catch
Si vous souhaitez mettre la gestion des exceptions sur une seule page et gérer différentes exceptions différemment, vous devez utiliser try ... attraper le bloc.
L'exemple suivant montre comment utiliser un bloc try...catch et placer 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>
Essayez d'accéder à main.jsp, cela produira les résultats suivants :
An exception occurred: / by zero