Feb 23

Tutorial Struts – Le Framework

Catégorie : Charles Collier @ 1:00 pm

Le tutorial ets en cours de remise en ligne, les css sont manquantes et les images.. revenez dans qqs jours
ou lisez la version mirroir sur http://wpetrus.developpez.com/java/struts/
Version PDF www.nuxora.com

mail: struts_antispam_nuxora.com

Introduction

Struts est un framework proposant un cadre logiciel pour l’organisation des échanges avec l’utilisateur et la dynamique de l’application. Il promeut une structuration de la couche Servlet-JSP suivant le modèle MVC II. La définition de la dynamique de l’application est partiellement déclarative, via un fichier de configuration, partiellement implémentée, au sein des classes Action.

.I. Présentation et modèles équivalents

Struts est un projet Open Source développé par la communauté Jakarta d’Apache. Il a débuté en mai 2000 sous la direction de Craig R Mc Clanahan, qui participe également au développement de Tomcat. Aujourd’hui, Struts est géré par plusieurs committers. Sa mailing-list comporte un millier de personnes. C’est un projet très actif. Expliquons tout d’abord ce qu’est un framework (lit. Structure) : architecture et ensemble d’outils de développement. J2EE est un Framework Java pour les développements web. Les Frameworks ont l’avantage de structurer, simplifier, segmenter les développement et donc les accèlerer. Struts fournit un framework MVC comprenant les composants suivants :

Un contrôleur facilement configurable permettant d’associer des actions (méthode d’un objet Java) à des requêtes HTTP.

Des librairies de tags spécifiques pour créer facilement une vue.

Un Digester, permettant de parser un fichier XML et d’en récupérer seulement les informations voulues.

Des utilitaires permettant de remplir automatiquement des champs et de créer des applications supportant plusieurs langages.

Le modèle

Le modèle d’une application Struts est complètement standard : suivant le paradigme MVC, Struts et le modèle sont indépendant. Le modèle peut très bien accéder directement à une base donnée relationnelle, XML ou utiliser des EJB. Il faudra juste veiller à permettre son initialisation.

La vue

La vue sous Struts est constituée de pages JSP. Afin de rendre la création de ces pages aisées par un designer et d’y éviter l’introduction de code Java, Struts propose l’utilisation de 4 librairies de tags ou taglib spécifiques : html, bean, logic et template.

Taglibs de Struts

Les taglibs de Struts sont très complètes et permettent de faire beaucoup de chose sans écrire de code Java. Des librairies répondant à des besoins plus spécifiques – création de composants, accès à une base de données, mises en page – sont en projet pour les prochaines versions de Struts.

Le contrôleur

Le contrôleur est la partie du framework qui fait le lien entre la vue et le modèle. C’est elle qui permet de gérer l’enchaînement de la navigation. Dans Struts, le point central du contrôleur est un servlet de la classe ActionServlet. Toutes les requêtes y aboutissent. Du point de vue du développeur, la programmation du contrôleur passe par :

L’écriture d’un fichier de configuration : struts-config.xml. Ce fichier décrit en particulier quelles sont les actions possibles et à quelles classes Actions il faut les associer (mapping).

L’écriture des objets formulaires qui vont servir à la transmission des données de la vue au modèle. Ces objets étendent ActionForm. Ils contiennent toutes les propriétés des formulaires, ainsi qu’une méthode permettant de valider ou non les valeurs de ces propriétés. Lorsqu’un formulaire HTML est renvoyé, Struts instancie automatiquement l’ActionForm correspondant et initialise ses propriétés avant de les valider.

L’écriture des Action à effectuer pour chaque requête.

Une fois que Struts a validé les données envoyées, il appelle la méthode perform () de l’Action correspondante. Dans cette méthode, le développeur peut récupérer les données rentrées dans le formulaire via l’ActionForm, et effectuer les opérations nécessaires sur le modèle. Il peut pour cela s’aider des utilitaires de Struts permettant de recopier des propriétés d’un bean à un autre. Struts fournissant le servlet cœur du contrôleur et des classes Action et ActionForm qu’il n’y a plus qu’à étendre, la création d’actions est très rapide.

Le framework Struts Celui-ci propose plusieurs taglibs, qui, combinées à des JavaBeans dédiés, les ActionForms, fournissent un support semi-automatisé à la manipulation de formulaires HTML (description, remplissage, validation côté client et serveur, remontée de message d’erreur, …). Struts fournit par ailleurs quelques services techniques, tels qu’un support à l’externalisation de chaînes de caractères (messages) et à l’internationalisation des ces chaînes, une gestion de sources de données (DataSources), une interface de journalisation, ainsi que quelques Actions spécialisées.

Entités Struts
Struts s’appuie sur le modèle de conception des commandes : un discriminant, une chaîne de caractères en général, fait office de commande et indique le traitement à exécuter. Une table de correspondance permet de faire le lien entre commande et traitement à exécuter. Dans Struts, la commande est déterminée par une partie de l’URL transmise au servlet contrôleur, ActionServlet. Les traitements sont encapsulés dans les classes Actions. La correspondance (le “mapping”) entre la commande et le l’Action à exécuter est définie par les classes ActionMapping. Le contenu des classes ActionsMapping est déclaré au sein du fichier de configuration Struts et consiste à la base en un couple morceau d’URL/nom de la classe Action. Struts intègre un mécanisme d’automatisation des relations entre Actions et JSP par le biais des ActionForms. Ces classes sont des JavaBeans renseignés automatiquement à partir des paramètres des requêtes transmises au servlet contrôleur et transmises telles quelles aux Actions. Taglibs
La manipulation des beans ActionForms au sein des JSP est grandement facilitée par l’emploi des taglibs Struts essentiellement dédiées à cet usage.
Struts fournit un peu plus d’une cinquantaine de tags personnalisés regroupés au sein de 4 librairies (taglibs) :
- La librairie des tags bean pour la manipulation pure de beans
- La librairie des tags HTML pour la manipulation des formulaires et éléments de formulaires HTML,
- La librairie des tags logiques pour la mise en place de traitements conditionnels et/ou itératifs
- La libraire des tags template qui propose un mécanisme de gestion de modèles de JSP (les templates).

Framework Homepage Framework Homepage
Action Servlet http://dione.zcu.cz/~toman40/ActionServlet/ JStateMachine http://sourceforge.net/projects/jstatemachine/
Barracuda http://barracuda.enhydra.org/ Maverick http://mav.sourceforge.net/
Bento http://www.bentodev.org/ Melati http://www.melati.org/
Bishop http://bishop.sourceforge.net/ Niggle http://niggle.sourceforge.net/
Cocoon http://xml.apache.org/cocoon/ Open Symphony http://www.opensymphony.com/
Echo http://www.nextapp.com/products/echo/ Struts http://jakarta.apache.org/struts/
Expresso http://www.jcorporate.com/ Tapestry http://tapestry.sourceforge.net/
Hammock http://www.oop.com/TechnologiesHammock.jsp TeaServlet http://opensource.go.com/TeaServlet/
JADE http://sourceforge.net/projects/salmon Turbine http://jakarta.apache.org/turbine/
Japple http://www.japple.org/ Webwork http://sourceforge.net/projects/webwork/
JPublish http://www.jpublish.org/ wingS http://wings.mercatis.de/

Les frameworks MVC2 les plus avancés
Il existe actuellement un certain nombre de projet plus ou moins avancé visant à la création de framework MVC2. Ces projets tous basés sur les servlets progressent très vite. En voici une rapide présentation :

Barracuda
Ce framework qui se veut très complet est développé par la communauté Open Source Enhydra. Il est prévu qu’il comporte :
· Un modèle événementiel complet,
· Un modèle et une librairie de composants MVC pour l’interface utilisateur
· Un système de validation des formulaires et de mappings avec des objets Java.
· Un contrôleur MVC2
· Une librairie Javascript.

Hammock
Ce framework permet de développer une application web de la même façon qu’une application Swing. Pour cela, Hammock utilise le même modèle : système d’événements identique, présence de composants IHM ‘Panel’, et de layout ‘FlowLayout ‘ ou ‘TableLayout’ etc. Ce système fonctionne sans JSP. Signalons qu’il n’est pas Open Source mais développé par OOP.

Tapestry
Ce framework est axé sur les composants : la création d’une page se fait par le développement de composants qui vont définir cette page. Il propose des concepts intéressants comme la séparation de l’état de la page et de la page elle-même afin de disposer d’un pool de pages ou encore des possibilités d’internationalisation via des templates. Tapestry facilite la gestion des erreurs et de la charge.
Tapestry a d’abord été développé par Primix et est maintenant disponible en Open source.

Webwork
Ce framework utilise le concept du Pull Hierarchical Model View Controller. Il est similaire techniquement au framework Struts dont la présentation suit, mais son API est plus réduite. Il pourrait être utilisé avec d’autres technologies que les servlets.

Nom Version url Puissance Complexité
Barracuda 1.1 http://barracuda.enhydra.org/ +++ +++
Hammock 1.0 n’existe plus +++ +++
Tapestry 2.1 http://sourceforge.net/projects/tapestry ++ +++
Webwork 0.95 délaissé au profit de Tapestry + +
Struts 1.0.2 http://jakarta.apache.org/struts ++ ++

Pourquoi choisir Struts comme framework MVC2
Struts fait parti du projet Apache. Or les projets Apache ont tendance à monopoliser toute l’attention des utilisateurs. Sachant que la qualité des projets Open Source est apportés par le nombre d’utilisateurs, on peut penser que Struts sera de meilleure qualité que les autres projets MVC2. Conclusion tirée il y a 18 mois. Depuis certains frameworks ont été abandonnés, alors que Struts continue son développement de manière certaines.

.II. Description plus technique

Struts Struts est un Framework MVC pour développer des applications web, développé en Open Source dans le cadre du projet Jakarta de l’ASF ( Apache Software Foundation ).

Les framewoks sont des structures logicielles qui définissent des cadres dans lesquels viennent s’insérer les objets et concepts spécifiques à une application. En pratique, un framework (traduction littérale: squelette d’application) est un ensemble de classes et de mécanismes associés à une architecture logiciele qui fournissent un ou plusieurs services techniques ou métiers aux apllications qui s’appuient dessus. Alors qu’un framework métier fournit des services à forte plus value fonctionnelle (gestion de clients, d’abonements, de news, …) un framework technique apporte les concepts, entités et mécanismes qui permettent, dans le cadre d’une architecturelogicielle retenue, de s’abstraire d’un certain nombre de problématiques conceptuelles et techniques récurrentes. J2EE est un Framework Java pour les développements web. Les Frameworks ont l’avantage de structurer, simplifier, segmenter les développement et donc les accèlerer. Struts prend en compte les problèmatiques de performance, sécurité, multi-langue…

Le MVC : acronyme synonyme de séparation des composants de type “Model” (logique métier et accès aux données), “View” (présentation des informations) et “Controller” (la gestion des interactions des utilisateurs).
Le modèle MVC s’appuie essentiellement sur la séparation en 2 couches verticales regroupant d’un coté les objets métiers (Modèle) et de l’autre les objets IHM, ces derniers étant eux mêmes regroupés en objets charges de l’acquisition d’informations, en provenance de l’utilisateur (controleur) et en objets charges de la restitution d’informations vers l’utilisateur (Vue).

Le modèle MCV II hérite des proprietes du modèle MVC. Son organisation cependant capitalise sur la longue experience acquise avec MVC et s’adapte au contexte des applications Internet et de la plate forme J2EE.
Dans le modele MVC II, le servlet est unique, en classe et en instance. Il garantit l’unicité du point d’entrée de l’application. Il prend en charge une partie du controle de l’application. Les contrôleurs MVC se retrouvent alors partiellement déportés dans l’entité dynamique de l’application qui assure le contrôle de la dynamique de l’application et qui gère les relations entre les objets métier et la présentation. Les controleurs deviennent essentiellement des controleurs du dialogue entre l’utilisateur et les objets metiers.

1. Le client envoie une requete à l’application. La requete est prise en charge par le servlet d’entrée.

2. Le servlet d’entrée analyse la requete et réoriente celle-ci vers un controleur adapté.

3. Le controleur selectionné par le servlet d’entrée est responsable de l’éxécution des traitements nécessaires à la satisfaction de la requete. Il sollicite les objets metiers lorsque necessaire.

4. Les objets métiers fournissent des données au controleur.

5. Le controleur encapsule les données métiers dans des javaBeans, sélectionne la JSP qui sera en charge de la construction de la reponse et lui transmet les JavaBean contenant les données metiers.

6. La JSP construit la reponse en faisant appel aux javaBeans qui lui ont ete transmis et l’envoie au navigateur.

7. Lorsque nécéssaire, pour le traitement d’erreurs essentiellement, le servlet d’entrée traite la requete directement, selectionne la JSP de sortieet lui transmet par JavaBean les informations dont elle a besoin.

La taglib bean
Les tags de cette librairie peuvent être vue comme des améliorations des tags JSP et . En effet, ils permettent de rendre accessible des objets dans les contextes standards (page, session, application) via des variables de scriptings. Il est ensuite possible de récupérer, de modifier ou d’afficher les valeurs des propriétés de ces objets.
Par exemple si la session contient un objet nommé ‘item’ disposant d’une méthode getPrize() et que l’on veut afficher son prix, il suffira d’écrire :
Struts supporte également les nested et indexed properties. Par exemple si la session contient un objet nommé ‘items’ et a une méthode getItem(int item) qui renvoie un item. il est possible d’écrire :
La taglib bean propose également un tag permettant d’afficher un message en fonction de la langue de l’utilisateur. Dans l’optique de créer une application supportant plusieurs langues, les pages JSP ne doivent pas contenir de texte mais faire appel à ce tag. Dans Struts, les messages destinés à l’utilisateur sont associés à une clé et définis dans des fichiers spéciaux. Chaque fichier contient les messages dans une langue donnée. Le tag
affichera le texte sous la clé titre.index dans la langue principale définie par le browser si disponible ou sinon dans la langue par défaut.

La taglib html
Cette librairie contient les tags nécessaires à la création d’interface utilisateur dynamique, et notamment des formulaires.

Les tags permettent de remplir automatiquement les champs à afficher et de retourner les valeurs en vues de leur gestion par le contrôleur. Ceci se fait en spécifiant dans le tag le nom de la propriété qui doit être affichée / modifiée. Cette propriété correspond à une propriété Javabeans d’un objet Formulaire qui aura été spécialement écrit par le développeur pour servir d’interface entre la vue et le contrôleur.

Les autres tags de la librairie permettent :

D’afficher les messages d’erreur relatifs à l’application ou au remplissage d’un champ donné.

De gérer plus facilement les liens et les sessions.

Voici par exemple comment créer un formulaire permettant de se loguer :

Username :

Password:

L’utilisation de ce formulaire est plus détaillée dans la section exemple.

La taglib logic
Cette librairie définit tout un ensemble de tags permettant d’inclure ou de ne pas inclure le corps des tags en fonction de critères logiques portant sur la valeur des propriétés d’un objet. Il est également possible d’effectuer des itérations.
Par exemple, pour afficher un message en fonction de l’âge de l’utilisateur :

Vous êtes majeurs !
Où pour afficher tous les prénoms des enfants d’une personne :

La taglib template
Cette dernière librairie est destinée à faciliter la création de pages suivant un modèle. Pour un exemple courant, imaginons la barre de navigation en haut de la page, une zone centrale et un copyright en bas. Les templates permettent de définir la barre de navigation et le copyright, puis ensuite de les inclure aisément dans toutes les pages.

.III. Installation

.III.a. Easy Way to start

Essayer Struts

Essayer Struts est très facile: la distribution binaire de Struts est fournie avec des fichiers .war parmi lesquels une application exemple. Il suffit avec Tomcat de copier ses fichiers dans le répertoire webapps après avoir installé un parseur XML JAXP (l’implémentation de référence de Sun [download] ou Xerces par exemple) et de redémarrer le serveur pour faire fonctionner Struts.

Les personnes désirant recompiler Struts ou utiliser d’autres serveurs trouveront les informations nécessaires sur le site de Struts.

.III.b. Expert and Full installation

.III.b.1. Pré-requis logiciel

Pour installer et utiliser Struts quelques opérations préliminaires sont nécessaires. Il faut télécharger et installer différents packages:

Java Development Kit – Télécharger et installer une version de Java2 [java.sun.com/j2se].

Servlet Container – Télécharger et installer un serveur por lesJSP, par exemple le servuer [Tomcat] (version 3.1 ou supérieure, version 3.2 ou plus recommandée).

Ant Build System – Si vous compilez une version de Struts , il faudra utiliser , après l’avoir télécharger une version de [Ant]. Ce package est aussi recommandé pour le dévelloppement de leur application web basées sur Struts.

Si c’est la version 1.3 de Ant que vous utilisez, vous devrez télécharger le fichier “optional.jar” qui contient l’implementation de la commande