Maîtrisez les intercepteurs Struts 2. Comprenez le rôle des intercepteurs dans la flexibilité du framework Struts 2. Identifiez les 3 grandes catégories d’intercepteurs. Comprenez la notion de ‘pile d’intercepteur’. Comprenez le role de la classe ActionInvocation et la relation entre intercepteur et Action Struts 2.Associez un intercepteur à une action Struts 2. Enfin, créez votre propre intercepteur d’authentification.
Objis, spécialiste de la formation Java, est heureux de vous offrir ce
tutoriel, extrait de séances pratiques de la formation Struts 2 dispensée par Objis.
Les + objis
70% de travaux pratiques
Clé USB avec tous les outils utilisés + Corrigés TPs
Bilan pédagogique individuel + conseils
Liens utiles
Documentation Struts 2
API Struts 2
Prérequis, outils et versions
JDK 6
Struts 2.3.1.2
Eclipse JEE Indigo
Tomcat 7
Objectifs
comprendre les intercepteurs struts 2 : types, roles.
comprendre la notion d ‘pile d’intercepteurs
créer un exemple d’intercepteur et le configurer
Programme
Partie 1 : Intercepteur utilitaires : TIMER et LOGGER’
Partie 2 : création et configuration intercepteur
Partie 3 : Intercepteurs de transfert de données : PARAMS, STATIC-PARAMS, AUTOWIRING, SERVLET-CONFIG, FILEUPLOAD
Partie 4 : Intercepteur de Workflow : WORKFLOW, VALIDATION, PREPARE, MODELDRIVEN
Partie 5 : Intercepteur EXCEPTION
Partie 6 : Intercepteur TOKEN
Durée
2h.
Rappel : Architecture Struts 2
Expliquez.
Expliquez la configuration suivante :
D’où vient cette configuration ? à quoi sert cette configuration ? Quand est’elle activée ?
Où se trouve le fichier struts-default.xml ?
Citez 3 intercepteurs ne faisant pas partie de la pile d’intercepteurs ‘defaultStack’.
Question : qu’est ce que l’interface ActionInvocation de Struts 2 ?
INFO : l’ActionInvocation encapsule l’éxécution d’une action avec ses intercepteurs (et Results) associés.
Qu’appelle t’on phase de ‘péprocessing’ et ‘postprocessing’ d’un intercepteur
Expliquez le rôle de la méthode Invoque ? Qui appelle cette méthode ? Dans quel cas ?
Quelle méthode permet de récupérer le contexte de l’Action ?
Quelle méthode permet de récupérer la ValueStack ?
Quelle méthode permet de récupérer le Result ?
Partie 1 : Intercepteur utilitaires : TIMER et LOGGER’
Identifiez la déclaration des intercepteurs ‘logger’ et ‘timer’ dans struts-default.xml
Ces intercepteurs font’ils parti de la ‘defaultStack’ ?
Analysez la configuration suivante :
Expliquez les lignes 14, 15, 16, 17, 18 et 35
Analysez les logs suivants :
Expliquez
Partie 2 : création et configuration d’un intercepteur
2 étapes :
— Etape 1 : codage
— Etape 2 : configuration
Etape 1 : codage de l’intercepteur
Analysez le code suivant :
Expliquez les lignes 6, 10, 25, 28
Expliquez les lignes 12, 16, 22
Etape 1 : configuration de l’intercepteur dans la stack
Analysez les logs
Expliquez.
Partie 3 :Intercepteurs de transfert de données : PARAMS, STATIC-PARAMS, AUTOWIRING, SERVLET-CONFIG, FILEUPLOAD
Intercepteur ‘PARAMS’
L’intercepteur ‘params’ gère le transfert les paramètres d’une requête struts2 dans les attributs des objets se trouvant dans la ValueStack.
Identifiez la déclaration de l’intercepteur ‘params’ dans struts-default.xml . Quelle est la classe qui gère cet intercepteur ?
Cet intercepteur fait’il parti de la defaultStack ?
Intercepteur ‘STATIC-PARAMS’
Identifiez la déclaration de l’intercepteur ‘static-params’ dans struts-default.xml . Quelle est la classe qui gère cet intercepteur ?
L’intercepteur ‘static-params’ transfert les paramètres de la configuration de l’action dans les attributs des objets se trouvant dans la ValueStack.
Cet intercepteur est’il placé avant ou après l’intercepteur ‘params’ dans la pile ? pour quoi ?.
L’ordre des intercepteurs est’il important ?
Cet intercepteur fait’il parti de la defaultStack ?
Intercepteur ‘AUTOWIRING’
Identifiez la déclaration de l’intercepteur ‘autowiring’ dans struts-default.xml .
Quelle est la classe qui gère cet intercepteur ?
Cet intercepteur joue un role clé dans l’intégration entre Struts 2 et Spring. En particulier, il permet de gérer l’Autowiring de propriétés de beans Spring.
Cet intercepteur fait’il parti de la defaultStack ?
Intercepteur ‘SERVLET-CONFIG’
Identifiez la déclaration de l’intercepteur ‘servlet-config’ dans struts-default.xml . Quelle est la classe qui gère cet intercepteur ?
Cet intercepteur fournit un moyen ‘propre’ d’injecter des objets de l’API Servlet dans vos actions.
En particulier, les interfaces suivantes permettent à cet intercepteur de rendre disponible les objets clés :
— l’implémentation de l’interface ‘ServletContextAware’ par votre action vous permet d’avoir accès via le framework de la classe ServletContexte
— ServletRequestAware –> HttpServletRequest
— ServletResponseAware — HttpServletResponse
— ParameterAware –> map (clé/valeur) paramètres requête
— RequestAware –> map attributs de requête
— SessionAware –> map attributs de session
— ApplicationAware –> map propriétés scope application
— PrincipalAware –> l’Objet Principal (== user d’un point de vu Sécurité)
Chacune de ces interfaces contient une méthode ‘setter’ à travers laquelle le framework vous ‘injecte’ l’objety d’ésiré.
A VOUS DE JOUER : En utilisant l’interface ‘ServletRequestAware’ Récupérez l’information entrée par l’utilisateur dans le formulaire HelloObjis.
La combinaison de l’intercepteur timer et de la récupération du paramètre produit dans les logs :
REMARQUE : ce n’est pas une bonne pratique d’utiliser ces interfaces dans vos actions car cela entraine un couplage fort de vos actions à l’API servlet.
Mieux vaut passer par la valueStack et le langage OGNL.
Intercepteur ‘FILEUPLOAD’
Identifiez la déclaration de l’intercepteur ‘fileupload’ dans struts-default.xml . Quelle est la classe qui gère cet intercepteur ?
Cet intercepteur transforme le fichier et les metadata d’une requête multipart en données gérable par l’intercepteur PARAMS.
Partie 4 : Intercepteur de Workflow : WORKFLOW, VALIDATION, PREPARE, MODELDRIVEN
WORKFLOW
Cet intercepteur travaille en collaboration avec votre action pour agir sur le workflow REQUETE – ACTION – RESULT.
Par exemple, en combinaison de l’implémentation d’interface Validatable, il permet de réaliser validation ‘basique’.
VALIDATION
Validation déclarative ‘haut de gamme’ , et non programmative comme l’approche de validation’basique’ basée sur methode validate().
Se base sur la configuration en xml et en annotation pour valider les champs formulaire de rquête. L’interface ValidationAware et l’intercepteur WORKFLOW sont nécessaires.
PREPARE
Technique pour ajouter votre propre workflow avant l’exécution d’une action.
permet d’appeler une méthode prepare() dans l’action (via interface Preparable). D’autre méthodes de la forme prepareNomMethode() peuvent être appelé dans le cas où il y a d’autre point d’entrées que la méthode execute().
MODELDRIVEN
Altère le workflow en appelant la méthode getModel() de l’action (via interface ModelDriven.) et met l’objet retourné dans la ValueStack.
Partie 5 : Intercepteur EXCEPTION
En premier dans la pile par défaut. Cet intercepteur centralise le traitement des exceptions en remplissant un objet ExceptionHolder qu’il place dans la ValueStack.
La page d’erreur pourra afficher alors l’exception. La page d’erreur se configure avec les balises global-results, result, global-exception-mappings et exception-mapping.
Ci-dessous toutes les exceptions du types java.lang.Exception entraineront l’affichage d’une page d’erreur spécifique.
— > Mettez en oeuvre cette configuration dans HelloStruts2
Partie 6 : Intercepteur TOKEN
gère un token unique dans les paramètres de la request pour vérifier si la page serait appelé une deuxième fois.
REMARQUES sur les Stacks
Les Stack intégrées:
Il faut utiliser une autre que celle par défaut seulement si il y a un impératif.
Les stack plus petites sont faites pour être modulaire et en créer de plus grandes.
Les intercepteurs inutilisés de la stack n’affectent pas les performances.