Sunteți pe pagina 1din 40

framework MVC

pour applications Web


Servlets JSP

Philippe GENOUD

UJF

Fvrier 2010

Rappel Architecture MVC


Serveur Internet (Serveur HTTP + Serveur Servlet/JSP)

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

Bonne sparation des diffrents composants dune application Web


 Modularit rutilisation volutivit
 Sparation des comptences

Philippe GENOUD

UJF

Fvrier 2010

Frameworks Web
 mais

mettre en uvre une "bonne" architecture MVC reste un tche


complexe
 surtout si plusieurs applications doivent profiter de cette architecture

 nombreux

frameworks pour faciliter le dveloppement d'applications Web


C'est quoi un
framework ?

 Dans

le monde Java :
 Struts (Apache)
 Java Server Faces (SUN)
 Spring MVC
 Tapestry (Apache)
 Stripes
 Wicket (Apache)

Philippe GENOUD

 mais

aussi dans de nombreux


autres langages :
 Symfony (PHP)
 Ruby On Rails (Ruby)
 Django (Python)
 Grails (Groovy)


UJF

Fvrier 2010

Framework
 Framework

(cadre d'application)

"ensemble de bibliothques et de conventions permettant le dveloppement


rapide d'applications. Il fournit suffisamment de briques logicielles et
impose suffisamment de rigueur pour pouvoir produire une application
aboutie et facile maintenir. Ces composants sont organiss pour tre
utiliss en interaction les uns avec les autres" http://www.techno-science.net/
 Diffrence

framework / bibliothque (librairie)

avec une librairie : excution est dirige par le code crit par le
dveloppeur qui fait appel aux classes de la librairie

avec un framework : excution est dirige par le code du


framework qui fait appel au code crit par le dveloppeur
le dveloppeur doit complter les classes et ressources prexistantes
dans le framework

Philippe GENOUD

UJF

Fvrier 2010

Struts c'est quoi ?


Serveur Internet (Serveur HTTP + Serveur Servlet/JSP)

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

Struts : Framework open source (fondation apache) pour le dveloppement


d'applications Web Java respectant le modle MVC
 Architecture gnrique pour la partie contrleur
 Facilits pour la ralisation des vues
Philippe GENOUD

UJF

Fvrier 2010

Struts c'est quoi ?




Le framework Struts encourage les architectures bases sur l'approche Model


2 (une variante du modle classique MVC applique aux applications web).

Le cur du framework Struts est une couche contrleur


 base sur les technologies les plus acceptes Servlet/JSP, JavaBeans,
ResourceBundles, XML.
 Struts fournit son propre composant contrleur

Struts intgre d'autres technologies pour offrir le Modle et la Vue.


 Pour le Modle, Struts peut interagir avec toutes les techniques d'accs
aux donnes comme JDBC, EJB (Entreprise JavaBeans), Hibernate
 Pour la Vue, Struts n'est pas limit aux JSP, il peut fonctionner aussi avec
les Velocity Templates, le XSLT et d'autres systmes de prsentation.

Philippe GENOUD

UJF

Fvrier 2010

Exemple d'application Struts

Philippe GENOUD

UJF

Fvrier 2010

Documentation


site de Struts http://struts.apache.org/


 Struts 2.x
rcriture du framework struts
 Struts 1.x
dernire version : 1.3.10
version intgre NetBeans (6.7): 1.3.8
http://struts.apache.org/1.3.8

au 2/02/1020
http://struts.apache.org/1.3.8/apidocs/index.html

guide
utilisateur

Philippe GENOUD

UJF

Fvrier 2010

Architecture gnrale de Struts


Fichier xml
mapping vers les
actions et les vues

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

Choix et paramtrage de la vue selon


la rponse de l'action et ltat du
contrleur

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

Architecture gnrale de Struts


Gnration de la
page HTML

consulte

Envoi au client de la
prsentation issue de la
vue

Struts propose des


bibliothques de Tags
pour faciliter la
construction des
pages JSP

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

Histogramme des notes


image gif

Philippe GENOUD

Serveur SGBD

Page HTML avec fr


frquences
des notes dans un tableau

UJF

Fvrier 2010

11

Cration d'un projet Struts


Netbeans offre un support pour Struts (version 1.2.9)

Fichiers de
configuration
struts
Fichier de
ressources
pour les
messages

Librairies struts
Philippe GENOUD

UJF

Fvrier 2010

12

Configuration
Configuration :: web.xml
web.xml


Dfinition du contrleur de l'application dans le fichier web.xml


Le contrleur est une servlet gnrique ActionServlet
ou sous classe d'ActionServlet.
<web-app
<web-app version="2.5"
version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"...>
xmlns="http://java.sun.com/xml/ns/javaee"...>
<servlet>
<servlet>
<servlet-name>action</servlet-name>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<init-param>
<param-name>config</param-name>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</init-param>
...
...
</servlet>
</servlet>
<servlet-mapping>
<servlet-mapping>
<servlet-name>action</servlet-name>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</servlet-mapping>
...
...
</web-app>
</web-app>

La localisation du fichier de
configuration struts-config.xml

Toutes les URL se terminant par le suffixe


".do" sont orientes vers ce contrleur
Possibilit de dfinir plusieurs contrleurs dans une application struts
Philippe GENOUD

UJF

Fvrier 2010

13

Configuration
Configuration :: struts-config.xml
struts-config.xml


Une action est un traitement obtenu suite au passage d'une requte au


contrleur Struts

Les actions sont dcrites dans le fichier struts-configs


 dans la section <action-mappings></action-mappings>
 Au moyen de la balise <action>

diffrents attributs de la balise <action> sont renseigner selon que




la requte et avec ou sans paramtres


name : nom d'un objet ActionForm pour la rcupration/validation des
paramtres, dfini dans la section <form-beans></form-beans> du fichier
struts-config.xml

la requte ncessite un traitement ou une simple redirection






path : le path (relatif au contexte de l'application) auquel est associe l'action


type : la classe de l'objet Action qui effectue le traitement associ la requte
forward : url de redirection

Philippe GENOUD

UJF

Fvrier 2010

14

Simple redirection


Action correspondant une requte sans paramtres ncessitant une


simple redirection

accueil.html

formulaireAnneeMatiere.jsp

formulaireAnneeMatiere.do

ActionServlet
ActionServlet

.jsp

struts-config.xml
<struts-config>
<struts-config>
...
...
<action-mappings>
<action-mappings>

dfinit le nom de lURL


correspondant l'action
(suffixe .do implicite)

<action path="/formulaireAnneeMatiere"
forward="/formulaireAnneeMatiere.jsp"/>
</action-mappings>
</action-mappings>
...
...
</struts-config>
</struts-config>

Philippe GENOUD

lURL laquelle est relaye


la demande

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

Action avec traitement




Action correspondant une requte avec


paramtres ncessitant un traitement

notesAnneeMatiere.do
tableau.jsp

formulaireAnneeMatiere.jsp

HistogramImager (servlet)
Philippe GENOUD

UJF

Fvrier 2010

17

Action avec traitement


ActionServlet
ActionServlet
notesAnneeMatiere.do?
annee=2005&
matiere=BD&
prsentation=tableau

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


JavaBean qui permet de stocker les proprits des formulaires

Hrite de org.apache.struts.action.ActionForm

vrifie la validit des proprits par sa mthode validate




ActionForm
ActionForm
NotesAnneeMatiereForm
NotesAnneeMatiereForm

ActionErrors validate(ActionMapping, HttpServletRequest)


 ActionMapping : objet image de la configuration de laction en cours
stocke dans struts-config.xml
 HttpServletRequest : requte du client transmise par la Servlet de
contrle
ActionErrors : permet de retourner des messages erreurs au client

La classe dispose galement dautres mthodes


 ActionServlet getServlet() : retourne la Servlet qui gre le contrle
 reset(ActionMapping, HttpServletRequest) : initialise les
proprits
Philippe GENOUD

UJF

Fvrier 2010

19

ActionForm
ActionForm
ActionForm
NotesAnneeMatiereForm
NotesAnneeMatiereForm

public class NotesAnneeMatiereForm extends ActionForm {


public class NotesAnneeMatiereForm extends ActionForm {
private
private String
String annee;
annee;
private
String
presentation;
private String presentation;
private
private String
String matiere;
matiere;

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

public void setMatiere(String matiere) {


public void setMatiere(String matiere) {
this.matiere
this.matiere == matiere;
matiere;
}
}
...
...
}}

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();

Cration d'un objet erreur vide

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


les messages d'erreurs sont dfinis dans le fichier


properties de l'application

errors.add("Anne", new ActionMessage("error.annee.isNotANumber"));


pl2/notes/ApplicationResource.properties
errors.header=<UL>
errors.header=<UL>
errors.prefix=<LI><span
errors.prefix=<LI><span style="color:
style="color: red">
red">
errors.suffix=</span></LI>
errors.suffix=</span></LI>
...
...
error.annee.required=Indiquez
error.annee.required=Indiquez l'anne
l'anne
error.annee.isNotANumber=L'anne doit tre un nombre
error.annee.isNotANumber=L'anne doit tre un nombre
...
...
formulaireAnneeMatiere.jsp
<%@
<%@ taglib
taglib uri="http://struts.apache.org/tags-html"
uri="http://struts.apache.org/tags-html" prefix="html"
prefix="html" %>
%>
...
...
<html>
<html>
<body>
<body>
<H1>Histogramme
<H1>Histogramme des
des notes</H1>
notes</H1>
<HR>
<HR>
<form action="notesAnneeMatiere.do" method="post">
<form action="notesAnneeMatiere.do" method="post">

</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


l'utilisation du fichier properties facilite la localisation (i18n) de l'application


pl2/notes/ApplicationResource.properties

un fichier ressource par langue

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


Les ActionForms doivent tre dclares dans le fichier struts-config.xml


 balise <form-bean> dans la section <form-beans></form-beans>
<struts-config>
<struts-config>

Nom pour identifier


l'action form

<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>

Nom de la classe Java

...
...
<struts-config>
<struts-config>

Philippe GENOUD

UJF

Fvrier 2010

24

ActionForm


assistant NetBeans pour crer une ActionForm

1
nom de la classe

Philippe GENOUD

UJF

Fvrier 2010

25

Action
Action
Action

Permet d'associer un traitement une requte

Hrite de org.apache.struts.action.Action

Effectue le traitement par sa mthode execute


 ActionForward execute(ActionMapping,
ActionForm,HttpServletRequest, HttpServletResponse)
 ActionMapping : objet image de la configuration de laction en
cours stocke dans struts-config.xml
 ActionForm : JavaBean qui stocke linformation du formulaire
 HttpServletRequest : rfrence de la requte
 HttpServletResponse : rfrence de la rponse
 ActionForward :objet identifiant la destination que le contrleur
(l' ActionServlet) doit choisir

Philippe GENOUD

UJF

NotesAnneeMatiere
NotesAnneeMatiere

Fvrier 2010

26

Action
Action
Action

public class NotesAnneeMatiere extends Action {

private final static String HISTO_TABLE = "histotableau";


private final static String HISTO_GRAPHIC = "histographique";

NotesAnneeMatiere
NotesAnneeMatiere

public ActionForward execute(ActionMapping mapping,


ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
NotesAnneeMatiereActionForm f =
(NotesAnneeMatiereForm) form;

Rcupration de l'objet
ActionForm grce au
paramtre form

INotesDAO notesDAO = DAOFactory().getNoteDAO();


Histogramme histo = notesDAO.getHistogramme(f.getNumeroAnnee(),
f.getMatiere() );
request.setAttribute("notes", histo);
if (f.getPresentation().equals("graphic")) {
return mapping.findForward(HISTO_GRAPHIC);
} else {
return mapping.findForward(HISTO_TABLE);
}

Construction
du modle

Le modle est transmis via la


requte

Choix de la prochaine
redirection

}
}
Philippe GENOUD

UJF

Fvrier 2010

27

Action


Declaration de l'Action dans le fichier struts-config.xml

<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


assistant NetBeans pour crer une Action

Philippe GENOUD

UJF

Fvrier 2010

29

Action


assistant NetBeans pour crer une Action suite

Clic
bouton
droit

Philippe GENOUD

UJF

Fvrier 2010

30

Exceptions
Action
Action

public class NotesAnneeMatiere extends Action {

NotesAnneeMatiere
NotesAnneeMatiere

private final static String HISTO_TABLE = "histotableau";


private final static String HISTO_GRAPHIC = "histographique";

public ActionForward execute(ActionMapping mapping,


ActionForm form,
l'exception est relance
HttpServletRequest request,
HttpServletResponse response) throws Exception {
NotesAnneeMatiereActionForm f =
(NotesAnneeMatiereForm) form;

Que se passe-t'il si une


DAOException est leve ?

INotesDAO notesDAO = DAOFactory().getNoteDAO();


Histogramme histo = notesDAO.getHistogramme(f.getNumeroAnnee(), f.getMatiere() );
request.setAttribute("notes", histo);
if (f.getPresentation().equals("graphic")) {
return mapping.findForward(HISTO_GRAPHIC);
} else {
return mapping.findForward(HISTO_TABLE);
}
}
}

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


Possibilit de mettre en oeuvre un traitement spcifique des exceptions


 en redirigeant l'application vers une page spcifique

struts-config.xml

cl pour message d'erreur


dans le fichier ressources
la ressource vers laquelle
l'application est redirige
le type de l'exception
concerne
pl2/notes/ApplicationResource.properties

erreur_1.jsp

Philippe GENOUD

UJF

Fvrier 2010

33

Exceptions


Possibilit de mettre en oeuvre un traitement spcifique des exceptions


 en excutant un gestionnaire d'erreur : une classe hritant de
org.apache.struts.actions.ExceptionHandler
redfinition de la mthode execute

la redirection s'effectue l'aide d'un


lment forward dfini dans le fichier
struts-config.xml
La redirection peut tre vers une action
ou une page jsp

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


Une exception est traite par le gestionnaire d'exception le plus spcifique

Exceptions de n'importe quel autre


type

Exceptions de type DAOException


(classe DAOException ou n'importe
quelle sous classe de DAOException)

Philippe GENOUD

UJF

Fvrier 2010

35

Exceptions


Possibilit de rdfinir un gestionnaire spcifique au niveau d'une action


gestionnaire gnral pour les
DAOException

gestionnaire spcifique pour les


DAOException leves par l'action
notesAnneeMatire

Philippe GENOUD

UJF

Fvrier 2010

36

Exceptions


assistant NetBeans pour dfinir un gestionnaire d'exceptions


struts-config.xml

Clic
bouton
droit
2

Philippe GENOUD

UJF

Fvrier 2010

37

Struts TagLibs


Struts propose des bibliothques de Tags Personnaliss qui aident les


dveloppeurs d'applications bases sur des formulaires

Struts propose 4 bibliothques de tag

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


Exemple d'utilisation des tags HTML

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


Exemple d'utilisation des tags HTML

formulaireAnnneeMatiere.jsp

Les tags HTML de Sruts prennent en charge l'initialisation des


lments du formulaire en cas de retour
Philippe GENOUD

UJF

Fvrier 2010

40

S-ar putea să vă placă și