En premier lieu, voyons l'implémentation du modèle MVC par Struts avec le schéma suivant.

Les différents étapes dans une application basées sur le framework Struts sont :
- Le navigateur du client envoit une requête HTTP à l'application qui est réceptionnée par l'ActionServlet.
- L'ActionServlet analyse la requête et transfert le contrôle aux classes Action correspondantes.
- Si nécessaire, les classes Action appellent des composants de la partie métier.
- La couche métier effectue le traitement et renvoit le résultat aux classes Action.
- Les classes Action encapsule les données du modèle dans des composants Java beans qui sont envoyés aux pages JSP.
- Les pages générées à partir des JSP sont envoyées au navigateur client.
- En cas d'erreurs, l'ActionServlet peut automatiquement rediriger le flux vers des pages d'erreurs.
Maintenant voyons plus en détails les composants de Struts.
La partie Contrôleur
ActionServlet
Struts est fournit avec un controlleur prêt à utiliser, la classe org.apache.struts.action.ActionServlet. L'ActionServlet réceptionne et traite toutes les requêtes en provenance du client.
ActionServlet reçoit toutes les requêtes qui changent l'état de l'interface utilisateur. Ensuite, il lit depuis un fichier de configuration les correspondances entre requêtes et classes Action. Les Actions correspondantes sont invoquées.
L'ActionServlet devrait être l'unique servlet de votre application. Pour cela, vous devez configurer votre fichier de configuration Web (web.xml)..
Deux méthodes de l'ActionServlet peut être intéressante à personnaliser :
La première est la méthode init() qui est appelée par le conteneur à la création du servlet. Vous pouvez l'étendre pour effectuer des tâches qui doivent être executées au démarrage de l'application.
La deuxième est la méthode process(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) qui est chargée de la manipulation des requêtes et qui génére la requête correspondante. Vous pouvez la personnaliser pour des opérations de logging à chaque requête par exemple.
Action
La classe Action peut être présentée comme une interface entre les couches Vue et Modèle de l'application. En pratique, dans l'environnement Struts, un formulaire et les données qui lui correspondent seront associés à un objet ActionForm. Cet objet sera ensuite passé en paramètre de la méthode execute() de l'Action correspondante. Cette méthode est surchargée :
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception;public ActionForward execute(ActionMapping mapping, ActionForm form, ServletRequest request, ServletResponse response) throws Exception;
La première est de loin la plus utilisée car elle correspond à l'utilisation de Struts dans un environnement Web. Quoiqu'il en soit, vous devez vous servir de ces méthodes pour écrire la logique de votre application. Il est fortement recommandé de faire appel à des composants métiers dédiés à l'intérieur de cette méthode (Java beans, EJB, ..) plutôt que s'amuser à coder toute la logique métier avec ces méthodes.
La méthode execute() retourne toujours un objet de type ActionForward.
ActionForward
Un objet ActionForward représnte une destination vers laquelle le controlleur (ActionServlet ) redirigera la requête en effectuant un RequestDispatcher.forward() ou HttpServletResponse.sendRedirect(). Les deux mécanismes citées sont un peu différents : le forward est un processus côté serveur tandis que la redirection est effectuée par le navigateur client. Il existe 2 niveaux d'ActionForward : local (lié à un composant Action) et global. En cas de conflits de nom entre un ActionForward local et un ActionForward global (chaque ActionForward est identifié par l'attribut name ), c'est l'ActionForward local qui est prioritaire.
RequestProcessor
L'objet RequestProcessor (org.apache.action.RequestProcessor ) contient la logique de la partie Controlleur. Lorsqu'une requête est reçue, l'ActionServlet appel les méthodes de ce composant. Comme l'ActionServlet, vous pouvez personnaliser les méthodes de l'objet.
La méthode qui représente le plus grand intérête est processPreprocess(). Elle est simplement chargée de retourner true ou false en fonction que le flux doit continuer ou être arrêter. Il peut utile de la réécrire pour implémenter certaines fonctionnalités comme la vérification des autorisations, la vérification de la session ou la génération de fichier de log.
La Vue
ActionForm
Un ActionForm (objet qui hérite de la classe org.apache.struts.action.ActionForm ) est un bean qui est une représentation logique d'une partie des données du modèle. En d'autres mots, l'ActionForm est chargé du maintien et du transfert des données (donc de l'état du modèle) entre chacune des couches.
Pour chaque données du modèle, l'ActionForm doit implémenter les getter et setter correspondant.
Voici un example d'ActionForm qui stocke les données d'identification d'un utilisateur :
public LoginForm extendsorg.apache.struts.action.ActionForm {
public String login; public String password; public String getLogin () { return this.login; }public String getPassword () { return this.password; } public void setLogin( String login ) { this.login = login; }
public String setPassword ( String password ) { this.password = password; }
public ActionErrors validate ( ) { ActionErrors errors = new ActionErrors(); if ( this.login == null ) { errors.add ( "login", new ActionError("error.login.required") ); }
if ( this.password == null ) { errors.add ( "pass", new ActionError("error.pass.required") ); } return errors; } }
Notez que la méthode validate() peut se charger du contrôle de validitié des informations si nécessaire.
Librairie de tags personnalisés
Struts est également fourni avec un jeux de librairie de tags personnalisés qui a pour but d'aider les développeurs à écrire des pages JSP qui interagissent naturellement avec les autres composants du framework. Dans un projet Struts, plus vous utiliserez ces librairies et plus vos développement seront aisés et rapides.
Un autre avantages d'utiliser la libraire de tags est qu'il est possible avec un peu d'effort d'éviter l'utilisation de code Java ou scriplets à l'intérieur de vos pages. Le code de vos pages en devient plus propre et plus lisible.
Bien que la librairie de tags personnalisés est un composant lié à la Vue je préfère la décrire dans un chapitre à part.
La libraire de tags personnalisés de Struts est composées de 5 sous ensembles :
Struts-html taglibs
Struts-html est un jeu de tags personnalisés qui à pour objectif de remplacer les balises HTML de base, nécessaire à la structuration du contenu. Une des balises les plus importantes du jeu est la balise <html:form> qui remplace avantageusement le balise HTML <form> standard.
Struts-bean taglibs
La librairie Struts-bean fournit des balises pour manipuler facilement les beans à l'intérieur de vos pages et pour vous aider à internationaliser vos pages. D'une manière générale, la libraire est essentiellement une amélioration des tags JSP <jsp :useBean>, <jsp :getProperty> et <jsp :setProperty> habituels.
Struts-logic taglibs
Struts-logic permet le contrôle du flux de la page. Il s'agit essentiellement de structure de contrôle comme les structures if...else ou while habituelle. L'une des principale utilisation de cette librairie est pour effectuer l'affichage d'élément de la page en fonction de la valeur d'un bean.
Struts-nested taglibs
L'un des principal intérêt de la librarie Struts-nested est de permettre d'établir des relations parents/enfants entre les tags. L'utilisation de tels composants simplifie la structure la page. En général, les balises de chacune des libraires précédentes possèdent un équivalent dans cette libraire (<html:text> et <nested:text> par exemple).
Struts-tiles tagslibs (extension de struts-template taglibs)
Depuis la sortie de Struts 1.1, Struts-tiles, qui était à l'origine un projet indépendant, est maintenant inclus dans la distribution. Son but est d'offrir la possiblité de structurer les pages de votre site en procédant à un assemblage de différents "morceaux" de pages. Pour les personnes qui ont déjà utilisé la libraire Struts-template ,Struts-tiles a les même fonctionnalités (il s'agit d'ailleurs de son remplaçant) de base tout en ajoutant beaucoup d'autres comme l'héritage de layout , la définition des "segments" de pages dans un fichier de configuration, ...

Comments
comparaison strut symfony
je cherche un framework qui répondrait au mieux à mes besoins.
Post new comment