Projet JEE approfindi
Présentation des deux frameworks STRUTS 2 et JAXB

Auteurs : Bastien BROUARD, Olivier LESAGE, Vincent PIETRI, Adrien PRIOUL, Syslvain TRUONG-MINH

Sommaire

Présentation de STRUTS 2

Installation

Tutoriel d'utilisation

Présentation de JAXB

Installation

Tutoriel d'utilisation

Conclusion

Présentation de STRUTS 2

Introduction

STRUTS 2 est un framework issu d'une fusion de deux autres frameworks : STRUTS 1 et WEBWORK. Il regroupe tous les avantages de ces deux frameworks. Cependant, on ne peut considérer que STRUTS 2 soit une extension de STRUTS 1, suite à la refonte complète de ce nouveau. Par conséquentn, les applications web développées sous STRUTS 1 devront être complètement redéveloppées pour être sous STRUTS 2. Les principaux avantages de STRUTS 2 sont les suivants :

Ce framework permet d’implémenter le pattern MVC II.

Schema MVC2

Lorsqu’un client envoie une requête, c’est le contrôleur qui la reçoit en premier. Celui-ci va appeler l’action voulue. L’action peut recevoir des paramètres et peut en envoyer. Une fois le traitement de l’action terminée elle renvoie au contrôleur un String « SUCCESS » ou « ERROR » (elle peut en renvoyer d’autres, mais nous n’avons utilisé que ces deux-là). En fonction du String renvoyé par l’action, le contrôleur sélectionne la JSP "résultat" à envoyer au client.

Installation

Pour notre projet, nous avons utilisé les outils suivant : JDK 1.6, Tomcat 6.x, STRUTS 2.1.8.1 et Eclipse Galileo (v3.5.2). Vous pouvez télécharger STRUTS 2 sur ce lien :
http://struts.apache.org/2.1.8.1/index.html
Voici la manipulation à faire pour créer une application WEB basée sur STRUTS 2 avec Eclipse :

Tutoriel d'utilisation

A travers une petite application simple, c'est à dire un système de login/logout, nous allons vous montrer les bases de fonctionnement de STRUTS 2. Pour cela, je vous demande d'avoir un projet sur Eclipse avec Struts 2 intégré. Si vous avez suivi l'installation expliquée précédemment, veuillez une fois importé, supprimer dans src, le package exemple et les fichiers "example.xml", "LICENSE.txt" et "NOTICE.txt". De plus, supprimer dans le webcontent le dossier "exemple" et le fichier "index.html".

Commençons par créer un package nommé "beans". Dans celui-ci, nous allons créer une classe nommée "Utilisateur.java". Un bean est une classe java composée que d'attributs, de getters et de setters et d'un constructeur vide.

On va créer un package nommé "bdd". Dans celui-ci, on crée une classe nommée "TableUtilisateur.java" C'est dans cette classe que nous stockons en dur des objets utilisateur.

On va créer un package nommé "model". Dans celui-ci, on crée une classe nommée "UtilisateurModel.java" Cette classe nous permet de stocker différentes méthodes qui agiront sur notre bdd (TableUtilisateur.java). Pour notre application, nous n'avons besoin que d'une méthode qui vérifiera dans la table, l'existence d'un objet Utilisateur en fonction de son identifiant et son mot de passe. S'il existe, la méthode renverra TRUE, sinon FALSE.

On va créer un package "beanAction", dans lequel on crée une classe "UtilisateurAction.java".

C'est cette classe qui nous permet de faire interagir les données entre les vues et les données stockées. Dans cette classe, nous avons un seul attribut de type Utilisateur. Son getter et son setter sont très importants car c'est par eux que les données transitent en les vues et l'action. C'est-à-dire que le getter permettra de récupérer les données à partir de la vue et à l'inverse, le setter permettra d'envoyer les données à la vue. Autre particularité, chaque méthode correspondant à une action doit renvoyer un STRING. Dans notre exemple, elles renvoient SUCCESS si l'action demandée s'est bien déroulée. Sinon elle renvoie ERROR. Nous verrons par la suite l'importance de ces STRINGS.

Nous allons passer aux vues. Pour cela, on va créer dans le WebContent une JSP nommée "index.jsp" qui va contenir le formulaire de login. Pour pouvoir utiliser les tags de STRUTS 2, il ne faut pas oublier d'écrire le deuxième scriptlet. L'attribut "action" de la balise "form" correspond au nom de l'action à appeler. Ce nom est mappé dans le fichier struts.xml qui sera décrit un peu plus loin. Dans notre balise textfiel, l'attribut name correspond au nom de l'attribut de notre action UtilisateurAction. Comme cet attribut est de type Utilisateur, pour remplir un attribut de cet objet il suffit de les séparer par un point. Pour résumer, le texfield va créer un objet Utilisateur de l'actionbean et remplir l'attribut identifiant de cet objet.

On va ensuite créer la page "success.jsp" qui va afficher le pseudo de l'utilisateur qui s'est connecté. Ici, nous pouvons observer d'autres tags de STRUTS 2. Nous avons une balise "if", mais nous allons surtout nous concentrer sur la balise "property". Précédemment, nous avons vu comment transmettre des informations à une action bean. Maintenant, on peut voir comment récupérer des informations en provenance de notre actionbean. Ici, nous avons deux exemples pour récupérer l'identifiant de l'utilisateur qui s'est connecté. Soit à partir de la session qui a été créée. Cette méthode est utile pour gérer des droits à l'affichage. Soit à partir de l'attribut de l'action bean, utile pour manipuler un objet utilisateur mais qui n'est pas forcement celui de la personne connectée.

Il ne reste plus qu'à paramétrer le mapping du contrôleur. Pour cela, ouvrez le fichier "struts.xml". Vous n'avez plus qu'à y mettre ce code : Notre noeud action est composé de trois attributs. Tout d'abord name, qui permet de donner un nom à notre action. C'est ce même nom qui sera utilisé dans nos vues pour appeler l'action voulue. Ensuite, class qui correspond au chemin de notre action bean. Et enfin, method qui correspond à la méthode à appeler dans notre classe. Ensuite, nous avons le noeud result qui est composé de l'attribut name. C'est dans celui-ci qu'on va mettre le résulat de notre action. Par exemple, pour l'action identifierUtilisateur, si elle renvoie success nous redirigeons le client vers la page success.jsp. Si elle renvoie error, il sera redirigé vers la page index.jsp.

Au final, votre projet doit avoir cette architecture :

architecture du projet

Présentation de JAXB

Introduction

JAXB (Java Architecture for XML Binding) est une solution à base de correspondance (mapping) entre documents XML et objets. L’idée est de rendre le document XML transparent pour le développeur, qui ne manipule alors que des objets. Ces objets représentent les éléments et les structures. Ils ne sont pas liés au concept de noeuds comme nous pouvons le trouver dans le modèle DOM. Voici ci-dessous le schéma de fonctionnement de JAXB :

schema JAXB

Le principe de fonctionnement est simple. Tout d'abord, il faut réaliser le schéma XML (XSD) pour définir comment vos données seront ordonnées dans votre XML. Ceci fait que le compilateur XJC va générer les classes correspondantes aux différents éléments du XSD. A partir de là, le développeur n'aura qu'à manipuler des objets. La fonction unmarchall permet de créer les objets à partir des données stockées dans le fichier XML. A l'inverse, la fonction marshall permet d'enregister les données dans le fichier XML.

Installation

Pour notre projet, nous avons utilisé JAXB 2.2 que vous pouvez télécharger sur cette adresse :
https://jaxb.dev.java.net/
Pour faciliter l'utilisation de JAXB, nous avons téléchargé le plugin XJC (version 1.1) pour Eclipse. Vous pouvez le télécharger à cette adresse :
https://jaxb-workshop.dev.java.net/servlets/ProjectDocumentList?folderID=4962&expandFolder=4962&folderID=0

Tutoriel d'utilisation

Pour rester sur le même exemple que pour STRUTS2, nous allons gérer des utilisateurs. On aura la possibilité de les afficher, d'en créer ou d'en supprimer. Pour simplifier le tutoriel, nous allons faire une petite application java. Donc pour cela, créez un projet java (File/new/Java Project) dans Eclipse (En étant sur la perspective JAVA et non JEE).

On va commencer par créer notre schéma XML nommé "schemaUtilisateurs.xsd".

Ensuite, nous allons créer un fichier XML respectant notre XSD, dans lequel on va stocker deux utilisateurs. Ce fichier est nommé "utilisateurs.xml".

On va maintenant générer nos beans à partir de notre XSD. Il nous faut d'abord créer un package nommé "beans" dans lequel on stockera nos beans. Faites un clic droit sur le fichier XSD et faites JAXB2.1/run XJC. Dans la fenêtre qui apparait, mettre dans un premier temps le nom du package dans lequel vous voulez générer vos classes. Dans notre cas, c'est beans. Ensuite, indiquer le chemin absolu de votre dossier src. Puis, cliquer sur finish. Rafraichissez le package beans et vous verrez 3 nouvelles classes.

runXJC

Ensuite, on va créer un package nommé "modele" dans lequel nous allons créer une classe "UtilisateurModele.java". C'est à l'intérieur de celle-ci que nous allons gérer le unmarshall (XML vers objets) et le marshall (objets vers XML). On y mettra de plus des méthodes liées aux utilisateurs comme afficher tous les utilisateurs, créer un utilisateur et supprimer un utilisateur. Voici le code de cette classe :

Il nous reste plus qu'à créer une classe main pour tester le bon fonctionnement de notre application dont voici le code :

Au final, votre projet doit avoir cette architecture :

architecture TutoJAXB

Conclusion

Pour conclure, nous avons utilisé ces deux frameworks dans le cadre d'un projet d'étude. Ce projet consistait à développer un mini-forum. Une fois la base des deux frameworks mise en place, le développement a été assez rapide et facile à faire.
Télécharger le war de notre forum