chapitre4 struts

34
Chapitre 4 : Struts Framework A. Nejeoui

Upload: theghostman2

Post on 05-Jul-2015

491 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Chapitre4 Struts

Chapitre 4 : Struts Framework

A. Nejeoui

Page 2: Chapitre4 Struts

12.04.23

Introduction

La technologie J2EE est largement diffusée (elle est maintenant utilisée partout, les JSP sont parmi les facteurs qui ont fortement contribué à sa diffusion. Presque tout les développeur des applications web utilisent les JSP, et aussi la disponibilité des conteneurs de servlets gratuits et Libres comme Apache tomcat.

Comme les JSP on atteint un degrés de maturité et les développeurs sont devenus plus expérimentés en JSP la plupart d’entre eux se sont orientés vers l’utilisation de ce qu’on appelle les Framework de développement des applications web( ou Framework pour abréviation).

Les Framework aident à développer les application de manière plus rapide et plus efficace en offrant des librairies prêtes. Une simple recherche sur le net renvoie une dizaine des Framework, mais struts reste le meuilleur sur le marché pour l’instant car il implémente parfaitement le Design Pattern MVC2.

Page 3: Chapitre4 Struts

12.04.23

PlanI Design Pattern MVCII - Présentation de STRUTS Avantages et inconvénients de STRUTS Architecture de STRUTS Super Contrôleur ActionServlet et configuration associéeActionForm Bean et Validation des saisiesAction BeanConsidérations sur le multi-threadingLes bibliothèques de balises Struts

i18n dans StrutsAccès simplifié au "FormBean" lié à la page couranteAffichage de valeurs dans une page jsp

Présentation rapide des fonctionnalités avancées Struts Validator.Tiles

Page 4: Chapitre4 Struts

12.04.23

Plan

III – FormBean

1 FormBean : intérêts et mise en œuvre

Rôles des "FormBean / ActionForm"

Code java "standard" d'un "FormBean"

Configuration XML (struts-config.xml).

2 FormBean : variantes possibles – implémentations.

Map Backed ActionForm.

"Form Bean" commun à plusieurs écrans.

DynaActionForm.

Sous classe de DynaActionForm avec validation

Présentation de DynaValidatorForm

IV - Beans "Action" 1 ActionBean : intérêts et mise en oeuvre Rôles des "ActionBean"

Page 5: Chapitre4 Struts

12.04.23

Plan Code java "standard" Configuration XML (struts.xml). 2 Sous classement éventuel sur les "ActionBean" Principe général Exemple de code (Action générique + sous classe). Actions prédéfinies

V - TagLib de STRUTSVue d'ensemble sur les balises de STRUTSstruts-beanstruts-htmlhtml:file et uploadstruts-Logic

VI - Forward & MappingModélisation des flots (navigation)Encodage des liens de navigation avec STRUTS

Page 6: Chapitre4 Struts

12.04.23

PlanVII - STRUTS-ValidatorPrincipes de fonctionnementConfiguration (validation.xml)Configuration généralePrincipales règles et paramétrages associésActivation de la validation coté "client" en javascriptClasse DynaValidatorForm (tout XML)

Utilisation directe de DynaValidatorFormDouble validation (XML + java) via sous classe

VIII - Tiles (modèles et définitions de régions) Notion de "tiles" Vue d'ensemble schématique Mise en œuvre des "tiles"

Constitution d'une templateEventuelle (et rare) utilisation directe au sein d'une page JSPDéfinitions au sein de tiles-def.xmlRenvois/Redirections vers une définition spécifique

Page 7: Chapitre4 Struts

12.04.23

MVC Le Design Pattern MVC permet la Séparation du code en trois

composants indépendants l’un de l’autre de tel façon à éliminer ou minimiser la propagation des changements effectués sur un composant aux autres composants, ces trois composants sont :

La Vue se focalise sur la présentation

Le Modèle se focalise sur les données

Le Contrôleur se focalise sur les traitements, contrôles des enchaînements des opérations (navigation, ...)

Ce Modèle est appliqué pour les développements d'applications locales indépendantes (swing, SWT.)

d'architectures 3-tiers (struts, JSF, Spring-MVC, Velocity …).

Page 8: Chapitre4 Struts

12.04.23

MVC2

La version "MVC 2" correspond à une variante améliorée de "MVC pour le Web" où il n’y a qu’un seul contrôleur (servlet) générique supervisant toute les navigations entre les pages

(avantage : un seul point central à sécuriser et à paramétrer dans web.xml).

Collaboration MVC2 au sein d'une application Web développée en Java:

La Servlet joue le rôle de contrôleur : il reçoit une requête, lui applique un éventuel contrôle de saisie (validation quelquefois déléguée ou automatisée).

Le contrôleur demande à un JavaBean d'effectuer les traitements. Le JavaBean effectue (ou bien délègue) les traitements (accès Jdbc, EJB,…) et récupère les résultats qu'il mémorise dans ses attributs (ou dans d'éventuel(s) JavaBean(s) annexes de données) .

Ce(s) JavaBean(s) joue(nt) le rôle de Modèle.

Page 9: Chapitre4 Struts

12.04.23

MVC2Le contrôleur après avoir reçu un statut (ok/ko) ou une exception

effectue une redirection (forward) vers une page JSP pour l'affichage du résultat ou vers une page JSP d'erreur.

La page JSP (jouant le rôle de Vue) récupère les données nécessaires à l’affichage auprès du JavaBean et génère (met en forme) la page HTML à renvoyer.

Page 10: Chapitre4 Struts

12.04.23

MVC et StrutsLe contrôleur Struts :Les requêtes client sont traitées par la servlet ActionServlet de la

librairie Struts. Lorsque cette servlet reçoit la requête, elle intercepte l’URL et selon la configuration de Struts fournit par le fichier strust-config.xml elle passe le traitement à la classe Action

La vue Struts : Les éléments de la vue sont responsables de la présentation des

information en provenece du modèle au client et aussi de la collecte des informations. Généralement on utilise les JSP pour la présentation de la vue, on peut aussi utiliser des bibliothèques de balise, javascript, css …etc.

Le modèle Struts :La partie modèle de Struts offre un modèle de la logique métier

dérrière l’application Struts. Elle offre l’interface avec la couche persistance et le système back-ends. Ce composant est généralement composé de classes java (POJO). Struts n’offre pas des élément spécifique à ce composant ce qui permet de réutiliser facilement le code java écrit pour d’autres applications.

Page 11: Chapitre4 Struts

12.04.23

Avantages de StrutsAvantages :Produit par la fondation Apache depuis Mai 2000Struts = framework open source pour le développement

d'applications web en MVC Construit autour de technologies : Servlets Java, JSP, JavaBeans et

XMLPropose un ensemble de classes pour les couches du MVCFacilite la communication entre couchesFournit des fonctionnalités supplémentaires : (validation, i18n, Struts-

Layout, Struts-Tiles.)Efficace pour le développement des projets importantsFramework structurant (allant dans le sens d’une bonne conception).Modèle « MVC2 » partiellement « pré-programmé » .Très grande simplification de la gestion des formulaires en cas

d’erreur(s) de saisie.Bonne bibliothèque de « Tag. » prédéfinis simplifiant la syntaxe des

pages JSP.

Page 12: Chapitre4 Struts

12.04.23

Inconvénients de StrutsSupport de l’internationalisation (Les textes des messages sont

stockés dans des fichiers de ressources).Gestion simplifiée de télé versement de fichiers .

Inconvénients :Framework lourd, un peu long à maîtriserPeu adapté pour de petits projets

Page 13: Chapitre4 Struts

12.04.23

InstallationInstallation du JDK:

Télécharger JDK 1.4 ou version ultérieur du site de SunMicrosystems

Installation de Tomcat:

Télécharger et installer Tomcat à partir du site d’apache.

Installation de Struts:

Télécharger la dernière version de Struts 1 à partir du site officiale de Struts http://jakarta.apache.org/struts. Extraire les fichier dans un répértoire de travaille et copier le fichier struts-blank.war dans le repértoire de déploiement de votre serveur d’application. "jakarta-tomcat-5.0.4\webapps" pour le conteneur Tomcat.

struts-blank.war est un projet Struts préconfiguré et vide qui est sert comme point de départ du développement de votre application web en Struts.

struts-documentation.war contient l’API et la documentation de Struts.

struts-example.war contient un exemple de démonstration.

Page 14: Chapitre4 Struts

12.04.23

Architecture de Struts

Page 15: Chapitre4 Struts

12.04.23

Architecture de StrutsL’architecture de STRUTS repose sur les éléments suivants :

Une servlet prédéfini « ActionServlet » jouant le rôle de « Super Contrôleur » générique.

Des « java bean » de type « ActionForm Bean » (à programmer) faisant office de « firewall » entre http et les actions internes : un objet « ActionForm Bean » sert à gérer les paramètres http (stockage , relecture , vérification de saisies).

Nb : un objet « ActionForm Bean » est généralement utilisé pour re-peupler un formulaire html avec les champs non erronés (L’utilisateur n’a plus qu’à re-saisir les champs qui posent problème).

Des « java bean » de type Action (à programmer) et jouant le rôle de « sous servlet » : un objet « action » déclenche des traitements , peuple éventuellement un « DataBean » avec les résultats et initialise un renvoi vers une vue (page JSP) en utilisant les « ActionMapping » du fichier de configuration struts_config.xml .

Des pages JSP dont la partie dynamique est en quasi totalité gérée via des balises prédéfinies (TagLib struts-html et struts-bean ).

Page 16: Chapitre4 Struts

12.04.23

Super Contrôleur ActionServlet et configuration associée

La servlet ActionServlet constitue le cœur du framework « STRUTS »Voici un extrait du fichier de configuration web.xml de l’étude de cas

E-Shop.

Page 17: Chapitre4 Struts

12.04.23

web.xml

Page 18: Chapitre4 Struts

12.04.23

ActionForm Bean et Validation des saisies

Un « Form Bean » se déclare dans le fichier struts-config.xml de la façon suivante :

Ainsi associé à un nom logique, ce bean peut être référencé au sein d’un « Action mapping » :

Sert à quoi!??

Page 19: Chapitre4 Struts

12.04.23

ActionFormEn conséquence de tous ces paramétrages, une URL en …/E-Shop/

/loginAdmin.shop déclencher la servlet action qui avant de déclencher l’action (de path= "/loginAdmin") va:

Peupler le formBean de nom (name="logonForm") en y appelant automatiquement les méthodes en setXxx().

Invoquer la méthode validate() pour vérifier si les valeurs des paramètres Http ont bien été saisis.

Le code Java du FormBean est le suivant: est ce que cette page est loginAdmin.shop?

Ou celle applée par Envoyer?je croix que c la 2

Page 20: Chapitre4 Struts

12.04.23

ActionForm

Page 21: Chapitre4 Struts

12.04.23

ActionFormLa classe ActionForm est utiliser pour collecter les données de

l’utilisateur et les transférer vers le controleur (Action).

Notez bien que c’est déconseillé de passer un objet de type ActionForm au Modèle, car cette classe crée des dépendances avec le package javax.servlet ce qui rend vous classes métiers irréutilisables dans d’autres contexte.

Vous pouvez utiliser le même objet de type ActionForm dans différents formulaires.

Vous pouvez spécifier deux niveau de portée pour votre ActionForm : request et session.

Page 22: Chapitre4 Struts

12.04.23

ActionFormRemarque : En cas d'erreur, la méthode execute() du bean d'action n'est même

pasinvoquée et le contrôleur de struts renvoie la page

(input="/logon.jsp") dont la balise<html:errors/> sera automatiquement remplacée par la collection

d'erreurs retournées.Astuce:Pour lister les erreurs sous forme de pucesVous pouvez ajouter les deux balises suivantes avec leurs clés

comme suit :error.begin=<ul style="color: red;">error.end=</ul>Voir exemple dans E-Shop/pages/backEnd/index.jsp

Page 23: Chapitre4 Struts

12.04.23

Action Bean

Via l'entrée suivante du fichier de configuration struts-config.xml

une URL de forme …/E-Shop/loginAdmin.shop déclenchera la servlet action qui (sauf erreur de validation au niveau du FormBean) , va déclencher la méthode execute() de l'objet action (de path= "/loginAdmin" et dont la classe java correspond à la valeur de l'attribut type).

Page 24: Chapitre4 Struts

12.04.23

Action Bean

Dans le cas présent , la redirection déclenchée par notre action fait référence à une configuration locale. Parfois plusieurs actions redirigent vers les mêmes ressources, dans ce cas c’est intéressant de déclarer les redirections de manière globales comme suit :

Page 25: Chapitre4 Struts

12.04.23

Redirection Global

Page 26: Chapitre4 Struts

12.04.23

Considérations sur le multi-threading

Un "bean" de type "Action" que l'on peut considérer comme un "bean" de traitement ou comme un "sous servlet" est toujours instancié qu'une seule fois par les mécanismes internes de STRUTS .

La méthode execute(...) de la classe Action peut donc être appelée plusieurs fois en même temps par différents threads.

Conséquences: des blocs en synchronized(this) { ... } s'imposent parfois s'il faut manipuler des attributs déclarés dans le haut de la classe d' action.

Page 27: Chapitre4 Struts

12.04.23

Les bibliothèques de balises Struts

Page 28: Chapitre4 Struts

12.04.23

i18n dans Struts

Page 29: Chapitre4 Struts

12.04.23

i18n dans StrutsDans l’exemple précédent (tiré de la page /pages/backEnd/index.jsp )

la balise <bean:message key="login.connect"/> dicte aux mécanismes de STRUTS de récupérer le texte associé au point d'entrée " login.connect " du fichier de ressources lié à l'application web courante .

Ce fichier de ressources était référencé dans web.xml de la façon suivante

En fonction de la langue utilisée par l'utilisateur , le fichier pris en compte sera

MessageResources.properties (pour la langue par défaut) ou bien

MessageResources_xx.properties où xx est le code du pays (ex: fr pour France).

Remarque :Pour tester l’i18n vous devez changer la langue du navigateur.

Page 30: Chapitre4 Struts

12.04.23

i18n dans StrutsExemple :

Nb: les parties en {0} , {1} sont prévues pour être automatiquement remplacés par les paramètres de ActionMessage comme suit :

new ActionMessage("error.password.required",new String []{arg1})

Page 31: Chapitre4 Struts

12.04.23

Accès simplifié au "FormBean"

Au lieu de stocker les valeurs des champs d’un formulaire dans la requête ou dans la session et par la suite les récupérer sur le même formulaire en cas d’erreur, on peut se permettre d'écrire seulement

<html:text property="identifier"/>

Dans ce dernier le java bean automatiquement utilisé en interne pour récupérer les valeurs (via getXxx() ) correspond au "Form Bean" (de scope="session" ou "request") dont le nom (dans struts-config.xml [<action path='/loginAdmin' ... name='loginForm" ...>] ) est "loginForm" si l'attribut action de la balise <html:form> englobante vaut "/ loginAdmin.shop ". !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!????????????

Page 32: Chapitre4 Struts

12.04.23

Affichage de valeurs dans une page jsp

La balise <bean:write> de Struts est une version améliorée de <jsp:getProperty> qui: · reconnaît une syntaxe évoluée des noms de propriétés (ex: property="subpartx.propy"

déclenchant getSubpartx().getPropy() ).

<bean:write name="empruntForm" property="mensualite“ />

Page 33: Chapitre4 Struts

12.04.23

ExerciceDévelopper une application en Struts qui permet d’insérer des

enregistrements dans la table Personne(id, nom, prénom adresse, phone) et afficher le message : l’enregistrement (13, chetoui, ahmed, 25 rue bacha, 0612345678) a bien été inséré dans la base de données. Si l’enregistrement existe déjà vous affichez le message : l’enregistrement (13, chetoui, ahmed, 25 rue bacha, 0612345678) existe dans la base de données.

En cas d’erreur de saisie le client est redirigé vers le formulaire qui est pré remplit par les valeurs saisies, un message est affiché en rouge à côté du champs erronés.

Respecter l’i18n dans toute l’application

Tester l’application en anglais et en français.

Page 34: Chapitre4 Struts

12.04.23

ConclusionDans ce chapitre on a couvert les éléments de base du Framework

Struts, en plaçant chaque élément dans le composant du MVC adéquat. Dans le chapitre qui suit on va détailler les aspects avancées de Struts : Struts Layouts, Personalisation de la ServletAction, struts validator, Struts et les EJB, utilisation de struts tiles et comment étendre le framework struts.