1. Spring 3.0 MVC WebFlow
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
2. Plan
Introduction
Spring MVC
Principe
Démonstration
Spring WebFlow
Principe
Configuration
Démonstration
Conclusion
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 2
3. Les Apports de Spring
Meilleure Solution
Gains en Productivité
IOC
Alternative Légère
Implémentation AOP
des EJB
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 3
4. Architecture de Spring
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 4
5. Introduction à Spring MVC
Spring Struts
Click
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 5
6. Spring MVC
Un conteneur léger
une grande flexibilité
Les annotations
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 6
7. Spring MVC
MVC standard
MVC Spring
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 7
8. Cycle de Vie
Request
Handler
2 Mapping
Request Controller
1 Request
3 Controller
Dispatcher ModelAndView
Servlet
View Name
4 ViewResolver
View
6 Model
5 View
Response
Response
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 8
9. Dispatcher-Servlet
Dispatcher-Servlet Ou contrôleur de façade
Unique point d’accès de l’application
Web.
Redirige les traitements vers le bon
contrôleur
Implémenté par le biais d’une servlet
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 9
10. Dispatcher-Servlet
Mappage des contrôleurs:
1. SimpleUrlHandlerMapping : Correspondances entre motifs URL et
contrôleur
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 10
11. 2. BeanNameUrlHandlerMapping : Les noms du bean sont les URL il
est là par défaut dans le contexte Web.
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 11
12. Déclaration du ViewResolver
Déclaration du ViewResolver
Mappage des noms logiques des vues avec les implémentations réelles.
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 12
13. Spring MVC : Mise en place
Configuration du dispatcher-servlet dans le fichier WEBINF/web.xml
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 13
14. Spring MVC : Mise en place
• Implémentation du DispatcherServlet
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 14
15. Spring MVC : Mise en place
• Implémentation du contrôleur
OU
AbstractController
Implémentation de la méthode «onSubmitl() »
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 15
16. Support des annotations pour les contrôleur
A partir de la version 2.5 de Spring, la configuration des contrôleurs se
réalise par l’intermédiaire d’annotations. Cet aspect peut être mis en
œuvre de deux manières :
1. Spécifier une implémentation de l’interface HandlerMapping fondée
sur les annotations.
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 16
17. Support des annotations pour les contrôleur
2. Utilisation de la balise component-scan de l’espace de nommage
context afin de détecter tous les composants présents et notamment
les contrôleurs Spring MVC
Il est recommandé de n’utiliser la première approche que si une
personnalisation de la stratégie de mappage des requêtes est envisagée.
La seconde approche reste donc celle à utiliser par défaut
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 17
19. Problématique
• La conception et la mise en œuvre
d’applications pour lesquelles la navigation se
trouve restreinte et prédéfinie par des règles
précises se révèlent particulièrement
complexes:
La configuration des enchaînements de
traitements est difficile.
La vérification de la validité des
enchaînements est complexe à mettre en
œuvre.
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 19
20. La session HTTP n’est pas entièrement adaptée
pour stocker les données d’un flot de
traitements.
La réutilisation des différents flots Web est
complexe à implémenter.
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 20
21. Solution
définition centralisée des éléments du flot et de
leurs enchaînements
configuration du flot fondée sur une grammaire
XML dédiée
notion de transitions mise en œuvre dans la
configuration du flot afin de cadrer et sécuriser la
navigation
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 21
22. Spring WebFlow
• Spring Web Flow est un sous-projet de
Spring Framework.
• Il permet de définir et d'exécuter des
enchaînements de pages dans une application
web.
• Il est utilisable de façon autonome, mais on
peut aussi l'intégrer avec un MVC web
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 22
23. Description d'un Web Flow
• Un flow ou processus de navigation est tout
simplement une machine à états finie
• Ces états peuvent être facilement décrits en
UML dans des diagrammes d’activité
• Exécution = transitions d’un état vers une liste
d’états connue et finie
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 23
24. Configuration du « Flow »
• Décrit dans un fichier xml dont le nom du
fichier est de la forme (*-flow.xml)
• Le fichier xml va décrire:
les états de la machine à états finie
les transitions entre ses états
les différentes actions déclenchées
• Par défaut, le premier état est l’état de départ
« Start-State »
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 24
26. Etats de Début et de Fin
• Les états de début et de fin d’un flot
correspondent à des états particuliers.
<flow start-state=" enterBookingDetails ">
<end-state id=" cancelled" view="/fin.jsp" />
Si start-state n'est pas défini, l'état de démarrage est
le premier état trouvé dans la liste.
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 26
27. View State
• Correspond à une page que l'on souhaite
afficher
• Les différents événements déclenchés par la
vue doivent être définis en tant que transitions
<view -state id="reviewBooking">
<transition on="confirm" to="bookingConfirmed" />
<transition on="revise" to="enterBookingDetails" />
<transition on="cancel" to="bookingCancelled" />
</view-state
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 27
28. Action State
• L'objectif d'un action state est d'exécuter du
code non visuel
• On peut comparer un action state à la partie
contrôleur d'un MVC.
<action-state id="makeBooking">
<evaluate expression="bookingAction.makeBooking()"/>
<transition on="ok" to= " viewRecap" />
<transition on=« No" to="Error" />
</action-state>
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 28
29. Decision State
• Aiguillage :un état peut correspondre à
un aiguillage fondé sur une ou plusieurs
conditions afin d’accéder à d’autres
états.
<decision-state id="moreInforamtionsNeeded">
<if test="interview.moreInformationsNeeded()"
then="answerQuestions" else="finish" />
</decision-state>
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 29
30. Sub Flow State
• Lancement de sous-flots d’exécution. Un
état peut déclencher l’exécution d’un
sous-flot de traitement et permettre le
passage de paramètres d’un flot à un
autre.
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 30
31. Exécuter une action "on
start"
• Une action "on start" est invoquée au
démarrage du web flow, afin d'initialiser
des variables utilisées par la suite dans
le web flow
<flow start-state=" enterBookingDetails ">
<on-start> <evaluate
expression="bookingService.createBooking(hotelId,
currentUser.name)“ result="flowScope.booking" />
</on-start>
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 31
32. Exécuter une action "on
render"
• le principe d'une action "on render"
consiste à exécuter du code Java avant
l'affichage de la vue.
<view-state id="searchResults">
<on-render> <evaluate
expression="bookingService.findHotels(searchCriteria)"
result="viewScope.hotels" />
</on-render>
<transition on="next" to " viewResult" >
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 32
34. Configuration Spring
• Pour utiliser SWF dans une application, il faut
demander au conteneur Spring de démarrer le
moteur SWF
<beans ….>
<webflow:flow-executor id="flowExecutor " flow-
registry="flowRegistry " />
<webflow:flow-registry id="flowRegistry" flow-builder-
services="flowBuilderServices">
<webflow:flow-location path="/flows/*-flow.xml"/>
</webflow:flow-registry>
... </beans>
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 34
35. Intégration avec Spring MVC
DispatcherServlet
• Le contrôleur façade Spring MVC
• Reçoit toutes les requêtes y compris les requêtes SWF
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 35
36. La configuration minimale impose la déclaration des beans
suivants : « flow builder services », « flow handler adapter » et
« flow handler mapping » et « flowController ».
<webflow:flow-builder-services id="flowBuilderServices" />
<bean
class="org.springframework.webflow.mvc.servlet.FlowHandlerA
dapter">
<property name="flowExecutor" ref="flowExecutor" />
</bean>
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 36
37. <bean
class="org.springframework.webflow.mvc.servlet.FlowHandlerM
apping"> <property name="flowRegistry" ref="flowRegistry"/>
<property name="order" value="0"/> </bean>
<bean id="flowController"
class="org.springframework.webflow.mvc.servlet.FlowController
">
<property name="flowExecutor" ref="flowExecutor" />
</bean>
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 37
38. Spring application contexte
Reçoit toutes les requêtes y compris
DispatcherServlet
les requêtes SWF
FlowController Contrôleur Spring MVC qui reçoit
les demandes de Flow et les
transmet à FlowExecutor pour le
traitement.
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 38
39. FlowExecuter
Contient la logique de traitement
des demandes de Spring Web
Flow.
Fournit les Flow dont le
FlowRegistry FlowExecutor a besoin.
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 39
40. Conteneur pour les différents services
FlowBuilderServic
dont le FlowRegistry a besoin pour la
es
construction des Flow
View Crée des view factories
FactoryCreator
ViewResolver Traduit les noms de vue logique
à ressources physique
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 40
41. Intégration avec JSF
• On ajoute la Servlet de Spring dans
web.xml
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 41
42. On ajoute dans le fichier de configuration
de flow :
<faces:flow-builder-services id="flowBuilderServices" />
<bean id="facesContextListener"
class="org.springframework.faces.webflow.FlowFacesCo
ntextLifecycleListener" />
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 42
43. Sécurisation des flows
• Configurer Spring Security avec
l’authentification et l’autorisation
• Annoter la définition du flow avec un
élément sécurisé pour définir les régles de
sécurité
• Ajouter SecurityFlowExecutionListener au
processus des régles de sécurité
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 43
44. Elément Sécurisé
• L'élément sécurisé désigne que son élément
contenant devrait appliquer le contrôle
d'autorisation
<view-state id="secured-view">
<secured attributes="ROLE_USER" />
...
</view-state>
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 44
46. Configurer Spring Security
• Spring Security permet de gérer l'accès aux
ressources d'une application Java.
• Toute ressource sollicitée par un appelant est
rendue accessible si, d'une part, l'appelant
s'est identifié, et si d'autre part, il possède les
droits nécessaires (des rôles dans le
vocabulaire Spring Security).
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 46
47. Conclusion
• « Spring MVC » offre une approche
intéressante fondée sur les mécanismes
d’injection de dépendances et les
métadonnées configurées dans des
annotations.
• Les principaux atouts du « framework »
résident dans son ouverture ainsi que
dans la modularité et l’isolation des
composants du « pattern » MVC
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 47
48. Références
• http://static.springsource.org
• http://netbeans.org/kb/docs/web/quicks
tart-webapps-spring.html
• http://www.springparlapratique.org/extr
aits/splpv2-chap-7.pdf
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 48