StrutsBasics - PowerPoint PPT Presentation

1 / 98
About This Presentation
Title:

StrutsBasics

Description:

Struts - qu'est que c'est et pourquoi l'utiliser? L'architecture de ... Biblioth que de balises Struts (transf r la pr sentation 'StrutsTags' ... – PowerPoint PPT presentation

Number of Views:57
Avg rating:3.0/5.0
Slides: 99
Provided by: voisi
Category:

less

Transcript and Presenter's Notes

Title: StrutsBasics


1
Struts - Initiation
2
Sang Shin sang.shin_at_sun.com www.javapassion.com J
ava Technology Evangelist Sun Microsystems,
Inc.
3
Le programme
  • Struts - qu'est que c'est et pourquoi l'utiliser?
  • L'architecture de Struts
  • Contrôleur au coeur de cette présentation
  • Modèle
  • Vue
  • Bibliothèque de balises Struts (transféré à la
    présentation "StrutsTags")?
  • Internationalisation
  • Validation et traitement des erreurs
  • Sélectionner une vue
  • Concernant Struts

4
C'est quoi Struts ?
5
Jakarta Struts
  • Struts est un open source framework pour les
    applications web développé sous le projet Apache
    Jakarta
  • http//jakarta.apache.org/struts/

6
C'est quoi Struts ?
  • Un framework Modèle-Vue-Contrôleur (MVC)
  • Permet de construire des applications web en
    utilisant des Servlets et des JSPs
  • L'application Struts est une application web qui
    doit pouvoir fonctionner sur n'importe lequel
    conteneur de servlets y compris les serveurs
    d'applications supportant J2EE.
  • Basé sur des modèles
  • Singleton, vue composée, delegate
  • Facile à maîtriser et utiliser
  • Comprend des bibliothèques de balises JSP
    personnalisées

7
Struts permet aux développeurs d'applications Web
de...
  • Créer leur applications Web JSP/Servlet en
    utilisant le modèle d'architecture MVC
  • Mettre en oeuvre des objets framework prêt à
    l'utilisation à travers des fichiers de
    configuration xml
  • Mettre en oeuvre des modèles de conception dans
    le framework
  • Mettre en oeuvre des aspects complémentaires tels
    que la validation de saisie, linternationalisatio
    n

8
Pourquoi Struts ?
9
Pourquoi utiliser Struts ?
  • Simplifie la création de son propre framework MVC
  • Encourage une bonne pratique de conception et de
    modélisation
  • Facile à maîtriser et utiliser
  • Riche en attributs
  • Supporte bien de multiple outils tiers
  • Souple et extensible
  • Grande communauté d'utilisateurs
  • Stable et mûre
  • Open source

10
Pourquoi utiliser Struts ?
  • S'intègre bien avec Java EE (J2EE)
  • Bonne sélection de taglibs
  • Fonctionne avec les applications Web existants
  • Retient les données des formulaires de saisies
  • Traitement standard des erreurs de façon
    programmatique et déclaratif
  • Sintègre avec le framework Tiles
  • Indique clairement les différentes
    responsabilités ce qui simplifie la maintenance à
    long terme (plus modulaire)?

11
L'architecture de Struts (Vue d'ensemble)?
12
Modèle-Vue-Contrôle (modèle 2)
Modèle d'architecture MVC
Conteneur de Servlet
(EIS)?
13
Le fonctionnement de Struts
14
Struts Une architecture MVC
  • Un contrôleur central gère les flux de
    l'application et délègue à un objet de type
    Action
  • Des gestionnaires dActions peuvent utiliser des
    composants de modèle
  • Un modèle représente une logique applicative ou
    un état
  • Une commande est renvoyée à travers le Contrôleur
    vers la Vue appropriée
  • Le transfère se fait selon un lot de mappings
    dans le fichier de configuration, qui fournit un
    vague lien entre la Vue et le Modèle

15
Struts Une architecture MVC
  • 3 Composants majeurs dans Struts
  • Contrôleur de Servlet (Contrôleur)?
  • Java Server Pages ou tout autre technologie de
    présentation (Vue)?
  • Une logique applicative sous la forme qui
    convient à l'application (Modèle)?
  • Le Contrôleur est au coeur de Struts
  • Struts est indépendant du Modèle et de la Vue
  • Struts peut fonctionner avec toute technologie de
    Modèle ou de Vue

16
Struts Une architecture MVC
  • Le fichier de configuration contient des Action
    Mappings
  • Relie l'URL aux Action Mapping
  • Le Contrôleur utilise ces mappings pour
    transformer des requêtes HTTP en actions
    dapplication
  • Défini le transfert/la navigation
  • Le mapping doit spécifier
  • Un chemin de requête
  • Une action pour répondre à la requête

17
Le Contrôleur
18
Quel est le rôle du Contrôleur ?
  • Il est la plaque tournante de l'architecture MVC
  • Chaque requête passe à travers le contrôleur
  • Il est responsable du contrôle des flux (action
    mapping) pour le traitement des requêtes
  • il lit le fichier de configuration pour
    déterminer le contrôle du flux

19
source Chuck Cavaness
20
Le Contrôleur dans le Framework de Struts
  • Le framework de Struts comprend un servlet de
    base
  • org.apache.struts.action.ActionServlet
  • Le mapping du Servlet doit être configuré dans
    web.xml
  • La configuration concernant Struts est exécuté à
    travers struts-config.xml
  • LAction Mapping définit le mapping entre l'URI
    de la requête entrante et une classe Action
    spécifique

21
Le rôle du développeur
  • Écrire une classe Action (c'est à dire une
    extension de la classe Action) pour chaque
    requête logique qui pourrait être reçue
  • redéfinition la méthode execute(), (la méthode
    perform() dans Struts 1.0)?
  • Écrire le fichier de configuration pour le
    action mapping
  • struts-config.xml
  • Mettre à jour le fichier de descripteur de
    déploiement de l'application web pour préciser
    l'ActionServlet
  • web.xml

22
Composants du Contrôleur dans le Framework de
Struts
  • ActionServlet (fourni par Struts)?
  • RequestProcessor (Struts 1.1)(fourni par Struts)?
  • Un pour chaque module
  • Action (fourni par le développeur)
  • Le développeur rajoute une extension à la classe
    action fournie par Struts
  • Action Mapping (précisé par le développeur)
  • Le développeur précise l'action mapping dans le
    fichier struts-config.xml
  • Le framework de Struts crée un objet
    ActionMapping et le transfère à l'objet Action

23
ActionServlet(Fourni par Framework)
24
A quoi sert un ActionServlet ?
  • Joue le rôle de Contrôleur
  • Traite les requêtes des utilisateurs
  • Établit ce que recherche lutilisateur en
    fonction de la requête
  • Récupère des informations du modèle (si besoin)
    pour fournir la vue nécessaire, et
  • Choisit la vue qui correspond à la requête de
    lutilisateur
  • Délègue la plupart de ce travail de base aux
    classes Action

25
A quoi sert un ActionServlet ? (Suite)?
  • Responsable pour l'initialisation et le nettoyage
    des ressources
  • charge la configuration d'application qui
    correspond au config init-param dans web.xml
  • lance une recherche à travers tous les éléments
    d'init-param pour trouver les éléments avec un
    nom commençant par config/ pour les modules
  • Pour accéder au module foo, on utiliserait un URL
    comme
  • http//localhost8080/myApp/foo/someAction.do

26
Contrôle des flux par le Contrôleur
27
Les flux de Struts (Struts 1.0)
L'objet de type Action prend en main la requête
et retourne une prochaine vue. La vue est
identifié par l'objet de type ActionForward.
28
RequestProcessor(Fourni par Framework)
29
A quoi sert le RequestProcessor ?
  • processPath
  • Identifie le chemin (path) utilisé. Ceci sera
    utilisé plus tard pour récupérer un objet de type
    ActionMapping
  • processLocale
  • Sélectionne un locale pour cette requête,
    s'il elle n'en a pas déjà, et la place dans la
    requête.
  • processContent
  • Fixe le type de contenu par défaut (avec encodage
    de caractères en option) pour toutes les réponses
    si nécessaire.

30
A quoi sert le RequestProcessor ?
  • processNoCache
  • Si cela est approprié, fixe les entêtes de
    réponses suivantes Pragma , Cache-Control ,
    et Expires .
  • processPreprocess
  • Ceci est un des hameçons fournis par le
    RequestProcessor pour redéfinir les sous-classes.
    L'exécution par défaut retourne la valeur true
    . Si on sous-classe RequestProcessor et
    redéfinit processPreprocess la valeur de retour
    devrait soit être true (indique que le
    process devrait continuer à traiter la requête)
    ou false (indique que la requête à déjà été
    prise en main et le process devrait retourner)?

31
A quoi sert le RequestProcessor ?
  • processMapping
  • Identifie l'objet de type ActionMapping associé à
    ce chemin.
  • processRoles
  • Si le mapping est associé à un rôle, ce process
    assure que l'utilisateur lançant la requête
    détient ce même rôle. Si ce n'est pas le cas, une
    erreur apparaît et le traitement de la requête
    est arrêté.
  • processActionForm
  • Instancie (si besoin) l'objet de type ActionForm
    associé à ce mapping (s'il y en a) et le place
    dans le scope (la portée) convenu.

32
A quoi sert le RequestProcessor ?
  • processPopulate
  • Garnit l'objet de type ActionForm associé à cette
    requête, s'il y en a.
  • processValidate
  • Valide (si demande est faite) l'objet ActionForm
    associé à cette requête (s'il y en a).
  • processForward
  • Si ce mapping représente un transfert (forward),
    transférer au chemin indiqué dans le mapping.

33
A quoi sert le RequestProcessor ?
  • processInclude
  • Si ce mapping représente un include , inclure
    le résultat d'avoir appelé le chemin dans cette
    requête.
  • processActionCreate
  • Instancie une instance de la classe indiqué dans
    le ActionMapping actuel (si besoin).
  • processActionPerform
  • C'est à ce moment que sont appelées les méthodes
    perform() ou execute() de votre action.

34
A quoi sert le RequestProcessor ?
  • processForwardConfig
  • Dernièrement, la méthode process du
    RequestProcessor prend l'objet ActionForward
    retourné par la classe Action et l'utilise pour
    sélectionner la prochaine ressource (s'il y en
    a). Le plus souvent, l'objet ActionForward mène à
    la page de présentation qui rend la réponse.

35
Action Mapping(Vous le fournissez)
36
Le Action Mapping dans le fichier de
configuration de Struts
  • Le contrôleur Struts - ActionServlet - a besoin
    de certaines informations concernant la façon
    dont chaque requête URI devrait être mappé à la
    bonne classe Action
  • Ces éléments se trouvent dans une interface Java
    qui s'appelle ActionMapping
  • Le framework Struts crée un objet de type
    ActionMapping à partir de l'élément de
    configuration ltActionMappinggt du fichier
    struts-config.xml

37
Le fichier de configuration de Struts
(struts-config.xml)?
  • struts-config.xml contient trois éléments
    importants utilisés pour décrire les Actions
  • ltform-beansgt contient des définitions de FormBean
    y compris nom et type (nom de classe)?
  • ltaction-mappinggt contient les définitions
    dActions
  • Utiliser un élément ltactiongt pour chaque Action
    définie
  • ltglobal-forwardsgt contient les définitions pour
    des redirections globales

38
Le fichier de configuration de Struts
(struts-config.xml)?
  • ltform-beansgt
  • Cette partie contient les définitions de vos
    form beans .
  • Un élément ltform-beangt est utilisé pour chaque
    form bean qui a les attributs importants
    suivants
  • nom le nom de la requête (et l'attribut de
    session sous lequel ce form bean sera enregistré)
  • type le nom de classe Java officiel du form bean

39
struts-config.xml ltform-beansgtde l'application
struts-submit
  • lt?xml version"1.0" encoding"ISO-8859-1" ?gt
  • lt!DOCTYPE struts-config PUBLIC
  • "-//Apache Software Foundation//DTD
    Struts Configuration 1.1//EN"
  • "http//jakarta.apache.org/struts/dtds/s
    truts-config_1_1.dtd"gt
  • ltstruts-configgt
  • lt!-- Form Bean Definitions
    --gt
  • ltform-beansgt
  • ltform-bean name"submitForm"
  • type"submit.SubmitFo
    rm"/gt
  • lt/form-beansgt

40
Le fichier de configuration de Struts
(struts-config.xml)?
  • ltaction-mappingsgt
  • Cette partie contient les définitions des
    Actions. Un élément ltactiongt peut être utilisé
    pour chaque Action à définir.

41
Le fichier de configuration de Struts
(struts-config.xml)?
  • ltaction-mappingsgt
  • Chaque élément ltactiongt nécessite une description
    des attributs suivants
  • path Le chemin dépendant du contexte de
    l'application qui mène à l'action (URI de la
    requête)?
  • type Le nom de classe Java officiel de la classe
    Action
  • nom Le nom de l'élément ltform-beangt à utiliser
    avec cette action
  • input Le nom de la page qui apparaît lorsqu'il y
    a une erreur avec la validation du formulaire de
    saisie
  • scope La portée dans laquelle le form bean est
    créé
  • validate Si on doit lancer la validation du
    formulaire de saisie ou pas

42
struts-config.xml ltaction-mappingsgtde
l'application struts-submit
  • lt!-- Action mapping definitions
    --gt
  • ltaction-mappingsgt
  • ltaction path"/submit"
  • type"submit.SubmitAction"
  • name"submitForm"
  • input"/submit.jsp"
  • scope"request"
  • validate"true"gt
  • ltforward name"success" path"/submit.jsp"/gt
  • ltforward name"failure" path"/submit.jsp"/gt
  • lt/actiongt
  • lt/action-mappingsgt
  • lt/struts-configgt

43
struts-config.xml ltaction-mappingsgtde
l'application struts-example
  • ltaction-mappingsgt
  • ltaction
  • path"/logon"
  • type"org.apache.struts.webapp.example
    .LogonAction"
  • name"logonForm"
  • scope"request"
  • input"/logon.jsp"
  • validate"true" /gt
  • lt/action-mappingsgt
  • lt/struts-configgt

44
Fichier de configuration de l'action mapping
  • ltglobal-forwardsgt
  • Les transferts sont des instances de la classe
    ActionForward renvoyé par une méthode execute()
    d'une Action
  • Ceci lie des noms logiques à des ressources
    spécifiques (souvent des JSPs)?
  • L'élément ltforwardgt a les attributs suivants
  • nom nom logique du transfert
  • utilisé dans la méthode execute() de la classe
    Action afin de transférer à la prochaine
    ressource
  • path ressource à transférer
  • redirect redirection (true) ou transfert (false)?

45
Transferts globaux
  • ltstruts-configgt
  • ltform-beansgt
  • ltform-bean
  • name"logonForm"
  • type"org.apache.struts.webapp.example
    .LogonForm" /gt
  • lt/form-beansgt
  • ltglobal-forwards
  • type"org.apache.struts.action.ActionForwa
    rd"gt
  • ltforward
  • name"logon"
  • path"/logon.jsp"
  • redirect"false" /gt
  • lt/global-forwardsgt

46
Transferts locaux
  • lt!-- Edit mail subscription --gt
  • ltaction
  • path"/editSubscription"
  • type"org.apache.struts.webapp.example.EditSub
    scriptionAction"
  • name"subscriptionForm"
  • scope"request"
  • validate"false"gt
  • ltforward
  • name"failure"
  • path"/mainMenu.jsp"/gt
  • ltforward
  • name"success"
  • path"/subscription.jsp"/gt
  • lt/actiongt

47
ActionForm(Vous le fournissez sauf si vous
utilisez DynaActionForm)
48
Le bean ActionForm (Form bean)?
  • Fourni par le développeur
  • Définir un bean ActionForm (c'est à dire, une
    classe Java qui étend la classe ActionForm)
  • Il est définit dans le fichier struts-config.xml
  • ltform-beangt
  • nom de la classe ltActiongt
  • Contient que des méthodes d'obtention et de
    réglage pour chaque champs - pas de logique
    applicative
  • Fournit le mécanisme standard de validation

49
Le bean ActionForm et le contrôleur
  • Pour chaque bean ActionForm défini dans le
    fichier servlet-config.xml, le contrôleur
    (ActionServlet)
  • Vérifie la portée de la session pour une instance
    du bean ActionForm
  • Sil ny en a pas, le contrôleur en crée une
  • Appel la méthode de réglage du bean ActionForm
    pour chaque paramètre de requête ayant un nom qui
    correspond au nom d'une propriété du bean.
  • L'objet du bean Action Form mis à jour est
    transmit en tant que paramètre à la méthode
    execute() de la classe Action.

50
Comment écrire un bean ActionForm
  • Ajouter des méthodes d'obtention et de réglage
    pour chaque propriété d'un formulaire de saisie
  • Ne pas inclure un code de logique applicative
  • Ajouter une méthode de validation standard qui
    s'appelle validate()?
  • Le Contrôleur appellera cette validation
  • Définir une propriété (y compris les méthodes
    getXxx (obtention) et setXxx (réglage)) pour
    chaque champ dans le formulaire de saisie.

51
Exemple submit.jsp
  • lt_at_ page language"java" gt
  • lt_at_ taglib uri"/WEB-INF/struts-bean.tld"
    prefix"bean" gt
  • lt_at_ taglib uri"/WEB-INF/struts-html.tld"
    prefix"html" gt
  • lt_at_ taglib uri"/WEB-INF/struts-logic.tld"
    prefix"logic" gt
  • lthtmlgt
  • ltheadgtlttitlegtSubmit examplelt/titlegtlt/headgt
  • ltbodygt
  • lth3gtExample Submit Pagelt/h3gt
  • lthtmlerrors/gt
  • lthtmlform action"submit.do"gt
  • Last Name lthtmltext property"lastName"/gtltbrgt
  • Address lthtmltextarea property"address"/gtltbrgt
  • Sex lthtmlradio property"sex"
    value"M"/gtMale
  • lthtmlradio property"sex"
    value"F"/gtFemaleltbrgt
  • Married lthtmlcheckbox property"married"/gtltbrgt

source Keld Hansen
52
Modèle ActionForm
  • package submit
  • import javax.servlet.http.HttpServletRequest
  • import org.apache.struts.action.
  • public final class SubmitForm extends ActionForm
  • / Last Name /
  • private String lastName "Hansen" //
    default value
  • public String getLastName()
  • return (this.lastName)
  • public void setLastName(String lastName)
  • this.lastName lastName
  • / Address /
  • private String address null
  • public String getAddress()

source Keld Hansen
53
struts-config.xml ltform-beansgt
  • lt?xml version"1.0" encoding"ISO-8859-1" ?gt
  • lt!DOCTYPE struts-config PUBLIC
  • "-//Apache Software Foundation//DTD
    Struts Configuration 1.1//EN"
  • "http//jakarta.apache.org/struts/dtds/s
    truts-config_1_1.dtd"gt
  • ltstruts-configgt
  • lt!-- Form Bean Definitions
    --gt
  • ltform-beansgt
  • ltform-bean name"submitForm"
  • type"submit.SubmitFo
    rm"/gt
  • lt/form-beansgt

source Keld Hansen
54
struts-config.xml ltaction-mappingsgt
  • lt!-- Action Mapping Definitions
    --gt
  • ltaction-mappingsgt
  • ltaction path"/submit"
  • type"submit.SubmitAction"
  • name"submitForm"
  • input"/submit.jsp"
  • scope"request"
  • validate"true"gt
  • ltforward name"success" path"/submit.jsp"/gt
  • ltforward name"failure" path"/submit.jsp"/gt
  • lt/actiongt
  • lt/action-mappingsgt
  • lt/struts-configgt

source Keld Hansen
55
DynaActionForm dans Struts 1.1
  • Au lieu de créer une nouvelle sous-classe
    d'ActionForm et des nouvelles méthodes
    d'obtention / de réglage pour chaque propriété
    d'un bean, ses propriétés, type et par défauts
    , peuvent être indiqués dans le fichier de
    configuration de Struts
  • Utiliser DynaActionForm le plus possible
  • Nous aborderons ce sujet dans le cours de
    perfectionnement de Struts

56
Action(Vous en créez unevous même)
57
source Chuck Cavaness
58
Classe Action
  • Focalisé sur le flux de commandes
  • Traite une requête client en appelant d'autres
    objets (beans de BusinessLogic) dans sa méthode
    execute()
  • Renvoi un objet de type ActionForward qui
    identifie une ressource de destination vers
    laquelle la commande devrait être transférée
  • La ressource pourrait être
  • JSP
  • Tile definition
  • Velocity model
  • Autre action

59
Cest quoi une classe Action ?
  • Une classe Java qui fait le travail de
    l'application.
  • Prend en main les requêtes
  • Met en oeuvre la logique applicative
  • Peut être simple ou plus complexe
  • Une classe Action simple met en oeuvre une
    logique applicative
  • Une classe Action plus complexe délègue cette
    mise en oeuvre au composants modèle
  • La classe Action fonctionne en tant que Façade
    pattern (patron de conception) dans ce cas

60
Exemple Action Logon
  • L'application doit
  • Authentifié un utilisateur
  • Ouvrir une session d'utilisateur
  • Traiter les erreurs
  • Développe un LogonAction

61
Rôle du développeur Classe Action
  • Ajouter une extension org.jakarta.struts.action.Ac
    tion
  • Redéfinir
  • la méthode execute() (dans Struts 1.1)?
  • la méthode perform() (dans Struts 1.0)

62
méthode execute(..) de la classe Action (que
Struts 1.1)?
  • Appelé par le contrôleur
  • public ActionForward execute(
  • ActionMapping mapping,
  • ActionForm form,
  • HttpServletRequest request,
  • HttpServletResponse response)
  • throws Exception

63
méthode perform(..) de la classe Action (que
Struts 1.0)?
  • Deprecated
  • public ActionForward perform(
  • ActionMapping mapping,
  • ActionForm form,
  • HttpServletRequest request,
  • HttpServletResponse response)
  • throws IOException, ServletException

64
méthode execute(..) de la classe Action
  • Effectue le traitement nécessaire pour traiter
    cette requête
  • Met à jour les objets côté serveur (variables de
    portée) qui seront utilisés pour créer la
    prochaine page de l'interface utilisateur
  • Retourne un objet de type ActionForward qui
    correspond

65
Exemple Classe Action
  • package submit
  • import javax.servlet.http.
  • import org.apache.struts.action.
  • public final class SubmitAction extends Action
  • public ActionForward execute(ActionMapping
    mapping,
  • ActionForm form,
  • HttpServletRequest
    request,
  • HttpServletResponse
    response)
  • SubmitForm f (SubmitForm) form // get the
    form bean
  • // and take the last name value
  • String lastName f.getLastName()
  • // Translate the name to upper case
  • //and save it in the request object
  • request.setAttribute("lastName",
    lastName.toUpperCase())

66
Principes de conception d'une classe Action
  • Le contrôleur (Servlet) crée qu'une instance de
    la classe Action et l'utilise pour toutes les
    requêtes
  • La classe Action doit être multi-thread safe
  • Utilise des variables locaux (au lieu de
    variables d'instance)?
  • La classe Action devrait être une couche légère
  • Utiliser des composants de modèle pour prendre en
    main la logique applicative

67
Exemple 2 Classe Action
  • package submit
  • import javax.servlet.http.
  • import org.apache.struts.action.
  • public final class SubmitAction extends Action
  • public ActionForward execute(ActionMapping
    mapping,
  • ActionForm form,
  • HttpServletRequest
    request,
  • HttpServletResponse
    response)
  • SubmitForm f (SubmitForm) form // get the
    form bean
  • // and take the last name value
  • String lastName f.getLastName()
  • if (lastName.startsWith(Passion))
  • // Translate the name to upper case
  • //and save it in the request object
  • request.setAttribute("lastName",
    lastName.toUpperCase())
  • // Forward control to the specified success
    target
  • return (mapping.findForward("success"))

68
struts-config.xml ActionMapping
  • lt!-- Action Mapping Definitions
    --gt
  • ltaction-mappingsgt
  • ltaction path"/submit"
  • type"submit.SubmitAction"
  • name"submitForm"
  • input"/submit.jsp"
  • scope"request"
  • validate"true"gt
  • ltforward name"success" path"/submitSuccess.j
    sp"/gt
  • ltforward name"failure" path"/submitFailure.j
    sp"/gt
  • lt/actiongt
  • lt/action-mappingsgt
  • lt/struts-configgt

69
Les classes Action préfabriquées
  • ForwardAction
  • DispatchAction
  • Nous aborderons ce sujet dans le cours de
    perfectionnement de Struts

70
Composants du modèle (Vous les fournissez)
71
Composants du modèle
  • Le modèle est divisé en concepts
  • L'état interne du système
  • Logique applicative qui peut changer cet état
  • L'état interne du système représenté par des
  • JavaBeans
  • Enterprise JavaBeans
  • POJOs
  • JDO
  • JDBC
  • Autre chose

72
source Chuck Cavaness
73
Composants du modèle
  • JavaBeans et la portée
  • La page visible à l'intérieur d'une page JSP
    simple pour la durée de la requête en cours
  • La requête visible à l'intérieur d'une page JSP
    simple ainsi que dans toute page ou servlet
    inclus dans cette page ou qui reçoit un transfert
    de cette page
  • La session visible dans tous les pages JSP et
    servlets qui participent à une session
    d'utilisateur en particulier, à travers une ou
    plusieurs requêtes
  • L'application visible dans toutes les pages JSP
    et servlets qui font partie d'une application web

74
Composants du modèle
  • Les pages JSP et servlets qui sont dans la même
    application web partagent les mêmes lots de
    collection de beans
  • Exemple
  • Code servlet
  • MyCart mycart new MyCart(...)
  • request.setAttribute("cart", mycart)
  • page JSP
  • ltjspuseBean id"cart" scope"request"
  • class"com.mycompany.MyApp.MyCart"/gt

75
Composants Modèle dans le Framework de Struts
  • Bean de type ActionForm (avec caveat)?
  • Veuillez noter que beaucoup de gens ne considère
    pas le bean ActionForm en tant que composant
    modèle, mais en tant que données saisies par un
    utilisateur
  • Bean de type SystemState (état système)
  • Ceci est un terme conceptuel Struts ne fournit
    aucune programmation API
  • Bean de type BusinessLogic (logique applicative)
  • Ceci est un terme conceptuel Struts ne fournit
    aucune programmation API

76
Composants modèle de StrutsBeans de type
System State Business Logic
77
Bean de type SystemState
  • Struts ne définit pas une classe officielle pour
    ceci
  • Définit l'état actuel
  • Pourrait être représenté en tant que lot d'un ou
    plusieurs classes de JavaBean dont les propriétés
    définissent l'état actuel.
  • Exemple un system de panier d'achat virtuel
  • Contient un bean qui représente le panier pris en
    charge pour chaque acheteur individuel
  • Inclut le lot d'articles que l'acheteur a
    sélectionné

78
Bean de type SystemState
  • Pour des systèmes à petite échelle ou pour des
    informations état qui n'ont pas besoin d'être
    sauvegardées sur la durée
  • un lot de beans System State peuvent contenir
    tout les informations que le système ait pu
    retenir
  • Application à grande échelle
  • Des beans de type SystemState peuvent représenter
    des informations stockées de façon permanente
    dans une base de données externe quelconque
  • L'objet CustomerBean qui correspond à cette
    rangée dans la table CUSTOMERS
  • EJB peut être utilisé

79
Bean de type BusinessLogic (règles de gestion)
  • Struts ne définit pas une classe formelle pour
    ceci
  • Peut être un JavaBean ordinaire
  • Peut être un EJB avec ou sans état
  • Contient la logique fonctionnelle d'une
    application en utilisant des appels de méthode
  • L'objet Action doit traduire la requête HTTP et
    appeler le bean de type BusinessLogic

80
Bean de type BusinessLogic (règles de gestion)
  • L'idéal serait de les concevoir de façon à ce
    qu'il ne savent pas qu'ils sont en train d'être
    exécutés dans un environnement d'application web
  • ne devraient pas faire référence à des objets
    application web
  • réutilisables

81
Composants de Vue (Vous les fournissez)
82
source Chuck Cavaness
83
Composants de Vue
  • Des fichier JSP que vous écrivez pour votre
    application à vous
  • Lot de bibliothèques tag JSP personnalisées
  • Fichiers ressources pour l'internationalisation
  • Permet une création rapide des formulaires d'une
    application
  • Travaille avec le contrôleur - Servlet

84
Vue
  • L'objet ActionForward informe le contrôleur
    Servlet quelle est la page JSP réceptrice
  • Les pages JSP utilisent des beans de type
    ActionForm pour afficher les données modèle en
    sortie
  • Struts contient une série de bibliothèques tag
  • Facilite la communication entre les créateurs
    HTML et les développeurs
  • Privilège un contenu web dynamique

85
Les interactions entre Forms et FormBean
  • Si l'utilisateur commet une erreur, l'application
    devrait lui permettre de faire des corrections
  • Avec juste JSP, vous devez faire
  • ltinput type"text" name"username"
  • value"lt loginBean.getUsername() gt"/gt
  • Avec Struts, vous faites
  • lthtmltext property"username"/gt

86
Exemple submit.jsp
  • lt_at_ page language"java" gt
  • lt_at_ taglib uri"/WEB-INF/struts-bean.tld"
    prefix"bean" gt
  • lt_at_ taglib uri"/WEB-INF/struts-html.tld"
    prefix"html" gt
  • lt_at_ taglib uri"/WEB-INF/struts-logic.tld"
    prefix"logic" gt
  • lthtmlgt
  • ltheadgtlttitlegtSubmit examplelt/titlegtlt/headgt
  • ltbodygt
  • lth3gtExample Submit Pagelt/h3gt
  • lthtmlerrors/gt
  • lthtmlform action"submit.do"gt
  • Last Name lthtmltext property"lastName"/gtltbrgt
  • Address lthtmltextarea property"address"/gtltbrgt
  • Sex lthtmlradio property"sex"
    value"M"/gtMale
  • lthtmlradio property"sex"
    value"F"/gtFemaleltbrgt
  • Married lthtmlcheckbox property"married"/gtltbrgt

87
Exemple submit.jsp
  • ltlogicpresent name"lastName" scope"request"gt
  • Hello
  • ltlogicequal name"submitForm" property"age"
    value"a"gt
  • young
  • lt/logicequalgt
  • ltlogicequal name"submitForm" property"age"
    value"c"gt
  • old
  • lt/logicequalgt
  • ltbeanwrite name"lastName" scope"request"/gt
  • lt/logicpresentgt
  • lt/bodygt
  • lt/htmlgt

88
web.xml
89
Descripteur de déploiement d'une application web
(web.xml)
  • L'application Struts est une application Web
  • Suit la même règle
  • Doit avoir un descripteur de déploiement web.xml
  • web.xml inclus
  • Une instance de configuration de l'ActionServlet
    et du mapping
  • Fichier de ressource ltinit-paramgt
  • Fichier servlet-config.xm ltinit-paramgt
  • Définition des bibliothèques de balises de Struts
  • web.xml est situé dans WEB-INF/web.xml

90
Exemple web.xml
  • lt!DOCTYPE web-app
  • PUBLIC "-//Sun Microsystems, Inc.//DTD Web
    Application 2.2//EN"
  • "http//java.sun.com/j2ee/dtds/web-app_2_2.dtd"gt
  • ltweb-appgt
  • ltdisplay-namegtAdvanced J2EE Programming Class
    Sample Applt/display-namegt
  • lt!-- Standard Action Servlet Configuration
    (with debugging) --gt
  • ltservletgt
  • ltservlet-namegtactionlt/servlet-namegt
  • ltservlet-classgt
  • org.apache.struts.action.ActionServlet
  • lt/servlet-classgt
  • ltinit-paramgt
  • ltparam-namegtapplicationlt/param-namegt
  • ltparam-valuegtApplicationResourceslt/param-val
    uegt
  • lt/init-paramgt
  • ltinit-paramgt
  • ltparam-namegtconfiglt/param-namegt

91
Exemple web.xml
  • lt!-- Standard Action Servlet Mapping --gt
  • ltservlet-mappinggt
  • ltservlet-namegtactionlt/servlet-namegt
  • lturl-patterngt.dolt/url-patterngt
  • lt/servlet-mappinggt
  • lt!-- Struts Tag Library Descriptors --gt
  • lttaglibgt
  • lttaglib-urigt/WEB-INF/struts-bean.tldlt/taglib-u
    rigt
  • lttaglib-locationgt/WEB-INF/struts-bean.tldlt/tag
    lib-locationgt
  • lt/taglibgt
  • lttaglibgt
  • lttaglib-urigt/WEB-INF/struts-html.tldlt/taglib-u
    rigt
  • lttaglib-locationgt/WEB-INF/struts-html.tldlt/tag
    lib-locationgt
  • lt/taglibgt
  • lttaglibgt
  • lttaglib-urigt/WEB-INF/struts-logic.tldlt/taglib-
    urigt
  • lttaglib-locationgt/WEB-INF/struts-logic.tldlt/ta
    glib-locationgt
  • lt/taglibgt

92
L'internationalisation
93
L'internationalisation
  • Étend l'approche de base de java.util.ResourceBund
    le
  • org.apache.struts.util.MessageResources
  • Permet de préciser d'une clé locale dynamique en
    fonction de chaque utilisateur
  • Limité à la présentation, pas à la saisie
  • Les lots de ressources sont configurer dans le
    fichier web.xml

94
L'internationalisation Le rôle du développeur
  • Créer un fichier de ressource pour une langue par
    défaut
  • Créer des fichiers de ressources pour chaque
    langue supplémentaire
  • Définir un nom de base de fichier pour le lot de
    ressources dans un paramètre d'initialisation
  • Dans une page JSP
  • Utiliser lthtmlerrors/gt pour afficher les
    messages d'erreur spécifiques à un locale

95
Fichier de ressources
  • MyApplication.properties
  • Contient les messages dans la langue par défaut
    du serveur
  • Si la langue par défaut est l'anglais, il y aura
    peut être une saisie tel que
  • prompt.helloHello
  • MyApplication_xx.properties
  • Contient les mêmes messages dans la langue avec
    le code langue ISO "xx"
  • prompt.helloBonjour

96
Exemple ApplicationResource.properties
  • errors.headerlth4gtValidation Error(s)lt/h4gtltulgt
  • errors.footerlt/ulgtlthrgt
  • error.lastNameltligtEnter your last name
  • error.addressltligtEnter your address
  • error.sexltligtEnter your sex
  • error.ageltligtEnter your age

97
Exemple web.xml
  • ltservletgt
  • ltservlet-namegtactionlt/servlet-namegt
  • ltservlet-classgt
  • org.apache.struts.action.ActionServlet
  • lt/servlet-classgt
  • ltinit-paramgt
  • ltparam-namegtapplicationlt/param-namegt
  • ltparam-valuegt
  • com.mycompany.mypackage.MyApplicatio
    n
  • lt/param-valuegt
  • lt/init-paramgt
  • lt!-- ... --gt
  • lt/servletgt

98
Validation (de la saisie)
99
Validation Rôle du développeur (Struts 1.0)
  • Indiquer que la validation de saisie soit des
    attributs de l'élément ltactiongt sous
    ltaction-mappinggt dans le fichier
    servlet-config.xml
  • validatetrue
  • Préciser la page JSP qui doit être affichée quand
    la validation échoue
  • input/errorpage.jsp
  • Neutraliser la méthode validate() à l'intérieur
    de la classe ActionForm
  • facultatif

100
la méthode validate ()
  • Appelée par le contrôleur - servlet
  • après que les propriétés beans ont été garnies
  • mais avant que la méthode execute () de la classe
    Action qui correspond soit appelé
  • Facultative
  • méthode par défaut retourne la valeur nul
  • Syntaxe
  • public ActionErrors validate(ActionMapping
    mapping,

  • HttpServletRequest request)

101
Exemple la méthode validate ()
  • Dans l'application Login
  • Assurez vous que le nom d'utilisateur et le
    mot de passe sont saisis
  • Assurez vous que le mot de passe contient
    plus de 6 caractères

102
la méthode validate ()
  • Après la validation
  • s'il n'y a pas d'erreur de validation, valeur de
    retour null
  • S'il y a erreur, valeur de retour ActionErrors
  • Chaque ActionError contient une clé de message
    d'erreur pour accéder au lot MessageResources de
    l'application
  • Le contrôleur servlet enregistre le tableau
    ActionErrors comme attribut de requête utilisable
    par la balise lthtmlerrorsgt
  • Ensuite, le contrôleur re-transfère la commande
    au formulaire de saisie (identifié par la
    propriété de saisie pour cet ActionMapping)?

103
La classe ActionError
  • Mécanisme utilisé pour signaler des erreurs
    pendant la validation de saisie
  • Contient les erreurs
  • clé de message utilisée pour recherche de texte à
    partir du fichier de ressources
  • Permet le remplacement de paramètres
  • ActionErrors est un groupe d'ActionErrors

104
struts-config.xml Validation
  • lt!-- Action Mapping Definitions
    --gt
  • ltaction-mappingsgt
  • ltaction path"/submit"
  • type"hansen.playground.SubmitA
    ction"
  • name"submitForm"
  • input"/submit.jsp"
  • scope"request"
  • validate"true"gt
  • ltforward name"success" path"/submit.jsp"/gt
  • ltforward name"failure" path"/submit.jsp"/gt
  • lt/actiongt
  • lt/action-mappingsgt
  • lt/struts-configgt

105
ActionForm
  • public final class SubmitForm extends ActionForm
  • ...
  • public ActionErrors validate(ActionMapping
    mapping,
  • HttpServletRequest request)
  • ...
  • // Check for mandatory data
  • ActionErrors errors new ActionErrors()
  • if (lastName null lastName.equals(""))
  • errors.add("Last Name", new
    ActionError("error.lastName"))
  • if (address null address.equals(""))
  • errors.add("Address", new
    ActionError("error.address"))
  • if (sex null sex.equals(""))
  • errors.add("Sex", new ActionError("error.sex
    "))

106
Exemple submit.jsp
  • lt_at_ page language"java" gt
  • lt_at_ taglib uri"/WEB-INF/struts-bean.tld"
    prefix"bean" gt
  • lt_at_ taglib uri"/WEB-INF/struts-html.tld"
    prefix"html" gt
  • lt_at_ taglib uri"/WEB-INF/struts-logic.tld"
    prefix"logic" gt
  • lthtmlgt
  • ltheadgtlttitlegtSubmit examplelt/titlegtlt/headgt
  • ltbodygt
  • lth3gtExample Submit Pagelt/h3gt
  • lthtmlerrors/gt
  • lthtmlform action"submit.do"gt
  • Last Name lthtmltext property"lastName"/gtltbrgt
  • Address lthtmltextarea property"address"/gtltbrgt
  • Sex lthtmlradio property"sex"
    value"M"/gtMale
  • lthtmlradio property"sex"
    value"F"/gtFemaleltbrgt
  • Married lthtmlcheckbox property"married"/gtltbrgt
  • Age lthtmlselect property"age"gt

107
Système de validateur dans Struts 1.1
  • Une logique de validation peut être précisée dans
    le fichier de configuration struts-config.xml
  • Au lieu d'écrire un code Java - méthode
    validate()
  • Nous aborderons ce sujet dans le cours de
    perfectionnement de Struts

108
Traitement des erreurs
109
Validation de saisie contre validation de la
logique applicative
  • Met en oeuvre des validations simples de premier
    plan en utilisant la méthode d'ActionForm
    validate ()
  • Même ceci est facultatif
  • Prend en main la validation de la logique
    applicative dans la classe Action

110
Erreur d'application dans la classe Action
  • Saisit les erreurs des beans System state ou
    Business logic
  • Crée un objet de type ActionErrors et un retour
  • ActionServlet peut agir si une exception
    particulière est lancé
  • Peut être globale ou basée sur des actions
  • Peut être un simple transfert ou transmise à une
    classe personnalisée de gestionnaire d'erreurs
  • A travers un ExceptionHandler (gestionnaire
    d'exception) par défaut

111
Gestionnaire d'exception personnalisé (1.1)
  • Définir un ExceptionHandler personnalisé à
    exécuter quand une méthode execute () d'une
    action lance une exception
  • Sous-classe org.apache.struts.action.ExceptionHand
    ler
  • Votre méthode execute () devrait traiter
    l'exception et retourner un objet de type
    ActionForward qui informera Struts où transférer
    par la suite
  • Exemple
  • Définissez en un pour java.lang.Exception pour un
    débogage

112
Gestionnaire d'exception personnalisé (1.1)
  • Configurez votre gestionnaire d'exception dans
    struts-config.xml
  • ltglobal-exceptionsgt
  • ltexception
  • key"some.key"
  • type"java.io.IOException"
  • handler"com.yourcorp.ExceptionHandler"/gt
  • lt/global-exceptionsgt
  • com.yourcorp.ExceptionHandler.execute() sera
    appelé quand une IOException est lancé par une
    action

113
Gestionnaire d'exception personnalisé (1.1)
  • Peut être global ou par action
  • ltaction ...gt
  • ltexception
  • key"some.key"
  • type"java.io.IOException"
  • handler"com.yourcorp.ExceptionHandler"/gt
  • lt/actiongt

114
Exemple Lancer une exception
  • package hansen.playground
  • import javax.servlet.http.
  • import org.apache.struts.action.
  • public final class SubmitAction extends Action
  • public ActionForward execute(ActionMapping
    mapping,
  • ActionForm form,
  • HttpServletRequest
    request,
  • HttpServletResponse
    response)
  • SubmitForm f (SubmitForm) form // get the
    form bean
  • // and take the last name value
  • String lastName f.getLastName()
  • if (lastName.startsWith(Passion))
  • // Translate the name to upper case
  • //and save it in the request object
  • request.setAttribute("lastName",
    lastName.toUpperCase())
  • // Forward control to the specified success
    target
  • return (mapping.findForward("success"))

115
Gestionnaire d'exception personnalisé (1.1)
  • Un ExceptionHandler différent pour une erreur
    différente
  • ltglobal-exceptionsgt
  • ltexception
  • handler"com.cavaness.storefront.CustomizedExc
    eptionHandler"
  • key"global.error.message"
  • path"/error.jsp"
  • scope"request"
  • type"java.lang.Exception"/gt
  • ltexception
  • handler"com.cavaness.storefront.SecurityExcep
    tionHandler"
  • key"security.error.message"
  • path"/login.jsp"
  • scope"request"
  • type"com.cavaness.storefront.SecurityExceptio
    n"/gt
  • lt/global-exceptionsgt

116
Sélectionner une vue
117
Sélectionner une vue Le rôle du développeur
  • Dans struts-config file,
  • Indiquez page JSP à transférer (ou définition
    Tiles, autre action, Velocity template) pour
    chaque résultat à travers l'élément fille
    ltforwardgt de l'élément ltactiongt ou
    ltglobal-forwardsgt
  • Dans la méthode execute(..) de la classe Action
  • Retour de l'objet ActionForward associé à un
    résultat logique spécifique

118
struts-config.xml ActionMapping
  • lt!-- Action Mapping Definitions
    --gt
  • ltaction-mappingsgt
  • ltaction path"/submit"
  • type"hansen.playground.SubmitA
    ction"
  • name"submitForm"
  • input"/submit.jsp"
  • scope"request"
  • validate"true"gt
  • ltforward name"success"
    path"/submit.jsp"/gt
  • ltforward name"failure"
    path"/submit.jsp"/gt
  • lt/actiongt
  • lt/action-mappingsgt
  • lt/struts-configgt

119
Exemple Classe Action
  • package hansen.playground
  • import javax.servlet.http.
  • import org.apache.struts.action.
  • public final class SubmitAction extends Action
  • public ActionForward execute(ActionMapping
    mapping,
  • ActionForm form,
  • HttpServletRequest
    request,
  • HttpServletResponse
    response)
  • SubmitForm f (SubmitForm) form // get the
    form bean
  • // and take the last name value
  • String lastName f.getLastName()
  • // Translate the name to upper case
  • //and save it in the request object
  • request.setAttribute("lastName",
    lastName.toUpperCase())

120
Concernant Struts
121
La Passion!
Write a Comment
User Comments (0)
About PowerShow.com