Cas d'Etude

Vous pouvez récupérer le projet que nous avons implémenté ici.
La page à lancer dans le projet de carnet d'adresse est example/Login.jsp.

Présentation des 2 FrameWorks

Vous pouvez récupérer la présentation orale que nous avons faites au format powerpoint.

Présentation du FrameWork

Introduction:

    Struts2 est basé sur une structuration de la couche présentation en Servlet JSF tout en respectant le modèle MVC 2 (Model-Vue Contrôleur 2). Le contrôleur frontal Struts est facilement configurable (la description de la configuration étant déclarative décrite en XML • fichiers strutsconfig.xml et cham-config.xml). Il réalise des traitements communs, par exemple la gestion des exceptions ou la gestion des messages, et délègue la partie variable à des sous-contrôleurs, les Actions.

    Struts 2 n’est pas une simple évolution de Struts 1. Il tire ses origines de deux framework J2EE, Struts 1 et WebWork.

    • Le projet WebWork, à l’initiative de la société OpenSymphony, a vu le jour en mars 2002. Créé à partir du noyau Struts, le framework a évolué introduisant de nouveaux concepts et fonctionnalités, sans ce soucier de la compatibilité avec Struts. Contrairement à leurs attentes, cette solution alternative à Struts n’a pas rencontré un engouement très important au sein de la communauté J2EE.

    • Struts 1 est un framework solide, largement éprouvé par le temps et plébiscité par un grand nombre. De ce fait, la compatibilité ascendante le freine dans ses évolutions. De nombreuses critiques se sont accumulées sans pouvoir être solutionnées dans l’état actuel des choses.

    Face à ce constat, en décembre 2005 les équipes de Struts 1 et de WebWork ont mis en commun leurs compétences pour développer un nouveau framework baptisé WebWork2, renommé par la suite Struts 2, dont la première version stable est sortie le 22 février 2007, sous le label 2.0.6.

    Pour sa part, Struts 1 continue son évolution et est actuellement dans sa huitième version officielle (1.3.8) depuis le 10 Mars 2007.


Pourquoi Struts2 :

    • 1. Il évite d’avoir à insérer du code Java :
      < html:text property="id_employe"/>
      au lieu de :
      < input type="text" name="id_employe"
      value="< %= addMemberForm.getId_employe() %>"/>

    • 2. Il inclut le traitement d’erreurs :
      Les tags <html:errors> permettent d’afficher les éventuels messages d’erreur qui ont étéstockés dans la session par les composants métiers

Comparaison de Struts1 et de Struts2 :

    L’architecture générale n’a pas changé. Cependant, les « ActionForm », une notion fondamentale dans Struts 1, ont disparu dans Struts 2 et se retrouvent directement intégrés aux classes d’action. Pour accentuer la simplification, le passage obligatoire lors de l’appel d’une action par la méthode « execute » n’est plus systématique. En effet, Struts 2 autorise l’appel d’une action à partir de n’importe quelle méthode implémentée dans l’action.


Figure 1 : Fonctionnement de Struts1


Figure 2 : Fonctionnement de Struts2


Les intercepteurs:

    Au sein du cycle de vie de Struts 2, des intercepteurs ou des piles d’intercepteurs peuvent être configurés. Ils sont utilisés pour effectuer des pré/post traitements sur la requête. Voici un exemple d’intercepteur utilisé pour vérifier la validité de l’authentification d’un utilisateur :

      public class AuthenticationInterceptor implements Interceptor {  

        public String intercept(ActionInvocation actionInvocation) {
          if (isAuthenticated(user)) {
            // Authentication OK
            return actionInvocation.invoke();
          } else {
            // Redirection sur la page de login
            return Action.LOGIN;
          }
        }
      }


    L’intercepteur est défini dans le fichier de configuration (struts.xml par défaut) et est appliqué au sein de ce même fichier sur chaque action :

      < interceptors>
        < interceptor name=“authentication”
          class=“project.interceptors.AuthenticationInterceptor”/>
      < /interceptors>

        < action name=“menu” class=“project.actions.MenuAction”>
        < interceptor-ref name=“authentication”/>
        < result>menu.jsp</result>
        < result name=“input”>form.jsp</result>
      < /action>

Haut de page