Spring mvc 3.0 web flow

48
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. Spring 3.0 MVC WebFlow

Transcript of Spring mvc 3.0 web flow

Page 1: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Spring 3.0 MVC WebFlow

Page 2: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 2

Plan

Introduction

Spring MVCPrincipe

Démonstration

Spring WebFlowPrincipe

Configuration

Démonstration

Conclusion

Page 3: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 3

Les Apports de Spring

Gains en Productivité Meilleure Solution

IOC

Implémentation AOPAlternative Légère

des EJB

Page 4: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 4

Architecture de Spring

Page 5: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 5

Introduction à Spring MVC

Spring

Click 

Struts

Page 6: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 6

Spring MVC

Un conteneur léger

une grande flexibilité

Les annotations

Page 7: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 7

Spring MVC

MVC standard

MVC Spring

Page 8: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 8

Cycle de Vie

Request

Dispatcher Servlet

Handler Mapping

Controller

ViewResolver

View

ModelAndView

1

2

3

4

5

Request

Request

Controller

View Name

View

Model

ResponseResponse

6

Page 9: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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

Page 10: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 10

Dispatcher-Servlet

Mappage des contrôleurs:

1. SimpleUrlHandlerMapping : Correspondances entre motifs URL et contrôleur

Page 11: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 11

2. BeanNameUrlHandlerMapping : Les noms du bean sont les URL il est là par défaut dans le contexte Web.

Page 12: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 12

Déclaration du ViewResolver

Déclaration du ViewResolver

Mappage des noms logiques des vues avec les implémentations réelles.

Page 13: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 13

Spring MVC : Mise en place

Configuration du dispatcher-servlet dans le fichier WEBINF/web.xml

Page 14: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 14

Spring MVC : Mise en place

• Implémentation du DispatcherServlet

Page 15: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 15

Spring MVC : Mise en place

OU

AbstractController

Implémentation de la méthode «onSubmitl() »

• Implémentation du contrôleur

Page 16: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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.

Page 17: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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

Page 18: Spring mvc 3.0 web flow

18

Démo

Page 19: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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.

Page 20: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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.

Page 21: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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

Page 22: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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

Page 23: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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

Page 24: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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 »

Page 25: Spring mvc 3.0 web flow

25

Les types d’états

Page 26: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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 ">

Si start-state n'est pas défini, l'état de démarrage est le premier état trouvé dans la liste.

<end-state id=" cancelled" view="/fin.jsp" />

Page 27: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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

Page 28: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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>

Page 29: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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>

Page 30: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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.

Page 31: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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>

Page 32: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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" >

Page 33: Spring mvc 3.0 web flow

33

Démo

Page 34: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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>

Page 35: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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

Page 36: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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.FlowHandlerAdapter"> <property name="flowExecutor" ref="flowExecutor" /> </bean>

Page 37: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 37

<bean class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping"> <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>

Page 38: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 38

Spring application contexte

DispatcherServletReçoit toutes les requêtes y compris les requêtes SWF

Contrôleur Spring MVC qui reçoit les demandes de Flow et les transmet à FlowExecutor pour le traitement.

FlowController

Page 39: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 39

FlowExecuterContient la logique de traitement des demandes de Spring Web Flow.

FlowRegistryFournit les Flow dont le FlowExecutor a besoin.

Page 40: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 40

FlowBuilderServices

Conteneur pour les différents services

dont le FlowRegistry a besoin pour la

construction des Flow

View FactoryCreator

Crée des view factories

ViewResolver Traduit les noms de vue logique à ressources physique

Page 41: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 41

Intégration avec JSF

• On ajoute la Servlet de Spring dans web.xml

Page 42: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 42

On ajoute dans le fichier de configuration de flow :

<faces:flow-builder-services id="flowBuilderServices" />

<bean id="facesContextListener"class="org.springframework.faces.webflow.FlowFacesContextLifecycleListener" />

Page 43: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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é

Page 44: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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>

Page 45: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 45

SecurityFlowExecutionListener

Page 46: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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).

Page 47: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 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

Page 48: Spring mvc 3.0 web flow

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 48

Références

• http://static.springsource.org

• http://netbeans.org/kb/docs/web/quickstart-webapps-spring.html

• http://www.springparlapratique.org/extraits/splpv2-chap-7.pdf