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