Struts - Exemple de gestionnaire d'exceptions personnalisé
Téléchargez cet exemple
Dans le framework Struts, le<global-exception> est utilisé pour afficher votre page d'erreur personnalisée, au lieu de la page d'erreur HTTP Status 500 classique par défaut:
La page d'erreur par défaut est moche et pas du tout professionnelle. En outre, le message d'erreur est suffisamment descriptif pour divulguer vos informations système à l'utilisateur final.
1. + gestionnaire d'exceptions par défaut
Voici un exemple de<global-exception> avec un gestionnaire d'exceptions par défaut déclaré dans "struts.config.xml" pour remplacer la page d'erreur HTTP 500 par défaut par votre page d'erreur descriptive personnalisée.
//... //...
Ci-dessus, le gestionnaire d'exceptions Struts par défaut «org.apache.struts.action.ExceptionHandler» sera appelé lorsqu'une exception IOException est levée par une action, et la transmettra au fichiererror.jsp. La clé est une clé dans votre fichier de propriétés de ressources de message.
Common.properties
#common module error message error.global.mesage = Ooooppps... Sometime wraong in this site, please come back later
error.jsp
Struts Global Exception Example
2. + gestionnaire d'exceptions personnalisé
Dans le gestionnaire d'exceptions par défaut, vous n'avez aucun moyen de contrôler la façon de traiter l'exception. Dans la plupart des cas, vous devrez peut-être enregistrer l'exception pour une analyse plus approfondie. Pour ce faire, vous avez besoin d'un gestionnaire d'exceptions personnalisé pour consigner toutes les exceptions dans un autre magasin de données comme un système de fichiers ou une base de données.
Voici un exemple de gestionnaire d'exceptions personnalisé à configurer pour «java.lang.Exception» afin qu'il soit appelé pour toute exception levée par Action. Pour créer un gestionnaire d'exceptions personnalisé, vous devez sous-classer «org.apache.struts.action.ExceptionHandler» et remplacer la méthode d'exécution.
MyCustomExceptionHandler.java
package com.example.common.exception; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ExceptionHandler; import org.apache.struts.config.ExceptionConfig; public class MyCustomExceptionHandler extends ExceptionHandler{ private static final Logger logger = Logger.getLogger(MyCustomExceptionHandler.class); @Override public ActionForward execute(Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance, HttpServletRequest request, HttpServletResponse response) throws ServletException { //log the error message logger.error(ex); return super.execute(ex, ae, mapping, formInstance, request, response); } }
//... //...
Ci-dessus, lorsqu'une exception est levée par Action, elle appelle la méthodeexecute() de votre gestionnaire d'exceptions personnalisé MyCustomExceptionHandler au lieu du gestionnaire d'exceptions par défaut.
Référence
-
Gestionnaire d'exceptions Struts -http://struts.apache.org/1.x/userGuide/building_controller.html