1 / 27

Struts 1.x Marc Le Bihan

Struts 1.x Marc Le Bihan. Plan. Développement web par Servlets et JSP. Prise en charge de Struts. Principe de fonctionnement du formulaire. La soumission au contrôleur. Construction de pages web par servlets et JSP. web simpliste: la servlet (1/3).

elise
Download Presentation

Struts 1.x Marc Le Bihan

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Struts 1.x Marc Le Bihan Struts 1.x

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

  3. Construction de pages web par servlets et JSP Struts 1.x

  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. publicclass MaServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String szNom = request.getParameter("nom"); PrintWriter out = response.getWriter(); out.printf("<HTML>Bonjour %s</HTML>", szNom); out.close(); } } Struts 1.x

  5. web simpliste: la servlet (2/3) Mais: • Elle mélange le code de présentation (HTML) à celui de contrôle et/ou d’action. • L’émission d’HTML est assez disgracieuxout.println("…"); • La transition d’une servlet à une autre se fait par un objet RequestDispatcher assez lourd à manipuler. Struts 1.x

  6. web simpliste: la servlet (3/3) • Les champs de saisie ne sont que ceux accessibles en HTML, et ils ne peuvent pas s’auto-contrôler. • La création d’une page complexe (avec panneaux d’entête, pied, corps, etc.) est laborieuse. • Le javascript est « rude » à intégrer. Struts 1.x

  7. Web évolué: les JSP (1/2) Les JSP offrent un moyen de détacher la partie présentation de la partie validation/action. <%@pagelanguage="java" %> <%@pageimport="java.io.*" %> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%! private void indicateur(JspWriter out, boolean bIndicateur) throws IOException {...} %> <% indicateur(out, ve.isOuvert()); %> <body> <c:choose> <c:whentest="<%=x.estValide() %>"> <div>Bienvenue</div> </c:when> <c:otherwise>Ca ne va pas</c:otherwise> </c:choose> </body> Struts 1.x

  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 (<% …%>) restent nombreux et embarrassants. • Mise en page. • Capacité de validation. Les champs restent de ce que l’HTML propose. Struts 1.x

  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 l’on en respecte les règles, se propose de: • Nommer les pages par des étiquettes que l’on désignera pour les atteindre. • Transmettre les données entre pages d’une manière bien délimitée. • Proposer des aides à la validation et à la mise en page. Struts 1.x

  10. <jsp:useBean>Les variables et leur portée (1/2) Dans une page jsp, six types de variables peuvent intervenir.La variable locale: <% String szNom; %>La variable membre de servlet: <%! int m_nCompteur; %><jsp:useBean id="maVariable" scope="…" class="p1.p2.MaClasse"> |type="p1.p2.MaClasse"La variable de portée page, scope page,=> pageContext.getAttribute("maVariable"); La variable de portée requête, scope request, => request.getAttribute("maVariable"); Struts 1.x

  11. <jsp:useBean>Les variables et leur portée (2/2) La variable de portée session, scope session => request.getSession().getAttribute("maVariable"); La variable de portée application, scope application => pageContext.getServletContext().getAttribute("maVariable"); Seules les variables définies par <jsp:useBean> ou leurs instructions java équivalentes sont accessibles par <jsp:getProperty …> et <jsp:setProperty …>, ainsi que par la désignation ${maVariable} dans une page JSP. Les deux autres ne le sont que par <%= maVariable %> Struts 1.x

  12. <jsp:getProperty> <jsp:getProperty name="maVariable" property="duree"> Affiche sur la page HTML le contenu de: pageContext.getAttribute("maVariable").getDuree() request.getAttribute("maVariable").getDuree() request.getSession().getAttribute("maVariable").getDuree() pageContext.getServletContext().getAttribute("maVariable").getDuree() (Le premier getAttribute() qui lui aura retourné une valeur) S’emploie sur une page JSP ainsi: <p>Débuté <jsp:getProperty name="maVariable" property="duree"> plus tôt.</p> <p>Débuté ${maVariable.duree} plus tôt</p> Struts 1.x

  13. Déclaration servlets et jsp: web.xml Un fichier WEB-INF/web.xml basique. <web-app> <!-- Une servlet (qui est ici une jsp) --> <servlet> <servlet-name>Authentification</servlet-name> <jsp-file>/authentification/login.jsp</jsp-file> </servlet> <!-- est lancée par /Login sur le navigateur. --> <servlet-mapping> <servlet-name>Authentification</servlet-name> <url-pattern>/Login</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>Login</welcome-file> </welcome-file-list> </web-app> Struts 1.x

  14. Prise en charge de Struts Struts 1.x

  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. Struts 1.x

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

  17. Déclaration de Struts (3/3): web.xml <web-app> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app> Struts 1.x

  18. Principe de fonctionnement (1/4) Toutes les données utiles d’une 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 d’une page JSP. C’est 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) {...} } Struts 1.x

  19. Principe de fonctionnement (2/4) Dans la page JSP, ce formulaire sera déclaré par: <jsp:useBeanid="f" class="MonForm" scope="page|request|session|application"> pour que le code présent dans la page HTML puisse accéder à son contenu. <p>Bonjour ${f.nom}</p> Struts 1.x

  20. Principe de fonctionnement (3/4) Dans struts-config.xml, ce formulaire est aussi déclaré. <struts-config> <form-beanname="f" type="MonForm"> </struts-config> Cette relation permettra à Struts de provoquer le chargement des valeurs dans le formulaire à l'arrivée dans la page, (page|request|session|attribute).getAttribute("f").getXXX() dans les contrôles portés par la page JSP. Struts 1.x

  21. Principe de fonctionnement (4/4) ainsi, les champs seront alimentés à partir du formulaire f. <input name="nom" type="text" /> contiendra la valeur de f.getNom() résolu en String. <select name="age"> <option value="1">0-10</option> <option value="2">11-20</option> <option value="3">20+</option> </select> 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. Struts 1.x

  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("jouetInapproprie")); return(errors); } Struts 1.x

  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 <struts-config> <message-ressources parameter="properties.jsp.jouets" null="false" key="jouets"> </struts-config> Et dans jouets.properties jouetInapproprie=Ce jouet ne convient pas pour cet âge. Struts 1.x

  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: <html:messagesid="errors" message="true" bundle="jouets"> <bean:writename="errors" /><br/> </html:messages> Les messages d'erreurs créés par new ActionError() peuvent prendre des arguments. jouetInapproprie=Ce 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é. Struts 1.x

  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). Struts 1.x

  26. Soumission au contrôleur (2/3) Ce contrôleur a été déclaré à Struts toujours par le biais du fichier struts-config.xml <struts-config> <action type="MonAction" name="f" path="/cadeaux"> <forward name="adresse" path="/monAdresse.jsp" /> <forward name="papier" path="/monPapierCadeau.jsp" /> </action> </struts-config> Des destinations communes à tous peuvent aussi être déclarées dans ce fichier. <global-forwards> <forward name="CDV" path="/conditionsDeVente.jsp" /> <forward name="contact" path="/ContactezNous.jsp" /> </global-forwards> Struts 1.x

  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() <= 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("adresse")); // Nouvelle destination. } Struts 1.x

More Related