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()
序号方法&描述
1public String getMessage()


返回异常的信息。这个信息在Throwable构造函数中被初始化
2public ThrowablegetCause()


返回引起异常的原因,类型为Throwable对象
3public String toString()


返回类名
4public void printStackTrace()


将异常栈轨迹输出至System.err
5public StackTraceElement [] getStackTrace()


以栈轨迹元素数组的形式返回异常栈轨迹
6public ThrowablefillInStackTrace()


使用当前栈轨迹填充Throwable对象

<🎜>Renvoie des informations anormales. Ces informations sont initialisées dans le constructeur Throwable
2public ThrowablegetCause()<🎜>
>< 🎜 >Renvoie la cause de l'exception, tapez Throwable object
3public String toString()<🎜>< br /><🎜>Nom de la classe de retour
4public void printStackTrace()<🎜>
< 🎜>Envoyez la trace de la pile d'exceptions vers System.err
5public StackTraceElement [] getStackTrace()<🎜 >
<🎜>Renvoyer la trace de la pile d'exceptions sous la forme d'un tableau d'éléments de trace de pile
6public ThrowablefillInStackTrace( )<🎜>
<🎜>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 :

jsp-exeception-1.jpg


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