Plan - PowerPoint PPT Presentation

1 / 27
About This Presentation
Title:

Plan

Description:

La solution la plus simple pour mettre en place un site web dynamique ... contiendra la valeur de f.getNom() r solu en String. select name='age' option value='1' ... – PowerPoint PPT presentation

Number of Views:54
Avg rating:3.0/5.0
Slides: 28
Provided by: iagl
Category:
Tags: contiendra | plan

less

Transcript and Presenter's Notes

Title: Plan


1
  • Struts 1.x
  • Marc Le Bihan

2
Plan
  • Développement web par Servlets et JSP.
  • Prise en charge de Struts.
  • Principe de fonctionnement du formulaire.
  • La soumission au contrôleur.

3
  • Construction de pages web par servlets et JSP

4
web simpliste la servlet (1/3)
  • La solution la plus simple pour mettre en place
    un site web dynamique est de construire une
    servlet.
  • public class MaServlet extends HttpServlet
  • public void doGet(HttpServletRequest request,
  • HttpServletResponse
    response)
  • throws IOException, ServletException
  • String szNom request.getParameter("nom")
  • PrintWriter out response.getWriter()
  • out.printf("ltHTMLgtBonjour slt/HTMLgt",
    szNom)
  • out.close()

5
web simpliste la servlet (2/3)
  • Mais
  • Elle mélange le code de présentation (HTML) à
    celui de contrôle et/ou daction.
  • Lémission dHTML est assez disgracieuxout.printl
    n("")
  • La transition dune servlet à une autre se fait
    par un objet RequestDispatcher assez lourd à
    manipuler.

6
web simpliste la servlet (3/3)
  • Les champs de saisie ne sont que ceux accessibles
    en HTML, et ils ne peuvent pas sauto-contrôler.
  • La création dune page complexe (avec panneaux
    dentête, pied, corps, etc.) est laborieuse.
  • Le javascript est  rude  à intégrer.

7
Web évolué les JSP (1/2)
  • Les JSP offrent un moyen de détacher la partie
    présentation de la partie validation/action.
  • lt_at_page language"java" gt
  • lt_at_page import"java.io." gt
  • lt_at_taglib uri"http//java.sun.com/jsp/jstl/core"
    prefix"c" gt
  • lt! private void indicateur(JspWriter out,
    boolean bIndicateur) throws IOException ... gt
  • lt indicateur(out, ve.isOuvert()) gt
  • ltbodygt
  • ltcchoosegt
  • ltcwhen test"ltx.estValide() gt"gt
  • ltdivgtBienvenuelt/divgt
  • lt/cwhengt
  • ltcotherwisegtCa ne va paslt/cotherwisegt
  • lt/cchoosegt
  • lt/bodygt

8
Web évolué les JSP (2/2)
  • Mais
  • Les transitions entre pages restent délicates.
  • Malgré la présence de tags (dont JSTL), les
    scriplets Java (lt gt) restent nombreux et
    embarrassants.
  • Mise en page.
  • Capacité de validation. Les champs restent de ce
    que lHTML propose.

9
Un framework proposé
  • Pour faciliter
  • La validation de pages web.
  • Leur agencement.
  • La transmission de données et la navigation de
    page en page.
  • Un framework, Struts, si lon en respecte les
    règles, se propose de
  • Nommer les pages par des étiquettes que lon
    désignera pour les atteindre.
  • Transmettre les données entre pages dune manière
    bien délimitée.
  • Proposer des aides à la validation et à la mise
    en page.

10
ltjspuseBeangtLes variables et leur portée (1/2)
Dans une page jsp, six types de variables peuvent
intervenir.La variable locale lt String szNom
gtLa variable membre de servlet lt! int
m_nCompteur gtltjspuseBean id"maVariable"
scope"" class"p1.p2.MaClasse"gt
type"p1.p2.MaClasse"La
variable de portée page, scope page,gt
pageContext.getAttribute("maVariable") La
variable de portée requête, scope request, gt
request.getAttribute("maVariable")
11
ltjspuseBeangtLes variables et leur portée (2/2)
  • La variable de portée session, scope session
  • gt request.getSession().getAttribute("maVariable")
  • La variable de portée application, scope
    application
  • gt pageContext.getServletContext().getAttribute("m
    aVariable")
  • Seules les variables définies par ltjspuseBeangt
    ou leurs instructions java équivalentes sont
    accessibles par
  • ltjspgetProperty gt et ltjspsetProperty gt, ainsi
    que par la désignation maVariable dans une
    page JSP.
  • Les deux autres ne le sont que par lt maVariable
    gt

12
ltjspgetPropertygt
  • ltjspgetProperty name"maVariable"
    property"duree"gt
  • Affiche sur la page HTML le contenu de
  • pageContext.getAttribute("maVariable").getDuree()
  • request.getAttribute("maVariable").getDuree()
  • request.getSession().getAttribute("maVariable").ge
    tDuree()
  • pageContext.getServletContext().getAttribute("maVa
    riable").getDuree()
  • (Le premier getAttribute() qui lui aura retourné
    une valeur)
  • Semploie sur une page JSP ainsi
  • ltpgtDébuté ltjspgetProperty name"maVariable"
    property"duree"gt plus tôt.lt/pgt
  • ltpgtDébuté maVariable.duree plus tôtlt/pgt

13
Déclaration servlets et jsp web.xml
  • Un fichier WEB-INF/web.xml basique.
  • ltweb-appgt
  • lt!-- Une servlet (qui est ici une jsp) --gt
  • ltservletgt
  • ltservlet-namegtAuthentificationlt/servlet-name
    gt
  • ltjsp-filegt/authentification/login.jsplt/jsp-f
    ilegt
  • lt/servletgt
  • lt!-- est lancée par /Login sur le navigateur.
    --gt
  • ltservlet-mappinggt
  • ltservlet-namegtAuthentificationlt/servlet-name
    gt
  • lturl-patterngt/Loginlt/url-patterngt
  • lt/servlet-mappinggt
  • ltwelcome-file-listgt
  • ltwelcome-filegtLoginlt/welcome-filegt
  • lt/welcome-file-listgt
  • lt/web-appgt

14
  • Prise en charge de Struts

15
Déclaration de Struts (1/3) binaires
  • Une distribution de Struts est placée dans
    WEB-INF/lib avec quelques compléments commons de
    Tomcat.

16
Déclaration de Struts (2/3) JSP
  • lt_at_taglib uri"/WEB-INF/struts-html.tld"
    prefix"html" gt
  • Reprend les mots-clés HTML, en facilitant parfois
    leur écriture.
  • lt_at_taglib uri"/WEB-INF/struts-bean.tld"
    prefix"bean" gt
  • Agir directement sur Struts et manipuler des
    messages.
  • lt_at_taglib uri"/WEB-INF/struts-logic.tld"
    prefix"logic" gt
  • Tests et conditions.
  • lt_at_taglib uri"/WEB-INF/struts-tiles.tld"
    prefix"tiles" gt
  • Mise en page.

17
Déclaration de Struts (3/3) web.xml
  • ltweb-appgt
  • ltservletgt
  • ltservlet-namegtactionlt/servlet-namegt
  • ltservlet-classgtorg.apache.struts.action.Acti
    onServletlt/servlet-classgt
  • ltinit-paramgt
  • ltparam-namegtconfiglt/param-namegt
  • ltparam-valuegt/WEB-INF/struts-config.xmllt/
    param-valuegt
  • lt/init-paramgt
  • ltload-on-startupgt1lt/load-on-startupgt
  • lt/servletgt
  • ltservlet-mappinggt
  • ltservlet-namegtactionlt/servlet-namegt
  • lturl-patterngt.dolt/url-patterngt
  • lt/servlet-mappinggt
  • lt/web-appgt

18
Principe de fonctionnement (1/4)
  • Toutes les données utiles dune page jsp qui
    seront affichées, contrôlées ou transportées à
    une autre page sont rassemblées dans un
    formulaire.
  • Il représente le contenu dune page JSP.
  • Cest un Bean il a un constructeur public sans
    arguments, des getters et des setters.
  • class MonForm extends ActionForm
  • private String m_szNom
  • private int m_nAge
  • public String getNom() ...
  • public int getAge() ...
  • public void setNom(String szNom) ...
  • public void setAge(int nAge) ...

19
Principe de fonctionnement (2/4)
  • Dans la page JSP, ce formulaire sera déclaré par
  • ltjspuseBean id"f" class"MonForm"
  • scope"pagerequestsessionapplication"gt
  • pour que le code présent dans la page HTML puisse
  • accéder à son contenu.
  • ltpgtBonjour f.nomlt/pgt

20
Principe de fonctionnement (3/4)
  • Dans struts-config.xml, ce formulaire est aussi
    déclaré.
  • ltstruts-configgt
  • ltform-bean name"f" type"MonForm"gt
  • lt/struts-configgt
  • Cette relation permettra à Struts de provoquer le
    chargement des valeurs dans le formulaire à
    l'arrivée dans la page,
  • (pagerequestsessionattribute).getAttribute("f")
    .getXXX()
  • dans les contrôles portés par la page JSP.

21
Principe de fonctionnement (4/4)
  • ainsi, les champs seront alimentés à partir du
    formulaire f.
  • ltinput name"nom" type"text" /gt
  • contiendra la valeur de f.getNom() résolu en
    String.
  • ltselect name"age"gt
  • ltoption value"1"gt0-10lt/optiongt
  • ltoption value"2"gt11-20lt/optiongt
  • ltoption value"3"gt20lt/optiongt
  • lt/selectgt
  • Présentera l'entrée qui correspond à la valeur de
    f.getAge(), qui renvoie un int.
  • Réciproquement, lors de la soumission d'une page
    JSP, les valeurs des contrôles seront replacées
    par f.setXXX() dans le formulaire, et lui replacé
    en page, requête, session ou application.

22
Première validation de contenu (1/3)
  • Une première validation de contenu peut être
    réalisée en implémentant une méthode dans le
    formulaire.
  • public ActionErrors validate(ActionMapping
    mappings, httpServletRequest req)
  • ActionErrors errors new ActionErrors()
  • if (m_nAge 1)
  • errors.add("age", new ActionError("jouetIna
    pproprie"))
  • return(errors)

23
Première validation de contenu (2/3)
  • La mention jouetInapproprie fait référence à une
    entrée dans un fichier de propriétés où se trouve
    le message que l'on veut afficher.
  • Ce fichier est mentionné dans le
    struts-config.xml
  • ltstruts-configgt
  • ltmessage-ressources parameter"properties.jsp.j
    ouets" null"false" key"jouets"gt
  • lt/struts-configgt
  • Et dans jouets.properties
  • jouetInapproprieCe jouet ne convient pas pour
    cet âge.

24
Première validation de contenu (3/3)
  • Enfin, dans la page JSP on précise l'emplacement
    où l'on souhaite que le message d'erreur soit
    affiché par cette instruction
  • lthtmlmessages id"errors" message"true"
    bundle"jouets"gt
  • ltbeanwrite name"errors" /gtltbr/gt
  • lt/htmlmessagesgt
  • Les messages d'erreurs créés par new
    ActionError() peuvent prendre des arguments.
  • jouetInapproprieCe jouet ne convient pas pour
    les 0.
  • errors.add(new ActionMessage("jouetInapproprie",
    "moins de dix ans"))
  • S'il n'y a aucune erreur détectée, renvoyer une
    collection ActionsErrors() vide par la méthode
    validate, et alors le formulaire sera validé.

25
Soumission au contrôleur (1/3)
  • Le formulaire validé est soumis à un contrôleur.
  • public MonAction extends Action
  • public ActionForward execute(ActionMapping
    mapping, ActionForm form, HttpServletRequest req,
    HttpServletResponse res) throws IOException,
    ServletException
  • Ce contrôleur peut réaliser d'autres validations
    et décider de mener la navigation Internet à une
    nouvelle page (forward).

26
Soumission au contrôleur (2/3)
Ce contrôleur a été déclaré à Struts toujours par
le biais du fichier struts-config.xml ltstruts-con
figgt ltaction type"MonAction" name"f"
path"/cadeaux"gt ltforward name"adresse"
path"/monAdresse.jsp" /gt ltforward
name"papier" path"/monPapierCadeau.jsp" /gt
lt/actiongt lt/struts-configgt Des destinations
communes à tous peuvent aussi être déclarées dans
ce fichier. ltglobal-forwardsgt ltforward
name"CDV" path"/conditionsDeVente.jsp" /gt
ltforward name"contact" path"/ContactezNous.jsp"
/gt lt/global-forwardsgt
27
Soumission au contrôleur (3/3)
Dans la fonction de traitement du contrôleur on
réalise donc d'autres validations, et l'on
redirige le navigateur. public ActionForward
execute(ActionMapping mapping, ActionForm form,

HttpServletRequest req, HttpServletResponse
res) MonForm f (MonForm)form
ActionsErrors errors new ActionsErrors()
// Quelques contrôles supplémentaires if
(f.getNom().length() lt 1) errors.add(new
ActionError("nom", "nomTropCourt")) if
(!errors.empty())
saveErrors(request, errors) // Il faut mettre
errors dans son contexte. return(null)
// Signifie nous resterons sur la page où nous
sommes. return(mapping.findForward("a
dresse")) // Nouvelle destination.
Write a Comment
User Comments (0)
About PowerShow.com