Micro guide Struts
Transcription
Micro guide Struts
Micro guide Struts par Jérémy Buget Table des matières 1) Introduction...................................................................................................................................... 2 2)Définitions.........................................................................................................................................3 2) Déroulement..................................................................................................................................... 4 3) Schéma récapitulatif.........................................................................................................................5 4) Code des différents composants sus-cités........................................................................................ 6 5)Liens utiles...................................................................................................................................... 10 1/10 1) Introduction Struts est l'un des framework les plus utilisés dans le monde des applications Web. Basé sur le modèle MVC-2 il permet de développer rapidement, de façon très structurée et facile à maintenir un tel service. Toutefois sa prise en main n'est pas des plus aisée, qui plus est pour qui s'initie à J2EE et au développement Web en général. J'ai écrit ce micro guide dans le but d'aider un maximum de gens désirant employer Struts dans leur application Web. Ce document n'a pas pour objectif d'expliquer Struts dans ses moindres détail. Par ailleurs, je ne m'étendrai pas sur la création d'une application Web ou sur le fonctionnement d'une architecture MVC. De nombreux tutoriels très bien faits, disponibles sur Internet, existent déjà sur le sujet. Cet article se veut juste un tremplin à une bonne compréhension du framework open sources développé par Apache au sein du projet Jakarta. Afin de pouvoir profiter au maximum de cet article, il est préférable d'avoir de solides connaissances en Java, et d'avoir quelques notions du jargon de J2EE (servlets, javabeans, services Web, ...). Dans un premier temps, nous verrons les définitions de quelques uns des composants à mettre en place pour intégrer Struts à votre application. Par la suite, nous verrons les mécanismes qui entrent en jeu lors de l'exécution d'une telle application en se basant sur un exemple simple et facile à comprendre. Ces explications seront accompagnées d'un schéma récapitulatif. Finalement, je terminerai en mettant à votre disposition une grande partie du code crée pour l'exemple ainsi que les liens qui m'ont permis d'acquérir les quelques connaissances présentées ici. 2/10 2) Définitions Formulaire : Page JSP (HTML avec des balises permettant d'exécuter directement du code Java) permettant à l'utilisateur de compléter des informations afin qu'elles soient traitées. Un exemple basique est une page de connexion à un compte personnel avec un champ Login, un champ Password et un bouton OK pour valider. ActionForm : Classe abstraite déclarée dans le framework Struts. Elle permet de récupérer les informations récoltées dans le formulaire JSP qui lui est associé. A chaque formulaire JSP correspond donc une classe qui hérite de ActionForm. Action : Classe abstraite déclarée dans le framework Struts. Elle permet de traiter les données contenues dans une ActionForm. Par exemple dans le cas d'une connexion à un compte personnel, c'est elle qui va vérifier si le login et le password entrés sont exacts. Elle va renvoyer un indicateur en fonction du résultat de l'Action permettant de déterminer la prochaine page JSP à renvoyer à l'utilisateur. Ainsi en cas de succès il sera redirigé vers la page principale de son compte, et en cas d'échec vers la page de connexion en spécifiant les erreurs rencontrées. Le fichier struts-config.xml : Fichier principal d'une application Web utilisant Struts. Il est au coeur de la couche Controler. Son rôle est multiple. Il va d'une part, faire le lien entre un formulaire et son ActionForm, d'autre part il va mettre en corrélation l'ActionForm obtenue et l'Action qui lui est associée. Enfin il va servir de pont entre le résultat d'une Action et la page à retourner suivant l'indicateur renvoyé par cette même Action. 3/10 2) Déroulement Pour expliciter le déroulement général d'une application Web se basant sur Struts, on prendra l'exemple simple d'une connexion à un compte personnel via un formulaire contenant un champ Login, un champ Password et un bouton OK de validation. On considérera entre autre que les informations personnelles d'un utilisateur sont stockées et accessibles via une base de données située sur un serveur. 1) Le formulaire JSP 1. L'utilisateur remplit les champ Login et Password. 2. Il valide via le bouton OK. 2) L'Action 1. Le fichier struts-config.xml détermine l'Action associée au bouton OK. 2. L'Action récupère les données du formulaire JSP via l'ActionForm qui lui est associée. 3. L'Action analyse ces données et les recoupe avec celles de la base de données. 4. L'Action renvoie un indicateur en fonction de ce traitement qui vaut soit 'success' soit 'error'. 3) La nouvelle vue 1. Le fichier struts-config.xml récupère l'indicateur. 2. En fonction de celui-ci elle renvoie la page correspondante. 4/10 3) Schéma récapitulatif Schéma d'illustration du modèle MVC utilisé dans Struts (source : Serge Tahé) Explications : • • • • • • • Les formulaires JSP sont contenus dans la couche Interface Client. La Servlet est une servlet générique fournie par Struts. Pour les petites applications il n'est pas nécessaire de la modifier bien que cela demeure possible. Chaque Bean représente une ActionForm à associer avec le formulaire JSP correspondant. Les Actions représentent les actions gérées par l'application Web. Les classes d'accès données peuvent être des javabeans, des services Web, ou tout autre objet susceptible de devoir communiquer avec une base de données et / ou de gérer des données stockées. Les classes métier comportent des traitements spécifiques à appliquer en fonction des actions. Les pages JSP sont retournées par la Servlet principale en fonction du résultat des Actions effectuées. 5/10 4) Code des différents composants sus-cités 4.1) Fichiers de la couche View Formulaire : loginForm.jsp <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!-- Indique où trouver les tags que l'on s'apprête à utiliser --> <%@ taglib uri="/tags/struts-bean" prefix="bean"%> <%@ taglib uri="/tags/struts-html" prefix="html"%> <%@ taglib uri="/tags/struts-logic" prefix="logic"%> <html:html> <!-- Header de la page --> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Page Login</title> </head> <!-- Corps de la page --> <body bgcolor="white"> <html:form action="/InputSubmit"> Login <html:text property="login"></html:text><br> Password <html:text property="pwd"></html:text><br> <html:submit value="Ok"></html:submit> </html:form> </body> </html:html> Connexion réussie : loginSuccess.jsp <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ taglib uri="/tags/struts-bean" prefix="bean"%> <%@ taglib uri="/tags/struts-html" prefix="html"%> <%@ taglib uri="/tags/struts-logic" prefix="logic"%> <html:html> <!-- Header de la page --> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Login success</title> </head> <!-- Corps de la page --> <body bgcolor="white"> Login <bean:write name="login" property="login" scope="request" /><br> 6/10 Password <bean:write name="login" property="pwd" scope="request" /><br> </body> </html:html> Erreur de connexion : loginFailure.jsp <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ taglib uri="/tags/struts-bean" prefix="bean"%> <%@ taglib uri="/tags/struts-html" prefix="html"%> <%@ taglib uri="/tags/struts-logic" prefix="logic"%> <html:html> <!-- Header de la page --> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Login Failure</title> </head> <!-- Corps de la page --> <body bgcolor="white"> <h4>Bad login or password.</h4> <html:link href="views/lofinForm.jsp">Try again</html:link> </body> </html:html> 4.2) Fichiers de la couche Modele ActionForm : LoginForm.java package actionForm; import org.apache.struts.action.ActionForm; public class LoginForm extends ActionForm { private String login = null; private String pwd = null; public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } } 7/10 JavaBean : Login.java package beans; import java.io.Serializable; public class Login implements Serializable { private String login; private String pwd; public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } } Action : LoginAction.java package action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import import import import import org.apache.commons.beanutils.BeanUtils; org.apache.struts.action.Action; org.apache.struts.action.ActionForm; org.apache.struts.action.ActionForward; org.apache.struts.action.ActionMapping; import actionForm.LoginForm; import beans.Login; public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { LoginForm monLoginForm = (LoginForm) form; Login monLogin = new Login(); BeanUtils.copyProperties(monLogin, monLoginForm); request.setAttribute(mapping.getAttribute(), monLogin); if (monLogin.getLogin().equals("admin") && monLogin.getPwd().equals("admin")){ return mapping.findForward("success"); } return mapping.findForward("erreur"); } } 4.3) Fichiers de la couche Controler 8/10 Le fichier de configuration : struts-config.xml <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <!-- ================================================ Form Bean Definitions --> <!-- Déclaration des formulaires de l'application --> <form-beans> <form-bean name="loginForm" type="actionForm.LoginForm"></form-bean> </form-beans> <!-- =========================================== Action Mapping Definitions --> <!-- Association entre les Actions, ActionForms et les formulaires JSP --> <action-mappings> <action path="/Welcome" forward="/views/Welcome.jsp"/> <action path="/InputSubmit" type="action.LoginAction" name="loginForm" scope="request" attribute="login" input="/views/loginForm.jsp"> <forward name="success" path="/views/loginSuccess.jsp"></forward> <forward name="error" path="/views/loginFailure.jsp"></forward> </action> </action-mappings> <!-- ======================================== Message Resources Definitions --> <message-resources parameter="MessageResources" /> <!-- =================================================== Validator plugin --> <!-- Validateur de syntaxe des formulaires (optionnel) --> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/org/apache/struts/validator/validator-rules.xml, /WEB-INF/validation.xml"/> </plug-in> </struts-config> 9/10 5) Liens utiles Sites en Français : Le Framework Struts : Tutoriel très bien fait qui rentre dans les détails et propose de mettre en place sa première application Struts. Des rappels sur J2EE et MVC sont notamment prodigués en préambule. Tutoriel Jakarta Struts : Excellent tutoriel à la fois précis et largement illustré à propos de Struts mais aussi JSP, MVC,etc. Idéal pour les débutants. A voir absolument, les autres tutoriels de Serge Tahé sur Java, J2EE, MVC, etc... Struts – Un framework MVC pour vos applications J2EE : Là encore une série d'articles tout à fait intéressants, qui entrent dans les détails tout en restant compréhensible. Apache Struts par l'exemple : Tutoriel que j'ai trouvé intéressant surtout pour ses illustrations et sa méthodologie (détail d'une application fichier par fichier et pas à pas). Sites en Anglais : Learning about Struts : Le guide officiel de Struts par Apache. Struts, an open-source MVC implementation : Un tutoriel détaillant l'architecture MVC,la plateforme J2EE et les mécanismes de Struts. Common Struts Errors and Causes : Une excellente et indispensable page Web référençant les erreurs fréquentes rencontrées lors d'un développement Web avec Struts et présentant pour quasiment chacune les solutions à ces erreurs. Stepping through Jakarta Struts : Tutoriel pour développer une application Web basique avec Struts pas à pas. An Introduction to Struts : Article présentant Struts, ses possibilités, ses qualités et ses défauts. Intéressant. Struts Framework : Une série d'articles présentant Struts. Intéressant surtout pour son diagramme de séquences en page d'introduction. 10/10