Struts - <global-exception> exemple de gestionnaire d’exception personnalisé

Struts - Exemple de gestionnaire d'exceptions personnalisé

Téléchargez cet exemple -Struts-Global-Exception-Example.zip

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:

struts-global-exception-1

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