Documente Academic
Documente Profesional
Documente Cultură
Philippe GENOUD
UJF
Fvrier 2010
Serveur SGBD
Requte HTTP
Controleur
Controleur
(Servlet)
(Servlet)
Modle
Modle
(Java
(JavaBean)
Bean)
Transfert
Rponse HTTP
Vue
Vue
(JSP)
(JSP)
Construit
Modifie
Driver
JDBC
Consulte
Philippe GENOUD
UJF
Fvrier 2010
Frameworks Web
mais
nombreux
Dans
le monde Java :
Struts (Apache)
Java Server Faces (SUN)
Spring MVC
Tapestry (Apache)
Stripes
Wicket (Apache)
Philippe GENOUD
mais
UJF
Fvrier 2010
Framework
Framework
(cadre d'application)
avec une librairie : excution est dirige par le code crit par le
dveloppeur qui fait appel aux classes de la librairie
Philippe GENOUD
UJF
Fvrier 2010
Serveur SGBD
Requte HTTP
Controleur
Controleur
(Servlet)
(Servlet)
Modle
Modle
(Java
(JavaBean)
Bean)
Transfert
Rponse HTTP
Vue
Vue
(JSP)
(JSP)
Construit
Modifie
Driver
JDBC
Consulte
UJF
Fvrier 2010
Philippe GENOUD
UJF
Fvrier 2010
Philippe GENOUD
UJF
Fvrier 2010
Documentation
au 2/02/1020
http://struts.apache.org/1.3.8/apidocs/index.html
guide
utilisateur
Philippe GENOUD
UJF
Fvrier 2010
Regroupent les
paramtres de la
requte, qu'ils
peuvent valider
traitement la requte
ActionForm
ActionForm
struts-config.xml
struts
strutsstruts-config.xml
ActionForm1
ActionForm1
ActionForm2
ActionForm2
consulte
La requte est transmise
au contrleur
2
ActionServlet
ActionServlet
Action1
Action1
(tend javax.servlet.
http.HttpServlet)
Action2
Action2
Contrleur
3
Vue
Vue
(JSP)
(JSP)
Philippe GENOUD
Serveur
SGBD
Action
Action
Controleur gnrique
package et aiguille
le trafic HTTP vers le
gestionnaire appropri
Font le lien
entre le
contrleur et la
logique mtier
Modle
Modle
(Java
(JavaBean)
Bean)
Cration
modification des
objets modle
UJF
Fvrier 2010
consulte
Envoi au client de la
prsentation issue de la
vue
Modle
Modle
(Java
(JavaBean)
Bean)
page
page.jsp
.jsp
JSTL
JSTL
properties.en
properties.en
Struts
Struts
html, logic,beans
html, logic,beans
properties.fr
properties.fr
biblio
biblioperso
perso
Ressources
Bibliothques de tags
Fichiers de ressources
pour messages
utiliss dans les vues
Vue
Philippe GENOUD
UJF
Fvrier 2010
10
Struts
Struts par
par l'exemple:
l'exemple: lapplication
lapplication histogramme
histogramme de
de notes
notes
serveur Web
Philippe GENOUD
Serveur SGBD
UJF
Fvrier 2010
11
Fichiers de
configuration
struts
Fichier de
ressources
pour les
messages
Librairies struts
Philippe GENOUD
UJF
Fvrier 2010
12
Configuration
Configuration :: web.xml
web.xml
La localisation du fichier de
configuration struts-config.xml
UJF
Fvrier 2010
13
Configuration
Configuration :: struts-config.xml
struts-config.xml
Philippe GENOUD
UJF
Fvrier 2010
14
Simple redirection
accueil.html
formulaireAnneeMatiere.jsp
formulaireAnneeMatiere.do
ActionServlet
ActionServlet
.jsp
struts-config.xml
<struts-config>
<struts-config>
...
...
<action-mappings>
<action-mappings>
<action path="/formulaireAnneeMatiere"
forward="/formulaireAnneeMatiere.jsp"/>
</action-mappings>
</action-mappings>
...
...
</struts-config>
</struts-config>
Philippe GENOUD
UJF
Fvrier 2010
15
Simple Redirection
assistant NetBeans pour ajout d'une action pour une requte sans paramtres
ncessitant une simple redirection
2
1
Clic bouton droit
Philippe GENOUD
UJF
Fvrier 2010
16
notesAnneeMatiere.do
tableau.jsp
formulaireAnneeMatiere.jsp
HistogramImager (servlet)
Philippe GENOUD
UJF
Fvrier 2010
17
Action
Action
ActionForm
ActionForm
NotesAnneeMatiere
NotesAnneeMatiere
NotesAnneeMatiereForm
NotesAnneeMatiereForm
struts-config.xml
struts
strutsstruts-config.xml
Instancie et initialise
setAnnee(), setMatiere()
validate()
formulaireAnneeNote.jsp
ActionErrors
.jsp
Si erreur
sinon
Consulte
getAnnee(), getMatiere()
execute()
Histogramme
Histogramme
Initialise le modle
tableau.jsp
.jsp
HistogramImager
ActionForward
struts-config.xml
struts
strutsstruts-config.xml
Selon
l'ActionForward
Philippe GENOUD
UJF
Fvrier 2010
18
ActionForm
Hrite de org.apache.struts.action.ActionForm
ActionForm
ActionForm
NotesAnneeMatiereForm
NotesAnneeMatiereForm
UJF
Fvrier 2010
19
ActionForm
ActionForm
ActionForm
NotesAnneeMatiereForm
NotesAnneeMatiereForm
proprit
public
public void
void setAnnee(String
setAnnee(String annee)
annee) {{
this.annee = annee;
this.annee = annee;
}}
public
public String
String getAnnee()
getAnnee() {{
return
return annee;
annee;
}
}
modifieur et
accesseur pour
la proprit
Chaque paramtre du
formulaire est dfini
comme une proprit
de l'objet ActionForm
associ qui doit tre
un JavaBean
Philippe GENOUD
UJF
Fvrier 2010
20
ActionForm
public
public class
class NotesAnneeMatiereForm
NotesAnneeMatiereForm extends
extends ActionForm
ActionForm {{
private
private String
String annee;
annee;
private
String
presentation;
private String presentation;
private
private String
String matiere;
matiere;
...
...
Redfinition (overriding) de la mthode validate
ActionForm
ActionForm
NotesAnneeMatiereForm
NotesAnneeMatiereForm
@Override
@Override
public
public ActionErrors
ActionErrors validate(ActionMapping
validate(ActionMapping mapping,
mapping,
HttpServletRequest request) {
HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
ActionErrors errors = new ActionErrors();
if
if (annee
(annee ==
== null
null ||
|| annee.length()
annee.length() << 1)
1) {{
errors.add("Anne", new ActionMessage("error.annee.required"));
errors.add("Anne", new ActionMessage("error.annee.required"));
}}
else {
else {
Selon les paramtres ajout de
try {
try {
messages d'erreur
numeroAnnee = Integer.parseInt(annee);
numeroAnnee = Integer.parseInt(annee);
}} catch
catch (NumberFormatException
(NumberFormatException e)
e) {{
errors.add("Anne",
errors.add("Anne", new
new ActionMessage("error.annee.isNotANumber"));
ActionMessage("error.annee.isNotANumber"));
}}
}}
}}
}}
if
if ((!matiere.equals("graphic"))
((!matiere.equals("graphic")) &&
&& ((!matiere.equals("tableau"))
((!matiere.equals("tableau")) {{
errors.add("Anne",
new
ActionMessage("error.annee.required"));
errors.add("Anne", new ActionMessage("error.annee.required"));
}}
Le message est dfini dans
un fichier .properties
return
errors;
Renvoie des erreurs (vide si la validation a russi)
return errors;
Philippe GENOUD
UJF
Fvrier 2010
21
ActionForm
</form>
</form>
<HR>
Tag de bibliothque html
<HR>
<html:errors/>
de Struts pour afficher les
<html:errors/>
</body>
messages d'erreur
</body>
</html>
</html>
Philippe GENOUD
UJF
Fvrier 2010
22
ActionForm
errors.header=<UL>
errors.header=<UL>
errors.prefix=<LI><span style="color: red">
errors.prefix=<LI><span style="color: red">
pl2/notes/ApplicationResource.properties.en
errors.suffix=</span></LI>
errors.suffix=</span></LI>
...
errors.header=<UL>
...
errors.header=<UL>
error.annee.required=Indiquez
l'anne
errors.prefix=<LI><span style="color: red">
error.annee.required=Indiquez l'anne
errors.prefix=<LI><span style="color: red">
error.annee.isNotANumber=L'anne
nombre
errors.suffix=</span></LI>
error.annee.isNotANumber=L'anne doit
doit tre
tre un
un
nombre
errors.suffix=</span></LI>
...
...
...
...
formHisto.title=Histogramme
error.annee.required=Year required
formHisto.title=Histogramme de
de notes
notes
error.annee.required=Year required
error.annee.isNotANumber=Year
error.annee.isNotANumber=Year is
is not
not aa number
number
...
...
formHisto.title=Marks Histogram
formHisto.title=Marks Histogram
formulaireAnneeMatiere.jsp
<%@
<%@ taglib
taglib uri="http://struts.apache.org/tags-html"
uri="http://struts.apache.org/tags-html" prefix="html"
prefix="html" %>
%>
... <%@ taglib uri="http://struts.apache.org/" prefix="bean" %>
...
<html>
<html>
<body>
<body>
<H1> <bean:message
Histogramme key="formHisto.title"/>
des notes
</H1>
<H1>
Histogramme des notes
</H1>
<HR>
<HR>
<form
<form action="notesAnneeMatiere.do"
action="notesAnneeMatiere.do" method="post">
method="post">
</form>
</form>
<HR>
<HR>
<html:errors/>
<html:errors/>
</body>
</body>
</html>
</html>
Philippe GENOUD
UJF
Fvrier 2010
23
ActionForm
<form-beans>
<form-beans>
<form-bean
<form-bean
name="NotesAnneeMatiereForm"
name="NotesAnneeMatiereForm"
type="pl2.notes.struts.forms.NotesAnneeMatiereForm"/>
type="pl2.notes.struts.forms.NotesAnneeMatiereForm"/>
...
...
</form-beans>
</form-beans>
...
...
<struts-config>
<struts-config>
Philippe GENOUD
UJF
Fvrier 2010
24
ActionForm
1
nom de la classe
Philippe GENOUD
UJF
Fvrier 2010
25
Action
Action
Action
Hrite de org.apache.struts.action.Action
Philippe GENOUD
UJF
NotesAnneeMatiere
NotesAnneeMatiere
Fvrier 2010
26
Action
Action
Action
NotesAnneeMatiere
NotesAnneeMatiere
Rcupration de l'objet
ActionForm grce au
paramtre form
Construction
du modle
Choix de la prochaine
redirection
}
}
Philippe GENOUD
UJF
Fvrier 2010
27
Action
<struts-config>
<struts-config>
<form-beans>
<form-beans>
<form-bean
<form-bean name="NotesAnneeMatiereActionForm"
name="NotesAnneeMatiereActionForm"
type="pl2.notes.struts.forms.NotesAnneeMatiereActionForm"/>
type="pl2.notes.struts.forms.NotesAnneeMatiereActionForm"/>
</form-beans>
</form-beans>
<action-mappings>
<action-mappings>
<action forward="/formulaireAnneeMatiere.jsp" path="/formulaireAnneeMatiere"/>
<action forward="/formulaireAnneeMatiere.jsp" path="/formulaireAnneeMatiere"/>
URL correspondant l'action
<action
<action path="/notesAnneeMatiere"
path="/notesAnneeMatiere"
(suffixe .do implicite)
type="pl2.notes.struts.actions.NotesAnneeMatiere"
type="pl2.notes.struts.actions.NotesAnneeMatiere"
name="NotesAnneeMatiereForm"
Classe de l'action
name="NotesAnneeMatiereForm"
input="/formulaireAnneeMatiere.jsp"
input="/formulaireAnneeMatiere.jsp"
Nom de l'ActionForm
scope="request" >
scope="request" >
associe
<forward name="histotableau" path="/tableau.jsp"/>
<forward name="histotableau" path="/tableau.jsp"/>
Vue vers laquelle le
<forward name="histographique" path="/histographic"/>
<forward name="histographique" path="/histographic"/>
contrleur redirige en cas
</action>
</action>
d'echec de la validation
</action-mappings>
</action-mappings>
web.xml
Etiquette de redirection
if (f.getPresentation().equals("graphic")) {
return mapping.findForward("histotagraphique");
} else {
return mapping.findForward("histotableau");
}
Philippe GENOUD
Chemin de redirection
tableau.jsp
.jsp
UJF
HistogramImager
<servlet>
<servlet-name>graphic</servlet-name>
<servlet-class>
pl2.notes.servlets.HistogramImager
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>graphic</servlet-name>
<url-pattern>/histographic</url-pattern>
</servlet-mapping>
Fvrier 2010
28
Action
Philippe GENOUD
UJF
Fvrier 2010
29
Action
Clic
bouton
droit
Philippe GENOUD
UJF
Fvrier 2010
30
Exceptions
Action
Action
NotesAnneeMatiere
NotesAnneeMatiere
Philippe GENOUD
UJF
Fvrier 2010
31
Exceptions
Si l'exception est relance et qu'aucun traitement n'est mis en place pour celleci, une ServletException est cre par le contrleur , chane avec l'exception
originale et relance,
Servlet Exception
Cause mre
Philippe GENOUD
UJF
Fvrier 2010
32
Exceptions
struts-config.xml
erreur_1.jsp
Philippe GENOUD
UJF
Fvrier 2010
33
Exceptions
struts-config.xml
le lien entre un gestionnaire d'erreur et
un type d'erreur est effectu dans le
fichier struts-config.xml
le type de l'exception
concerne
le gestionnaire
d'exceptions
invoqu
Philippe GENOUD
UJF
Fvrier 2010
34
Exceptions
Philippe GENOUD
UJF
Fvrier 2010
35
Exceptions
Philippe GENOUD
UJF
Fvrier 2010
36
Exceptions
Clic
bouton
droit
2
Philippe GENOUD
UJF
Fvrier 2010
37
Struts TagLibs
HTML
Tags pour cration d'interface utilisateur HTML, en particulier pour crer des formulaires de saisie
Logic
Tags pour la gnration conditionnelle de texte, gnration rptitive de texte en itrant sur
des collections d'objets, gestion du flux de contrle de l'application
Bean
Tags pour la dfinition de nouveaux objets JavaBeans dans diffrentes portes (application,
session, requte) et partir de diffrentes sources
Tags pour afficher un bean (ou une prorit d'un bean) sur la rponse de sortie.
Nested Tags qui tendent les tags de base de Struts pour leur mise en relation lors d'imbrication
Philippe GENOUD
UJF
Fvrier 2010
38
Struts TagLibs
formulaireAnnneeMatiere.jsp
Il faudrait intgrer
dans la page de la
logique permettant de
raffecter les
lments du formulaire
avec les valeurs qui
avaient t transmises
Problme : les diffrents lments
du formulaire reprennent leur
valeur initiale
En cas de saisie
incorrecte on
revient sur cette
page qui affiche
alors les messages
d'erreur
Philippe GENOUD
UJF
Fvrier 2010
39
Struts TagLibs
formulaireAnnneeMatiere.jsp
UJF
Fvrier 2010
40