Gestion des erreurs de page JSP

La gestion des erreurs pour les pages JSP peut être effectuée de différentes façons.

Gestion des erreurs dans la page en cours

Pour les pages JSP qui nécessitent une gestion des erreurs et une récupération plus complexes, une page peut être écrite pour gérer directement les erreurs du bean de données ; c'est-à-dire gérer les erreurs à partir de la même page. La page JSP peut soit capturer les exceptions qui sont lancées par le bean de données, soit vérifier les codes d'erreur qui sont définis dans chaque bean de données, selon la façon dont le bean de données a été activé. La page JSP peut alors prendre une mesure de récupération appropriée qui est basée sur l'erreur reçue. Une page JSP peut utiliser n'importe quelle combinaison des étendues de gestion des erreurs suivantes.

La page JSP peut utiliser des blocs try et catch pour capturer l'exception afin qu'elle puisse prendre les mesures appropriées en fonction du type d'exception. Voici un exemple de snippet JSP qui utilise les instructions Java try et catch :

SomeDataBean sdb = new SomeDataBean();
sdb.setSomeProperty("");
try {         
	com.ibm.commerce.beans.DataBeanManager.activate(sdb, request); }
catch(Exception ex){
  //Handle the exception in whichever way you want..
}

Pour obtenir plus de détails sur une erreur, incluez un ErrorDataBean dans votre fichier JSP. Les ErrorDataBeans peuvent être instanciés, remplis et utilisés. Voici un exemple :

ErrorDataBean errorBean = new ErrorDataBean ( );
com.ibm.commerce.beans.DataBeanManager.activate (errorBean, request);

Une fois que le bean de données est instancié, il dispose de méthodes permettant d'obtenir ExceptionData, ExceptionMessage, MessageKey, ExceptionType et d'autres méthodes d'aide.

Pour les fichiers JSP de vitrine, utilisez le StoreErrorDataBean pour gérer les erreurs.

Gestion des erreurs en dehors de la page en cours

Vous pouvez disposer d'une page de gestion d'erreurs dédiée distincte déléguant la requête à cette page lorsqu'une exception se produit dans la page JSP actuelle. Lorsque vous utilisez une page de gestion des erreurs distincte, vous pouvez avoir deux options : gestion des erreurs au niveau de la page ou au niveau de l'application.

Gestion des erreurs au niveau de la page

Une page JSP peut spécifier sa propre page JSP d'erreur par défaut à partir d'une exception qui se produit à l'intérieur, via la balise d'erreur JSP. Cela permet à une page JSP de spécifier sa propre gestion d'une erreur. Une page JSP qui ne contient pas de balise d'erreur JSP a une erreur dans la page JSP d'erreur au niveau de l'application.

Voici un exemple d'inclusion de la gestion des erreurs au niveau de la page :

  1. Créez une seule page JSP d'erreur qui gère les erreurs qui se produisent sur toutes les autres pages JSP de l'application. Pour spécifier une page JSP comme page errorHandler, utilisez cette directive de page JSP :
       <%@ page isErrorPage="true" %> 
    Dans la page JSP errorHandler, utilisez ErrorDataBean ou StoreErrorDataBean pour récupérer plus d'informations sur l'exception et afficher des messages.
  2. Incluez la page JSP errorHandler dans d'autres pages JSP en utilisant cette directive JSP pour spécifier que si des exceptions se produisent sur la page en cours, il faut transmettre la requête à errorHandler.jsp :
    <%@ page errorPage="/errorHandler.jsp" %>

Gestion des erreurs au niveau de l'application

Une application sous HCL Commerce peut spécifier une page JSP d'erreur par défaut lorsqu'une exception de l'une de ses pages servlets ou JSP se produit. La page JSP d'erreur au niveau de l'application peut être utilisée comme gestionnaire d'erreurs au niveau du site ou du magasin.

Utilisez la stratégie de gestion des erreurs au niveau de l'application uniquement lorsque cela est nécessaire.

Incluez le gestionnaire d'erreurs au niveau de l'application à l'aide du descripteur de déploiement (WEB-INF/web.xml) de l'application Web. Par exemple, si vous souhaitez gérer une PaymentException de manière générique au niveau de l'application, codez un fichier paymentError.jsp et spécifiez la même dans le fichier web.xml à l'aide de la balise <error-page>. Voici un exemple :

<error-page> 
  <exception-type>PaymentException</exception-type> 
  <location>/paymentError.jsp</location>
</error-page>

A l'aide de cet exemple, si l'exception PaymentException est lancée dans une page JSP qui ne gère pas certains types d'exception, ou si la page JSP ne spécifie pas sa propre page d'erreur, la demande est redirigée vers paymentError.jsp. Le fichier paymentError.jsp peut utiliser ErrorDataBean ou StoreErrorDataBean pour récupérer plus d'informations sur l'exception.

Pour inclure une page générique pour toutes les exceptions, au niveau de l'application, utilisez la procédure suivante dans le fichier web.xml :

<error-page>
  <exception-type>Exception</exception-type>
  <location>/paymentError.jsp</location>
</error-page>

Dans la balise <exception-type>, au lieu d'utiliser le nom de classe d'exception, vous pouvez spécifier le code d'erreur spécifique, tel que l'erreur de navigateur 404, qui est une erreur de page introuvable.

Remarque : Un changement dans le webcontainer peut amener le webcontainer à gérer une exception JSP plutôt que l'erreur soit propagée au servlet de commerce pour une gestion appropriée. Pour lancer des exceptions au servlet qui effectue l'expédition, ajoutez la propriété personnalisée com.ibm.ws.webcontainer.dispatcherRethrowSER aux paramètres du conteneur Web et définissez la propriété sur true.