Microsoft PowerPoint - Pr\351sentation.ppt [Mode de compatibilit\351]

publicité
Service de gestion d’utilisateurs
Utilisation des frameworks CookXML
et Struts 1.x
Présentation
• But de l’application : gestion de contacts
(recherche et ajout)
• Utilisation du pattern MVC :
– Modèle -> CookXML
– Vue, Controleur -> Struts 1.x
• Limitation de CookXML : impossibilité de gérer l’ajout
Persistance : CookXML (1)
• But : chargement d’instances à partir de
fichiers XML (une instance un fichier)
• Bibliothèque dynamique de tags : creator,
setter, adder, converter
• Chargement d’une instance :
CookXML.decodeXML(String filename)
Persistance : CookXML (2)
•
Il est assez difficile de trouver un historique de versions sur le net. Toutefois,
on peut trouver ces deux informations importantes :
–
Tout d'abord, le projet a été commencé en 2007
–
Ensuite, contrairement à ce que j'affirmais dans la présentation orale,
le Framework est toujours suivi, la dernière version étant sortie en
février 2009
Persistance : CookXML (3)
•
La classe qui charge l'objet Java est un CookXML :
new CookXml (builder, tagLibrary, (Object) null);
•
Le premier paramètre est un DocumentBuilder pour lire le XML. Le second est
la librairie de tags qu'on utilise pour charger les objets. Le troisième définit la
façon de charger le fichier XML (pas plus d'informations sur comment il
marche)
•
La librairie de tags contient tout les Creator, Setter, Adder et Converter qui
permettent de passer du fichier XML à des objets Java.
Persistance : CookXML (4)
•
Tag Creator : à chaque noeud du fichier XML correspond une instance d'un objet Java.
Le Creator permet de définir les règles qui permettent de créer une nouvelle instance.
•
Ajout d'un Creator à la librairies de tags :
tagLibrary.setCreator ("user", DefaultCreator.getCreator(Personne.class))
• Fonctionnement : le premier paramètre définit le noeud qu'on traite, le second est le
Creator en lui-même. Dans le cas d'un DefaultCreator, il faut que la classe
correspondante dispose d'un constructeur vide, sinon ça ne marche pas.
Persistance : CookXML (5)
•
Tag Setter : chaque attribut d'un noeud XML permet de définir la valeur d'un
attribut dans l'objet qui lui correspond. Un Setter permet de définir les règles de
correspondance entre les deux, XML et Java.
•
Ajout d'un Setter à la librairie de tags :
tagLibrary.setSetter("user", "log", DefaultSetter.getInstance())
Fonctionnement : le premier paramètre correspond au noeud, le second au nom
de son attribut qu'on veut traiter, le troisième est le Setter à utiliser.
– A noter que le DefaultSetter implique que l'objet Java une méthode « set »
appropriée, qui a le même nom que l'attribut XML
•
Persistance : CookXML (6)
•
Tag Adder : quand un noeud « N » a des noeuds fils, ces derniers correspondent à
des instances d'objets stockés dans un conteneur quelconque dans l'objet qui
correspond à « N ». Pour chaque type de sous-noeud correspond un conteneur
différent.
•
Un Adder permet de remplir ces conteneurs : tagLibrary.setAdder("utilisateur",
new ContactAdder());
•
Fonctionnement : le premier paramètre désigne le noeud père. Il lance chaque
Adder qu'on lui lie. Pour s'assurer de la bonne combinaison père/fils, une
vérification dans le code est nécessaire.
Le DefaultAdder est moins clair que l'équivalent pour les Setter et les Creator, il est
préférable de coder ses propres Adder.
Persistance : CookXML (7)
•
Tag Converter : ce genre de tag permet de convertir les données du XML,
uniquement des String, en des types plus complexes
•
Ajout d'un Converter à la librairie de tags :
tagLibrary.setConverter(boolean.class, BooleanConverter())
•
Fonctionnement : à chaque fois qu'un Setter est appelé, si l'attribut
correspondant dans l'objet Java est du type défini dans le premier paramètre
de la fonction setConverter, le Converter associé (le second paramètre) sera
appelé
Persistance : CookXML (8)
•
Exemple de fichier XML :
<user nom="Johan" prenom="Yoyo">
<contact pseudo="Sannom" password="ro" />
<contact pseudo="Shry" password="ne" />
</user>
Ce fichier permet d'obtenir en sortie une instance de la classe Personne (qui
correspond au nœud « user ») dont l'attribut « nom » sera égal à « Johan » et
l'attribut « prenom » égal à « Yoyo ». Il aura aussi un conteneur d'objets de la
classe « Contact » qui correspond au nœud « contact »
Persistance : CookXML (9)
•
Comparaison avec Hibernate :
•
Hibernate et CookXML ne traitent pas le même type de données : Hibernate
permet d'utiliser des bases de données SQL, tandis que CookXML utilise des
fichiers XML.
•
Hibernate est vraiment beaucoup plus puissant et paramétrable que CookXML,
et lui permet de passer du langage objet à la BDD, CookXml ne fait pas encore
ce sens-là.
•
CookXML est plus pratique pour des petits projets. De plus, sa façon de
procéder, un arbre XML par objet, a permis la mise en place de sous-projets
qui permettent de définir une interface graphique en XML puis de la charger
en Java. Cela permet d'avoir des interfaces plus faciles à modifier et à
paramétrer.
Persistance : CookXML (10)
•
Avantages :
– Facilité de mise en place : il suffit de placer une archive JAR dans le buildpath
(ici, dans le dossier WEB-INF/lib)
– Très simple d'accès une fois les bases de chaque type de tag comprises
•
Inconvénients :
– Il est difficile de traquer les exceptions
– API non disponibles depuis le site officiel
– Framework non terminé (pas de sauvegarde)
Gestion: Struts 1.x (1)
– But : Gérer et Afficher les informations données
par le modèle
– Plusieurs bibliothèques et classes utilisables
– Classes Action et ActionForm utilisées
Gestion: Struts 1.x (2)
• Classe Action
Les classes qui extends la classe Action sont les classes qui ‘font le travail’, c’est-à-dire
qui sont exécuté lors de l’appel d’un formulaire. Dans ces classes, il existe une
methode, la methode execute, qui retourne une action forward, qui sera appeler par
le formulaire html. Les parametre de la methode execute sont : ActionMapping
mapping, ActionForm form, HttpServletRequest request, HttpServletResponse
response. La response et la requette font le même travail que sutr des servlets
normales, l’actionform permet de savoir quel formaulaire on veut executer, cf la calsse
actionForm
Gestion: Struts 1.x (3)
• Classe ActionForm
Les classes qui héritent de la classe actionForm sont les classes qui contiennent les
formulaires de validation de la requête, permettant de mener vers une page d’erreur
dans le cas de mauvaise donnée dans le formulaire. La méthode que sera exécutée
sera alors la méthode validate, qui retourne une ActionError, et qui prend comme
paramètre : ActionMapping et HttpServletRequest (la request servant a obtenir les
informations données par le formulaire de la page html).
Gestion: Struts 1.x (4)
• Librairies
Il y a 4 librairies qui peuvent être utilisé dans les pages JSP qui sont des librairies
spécifique a Struts. Ces librairies sont :
•
La librairie HTML, qui remplace les balise html. Elles peuvent être utilisées
pour modifier le formulaire, les inputs, etc. .
•
La librairie logic, qui permet de faire des tests logique, comme, par
exemple, la présence de tel attribut dans la requête avec la balise
logic:present.
•
La librairie Bean, qui va faire l’affichage des ressources dans le
ressourceProperties avec la balise bean:message par exemple.
•
La librairie nested.
Gestion: Struts 1.x (5)
• Fichiers de configuration : struts-config.xml
Le fichier struts-config.xml est un des fichiers XML qui permet de configurer Struts,
mais c’est le fichier fondamental. En effet, c’est ce fichier qui permet de configurer
aussi bien le mapping de l’application, c’est-à-dire dans quelle action le formulaire
HTML doit aller. Il faut être sous la balise <action-mapping>. Par exemple, on a le code
suivant : <action path="/LoginAction" type="gestionContact.LoginAction" name="loginForm" scope="request" validate="true" input="/Login.jsp">
<forward name="user" path="/pages/consultetContact.jsp" />
<forward name="admin" path="/pages/consultContact.jsp"/>
<forward name="error" path="/Login.jsp"/>
</action>
Ce code va rediriger le formulaire LoginAction vers la classe
gestionContact.LoginAction, en provenant de la jsp Login.jsp. En cas d’ActionForward
avec dans son constructeur « user », on va aller dans la page
/pages/consultetContact.jsp.
Gestion: Struts 1.x (6)
On a aussi les forms beans dans ce fichier, qui permet de rediriger vers la bonne
ActionForm. Sous la balise <form-beans>, on a par exemple le code suivant :
<form-bean
name="loginForm"
type="gestionContact.LoginForm" />
Ce code définit quel formulaire sera appelé, c’est-à-dire
gestionContact.LoginForm.java quand on appellera le form loginForm. Dans le slide
précédent, c’est ce form qui est appelé dans son mapping.
•
Enfin, il existe un projet struts que l’on peut installer directement, téléchargeable
depuis http://struts.apache.org/download.cgi#struts1310. Il suffit ensuite de
sélectionner un struts-blank.war dans apps afin de pouvoir installer struts.
Gestion: Struts 1.x (7)
• Avantages :
– Grande puissance, documentation claire
– Code facilement réutilisable
• Inconvénients :
– Usine à gaz
– Débogage extrêmement difficile
Moralité
• Struts : utile pour de gros projets, mais
démesuré pour de petits projets
• CookXML : framework puissant et
configurable, mais encore en développement
Téléchargement