Tutorial Struts
Tutorial Struts
Tutorial Struts
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.
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.
· Un contrôleur facilement configurable permettant d’associer des actions (méthode d’un objet
Java) à des requêtes HTTP.
· 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épendants. 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.
· 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.
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.
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.
Le framework Struts 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.
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) :
Framework Homepage
JStateMachine http://sourceforge.net/projects/jstatemachine/
Maverick http://mav.sourceforge.net/
Melati http://www.melati.org/
Niggle http://niggle.sourceforge.net/
Open Symphony http://www.opensymphony.com/
Struts http://jakarta.apache.org/struts/
Tapestry http://tapestry.sourceforge.net/
TeaServlet http://opensource.go.com/TeaServlet/
Turbine http://jakarta.apache.org/turbine/
Webwork http://sourceforge.net/projects/webwork/
wingS http://wings.mercatis.de/
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 contrôleur MVC2
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.
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.
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 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 logicielle qui fournissent un ou plusieurs services techniques ou
métiers aux applications qui s'appuient dessus. Alors qu'un framework métier fournit des services
à forte plus value fonctionnelle (gestion de clients, d'abonnements, de news, ...) un framework
technique apporte les concepts, entités et mécanismes qui permettent, dans le cadre d'une
architecture logicielle 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élérer. Struts prend en compte les problématiques de performance, sécurité, multi-langue...
Le modèle MCV II hérite des propriétés du modèle MVC. Son organisation cependant
capitalise sur la longue expérience acquise avec MVC et s'adapte au contexte des applications
Internet et de la plate forme J2EE.
Dans le modèle 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 contrôle 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 contrôleurs deviennent essentiellement des contrôleurs du dialogue
entre l'utilisateur et les objets métiers.
.1. Le client envoie une requête à l'application. La requête est prise en charge par le servlet
d'entrée.
.2. Le servlet d'entrée analyse la requête et réoriente celle-ci vers un contrôleur adapté.
.3. Le contrôleur sélectionné par le servlet d'entrée est responsable de l'exécution des traitements
nécessaires à la satisfaction de la requête. Il sollicite les objets métiers lorsque nécessaire.
.5. Le contrôleur encapsule les données métiers dans des javaBeans, sélectionne la JSP qui sera
en charge de la construction de la réponse et lui transmet les JavaBean contenant les données
métiers.
.6. La JSP construit la réponse en faisant appel aux javaBeans qui lui ont été transmis et l'envoie
au navigateur.
.7. Lorsque nécessaire, pour le traitement d'erreurs essentiellement, le servlet d'entrée traite la
requête directement, sélectionne la JSP de sortie et 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 <jsp
:useBean> <jsp :getProperty> et <jsp :setProperty>. 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 :
<bean:write name=’items’
property=’item[2].prize’/>
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.
· D’afficher les messages d’erreur relatifs à l’application ou au remplissage d’un champ donné.
<html:submit property="submit"
value="Submit"/>
</html:form>
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.
<logic:greaterThan name=’utilisateur’
property=’age’ value=’17’>
</logic:greaterThan>
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
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.
Tout d'abord, télécharger une distribution binaire de Struts [ici] vérifier d'avoir
installé les logiciels précédents décrits ci dessus.
• lib/struts.jar - Le fichier JAR qui contient toutes les classes JAVA incluses
dans struts. Copier le dans le répertoire WEB-INF/lib de votre application
web. Attention - Si vous utilisez plusieurs applications basées sur struts avec
le même serveur au répertoire ou vous placerez le fichier struts.jar au
risque d'avoir une erreur : ClassNotFoundException.
• lib/struts*.tld - Fichiers qui devront être copiés dans le répertoire WEB-
INF. Ils constituent une description de la librairie de tag de struts.
• webapps/struts-blank.war - Elle contient une archive d'une application web
basique totalement vide qui servira de départ au développement d'une
application struts.
• webapps/struts-documentation.war - Archive d'une application web basée
sur struts, elle constitue aussi à la fois toute la documentation de struts.
Pour utiliser Struts dans vos applications, suivez les indications suivantes:
<taglib>
<taglib-uri>/WEB-INF/struts-
bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-
bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-
html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-
html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-
logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-
logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-
template.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-
template.tld</taglib-location>
</taglib>
Struts est fourni avec une application exemple très simple. Celle-ci montre comment
effectuer des taches courantes comme afficher un formulaire, récupérer les données, les
réafficher, afficher des listes dynamiques etc.
Fonctionnalités
Grâce à l’emploi de la taglib logic, les pages servant à l’affichage des propriétés de
l’utilisateur et de ses comptes servent aussi pour la création, la modification et la suppression. Les
pages contenant des formulaires (logon.jsp, registration.jsp, subscription.jsp) sont chacune
associées à un objet Form (on trouve respectivement les classes LogonForm, RegistrationForm et
SubscriptionForm)
</html:form> …
ce qui provoque l’affichage d’un formulaire avec deux champs login/password et un bouton submit.
<form-bean name="logonForm"
type="org.apache.struts.example.LogonForm"/> …
<action path="/logon"
type="org.apache.struts.example.LogonAction"
name="logonForm"
scope="request" input="/logon.jsp">
</action> …
ActionError("error.username.required"));
! ! "#
$
$% % & '
" "
( ) "* '
" "
( + "
*
$
$ % # '
# " ( , "
( (
("*
$
$ % - $
$ &"
$
$ 6 . ( 7"
"
0 ! "
*
( 8 "
""*9
$
$: -
' ! ( "
*
( , () 0 4;0< "
*
$
$ 6
( 5 5
""*9
Extension du framework
Struts a été conçu de façon à pouvoir être aisément modifié par les développeurs pour
répondre à leurs besoins particuliers. Cela se voit dans l’application exemple, qui redéfinit la
classe ActionMapping pour introduire la notion de ‘success’ et de ‘failure’ pour une action. Des
tags spécifiques sont également introduits pour vérifier si un utilisateur est logué ou non et pour
écrire plus facilement certains liens.
.V. Conclusion
Struts est un framework qui permet de développer des applications web en utilisant le
modèle MVC2. Les applications conçues ainsi sont plus facilement maintenables et évolutives, de
part la séparation des fonctionnalités du modèle, du contrôle, et de la vue. L’utilisation du
framework permet au développeur de se concentrer sur le modèle, Struts fournissant le cadre
nécessaire au contrôle et à l’interface de l’application, permettant un développement rapide de ces
parties. Struts préfigure une nouvelle méthode de développement, succession de la
programmation par servlets. Néanmoins, il convient d’ajouter que l’écriture d’une application
utilisant Struts ne doit pas se décider à la légère : un certain temps est nécessaire pour prendre en
main le concept et les API.
Le déploiement d'un servlet unique dont le comportement est configuré par fichier donne
une grande flexibilité à la gestion de la navigation de l'application. Ce fonctionnement limite, par
ailleurs, considérablement les adhérences entre les applications développées et les serveurs
d'application sur lesquels elles sont déployées. Cet avantage est cependant estompé par la
généralisation du support, par les différents serveurs d'application, des formats de déploiement
standardisés (format WAR notamment).
La centralisation des accès à l'application permet un contrôle fin et personnalisé des accès
aux traitements (Actions) et offre une grande marge de manœuvre pour la gestion des profils ou
des rôles utilisateurs. L'abstraction des traitements et des ressources par le modèle des
commandes, en occultant les informations relatives à la structuration de l'application, apporte une
plus grande sécurité de cette dernière. Struts fait partie des projets Open Source Jakarta de l'ASF
(Apache Software Foundation). A ce titre les sources du framework sont publiques. Le framework
Struts en conséquence aisément adaptable et extensible. Son appartenance au projet Jakarta
d'Apache garantit par ailleurs sa pérennité et la capacité importante de développement, dans un
but opérationnel et non de recherche et développement, que la communauté Java lui consent.
http://www.nuxora.com/
Bibliographie :
http://arkzoyd.free.fr/struts902/struts-01.html
http://www.application-servers.com/
http://www.jspinsider.com/tutorials/jsp/struts/struts.view
http://www.waferproject.org/index.html
http://www.improve-institute.com/formation_jakarta_struts.html
http://struts.application-servers.com/
http://www-106.ibm.com/developerworks/library/j-struts/?dwzone=java
http://www.waferproject.org/index.html