You are on page 1of 25

JEE-Spring

Spring MVC

1 Fonctionnement, Théories et Concepts ................................................................................... 2


1.1 Fonctionnement : Flux d’exécution ................................................................................ 2
1.2 Concepts .......................................................................................................................... 2
2 Exemple à implémenter .......................................................................................................... 3
3 Dispatcher Servlet : Notion , Configuration et Installation .................................................... 5
3.1 Configuration du fichier web.xml ................................................................................... 5
3.2 Initialisation du dispatcher servlet: ................................................................................. 5
3.3 Configuration du fichier de configuration avec DS ........................................................ 6
3.4 C’est quoi le dispatcher servlet : ..................................................................................... 7
4 Les contrôleurs/ Controller ..................................................................................................... 8
4.1 @Controller .................................................................................................................... 8
4.2 @RequestMapping.......................................................................................................... 8
4.3 Dispatcher Servlet vs. Controller .................................................................................... 9
4.4 Contrôleurs avec plusieurs actions................................................................................ 10
5 TP Spring MVC : partie 1 ..................................................................................................... 11
6 View Resolver (Gestionnaires des vues) .............................................................................. 12
6.1 Problème ....................................................................................................................... 13
6.2 Fonctionnement............................................................................................................. 13
6.3 Configuration des beans ................................................................................................ 14
7 Model .................................................................................................................................... 15
7.1 Affichage des données d’une commande dans une vue jsp .......................................... 15
7.2 Récupérer les données de la saisie d’une commande de la vue .................................... 17
7.2.1 Utilisation de HttpServletRequest......................................................................... 18
7.2.2 Utilisation de @Requestparam ............................................................................. 19
9 Data binding/liaison de données: Data Transfer Object Pattern (DTO) ............................... 20
9.1 Création du DTO........................................................................................................... 20
9.2 DTO et Contrôleur ........................................................................................................ 20
9.3 DTO et Vue ................................................................................................................... 21
9.4 Ajout du DTO au model ............................................................................................... 22
9.4.1 Balise de spring : form .......................................................................................... 23
9.4.2 @ModelAttribute .................................................................................................. 24
10 TP avec projet Maven ........................................................................................................... 25

Professeur. Hind LAMHARHAR 1


JEE-Spring

1 Fonctionnement, Théories et Concepts


1.1 Fonctionnement : Flux d’exécution

1. Un client envoie une requête HTTP vers le serveur en utilisant l'URL suivante :
http://localhost:8080/SpringMVCTuto/index.html
2. Le Dispatcher Servlet intercepte la requête et utilise quatre assistants pour répondre à la
demande.
3. Le Dispatcher Servlet (DS) demande de l'aide au Handler Mapping (HM) pour trouver le
contrôleur approprié qui peut générer les données de la requête.
4. Le Handler Mapping scanne l'URL de la requête et fournit l'adresse exacte du contrôleur
qui peut générer les données pour répondre à la requête.
5. Le Dispatcher Servlet envoie ensuite la requête au contrôleur « Controller ».
6. Le contrôleur prépare les données nécessaires pour répondre à la requête et crée ou appelle
les objets responsables du traitement de ces données. Ces objets peuvent être plusieurs classes
ou modèles.
7. Le contrôleur envoie les objets Java contenant les données à la vue (View) qui sera chargée
de les afficher.
8. Le contrôleur demande de l'aide au View Resolver pour déterminer la vue appropriée qui
sera chargée d'afficher les données.
9. Le Dispatcher Servlet envoie la requête à la vue appropriée pour afficher les données.
10. La vue génère le résultat et le renvoie au Dispatcher Servlet.
11. Le Dispatcher Servlet envoie la réponse à la requête au client.

1.2 Concepts
Les notions de Dispatcher servlet, Handler Mapping, Controller, View Resolver, View seront
traités au fur et à mesure de ce tutorial.

Professeur. Hind LAMHARHAR 2


JEE-Spring

2 Exemple à
implémenter
Handler

Mapping

Dispatcher Servlet
Requête

Controller
Réponse

Resolver View

Fournisseur
View Stock

patisserie-servletdispatcher
Controller Controller

Employe Vente

Controller Controller

…. Factures

Controller

1. Créer un projet web (Dynamic Web Project) : ProjetSpringMVC

N’oublier pas de sélectionner web.xml

2. Ajouter les librairies du Spring Framework dans :


/ProjetSpringMVC/WebContent/WEB-INF/lib

Professeur. Hind LAMHARHAR 3


JEE-Spring

Pour les sources aller à : https://repo.spring.io/ui/native/release/org/springframework/spring

Remarque : Vous pouvez créer un projet Maven et ajouter la dépendance au Framework et


ajoutez les dépendances nécessaires : springframwork/ context-mvc/servlet, voir Section 10.

Professeur. Hind LAMHARHAR 4


JEE-Spring

3 Dispatcher Servlet : Notion , Configuration et Installation


Le DispatcherServlet est un servlet (il hérite de la classe de base HttpServlet) et, en tant que tel,
est déclaré dans le fichier web.xml de votre application Web. Vous devez mapper les demandes
que vous souhaitez que DispatcherServlet gère, en utilisant un mappage d'URL dans le même
fichier web.xml. Il s'agit d'une configuration de servlet JEE standard;
L’exemple suivant montre une telle déclaration et un mappage DispatcherServlet: Pour
initialiser le DispatcherServlet du spring MVC, il faut suivre les étapes suivantes :
1. Configuration du fichier web.xml
2. Initialisation du DS : Création du fichier de configuration (comme Spring IoC)

3.1 Configuration du fichier web.xml

Dispatcher Servlet

Il faut un fichier dans WEB-

« nom_DS suivi -servlet.xml


Exemple : rh-front-controller-servlet.xml

Il faut ajouter le serveur tomcat


➢ Le serveur web (tomcat) demande l’initialisation de DS

3.2 Initialisation du dispatcher servlet:


- Il faut créer le fichier de configuration : /WEB-INF/patisserie-dispatcherservlet-servlet.xml]

• Ce fichier doit respecter le nommage suivant : url-pattern (nom_DS) suivi de –


servlet.xml
• Le contenu de ce fichier dépend de l’approche de configuration : XML/Annotation
(on verra après).

Professeur. Hind LAMHARHAR 5


JEE-Spring

Démarrer tomcat et remarquer l’initialisation du dispatcher servlet

3.3 Configuration du fichier de configuration avec DS


1- Renommer le fichier comme suit : patisserie-config.xml
2- Configurer au niveau du web.xml
➔ Il s’agit de la configuration de la balise <init-param>:

Professeur. Hind LAMHARHAR 6


JEE-Spring

3.4 C’est quoi le dispatcher servlet :


• C’est le contrôleur frontal pour les applications Web basées sur le Framework Spring.
➢ Il fournit un mécanisme de traitement des demandes où le travail réel est
effectué par des composants délégués configurables.
➢ Il est hérité de javax.servlet.http.HttpServlet,
➢ Il est généralement configuré dans le fichier web.xml.
• Une application Web peut définir un nombre illimité d'instances DispatcherServlet.
➢ Chaque servlet fonctionnera dans son propre espace de noms,
➢ Chargeant son propre contexte d'application avec des mappages, des
gestionnaires, etc.
➢ Seul le contexte (ServletContext) d'application racine, sera partagé.
• Dans la plupart des cas, les applications n'ont qu'un seul DispatcherServlet avec l'URL
contextuelle (/), c'est-à-dire que toutes les demandes provenant de ce domaine seront
traitées par celui-ci.
• DispatcherServlet utilise les classes de configuration Spring pour découvrir les
composants délégués dont il a besoin pour le mappage des requêtes, la résolution des
vues, la gestion des exceptions, etc.

Professeur. Hind LAMHARHAR 7


JEE-Spring

4 Les contrôleurs/ Controller


4.1 @Controller
1- Créer un package com.hightech.springmvc.web.controller
2- Créer une classe java : VenteController
3- Pour indiquer que c’est un contrôleur il faut ajouter l’annotation @Controller

Même principe que @Component, il faut configurer le fichier de configuration spring


patisserie-dispatcherservlet-servlet.xml avec component-scan

Tester et voir si le contrôleur et voir s’il s’exécute : Affichage sur la console du message
de bienvenu
4.2 @RequestMapping
Il faut ajouter l’annotation : @RequestMapping qui permet d’intercepter les requêtes qui
seront prise en charge par notre méthode

Professeur. Hind LAMHARHAR 8


JEE-Spring

4.3 Dispatcher Servlet vs. Controller


1- Dispatchet servlet est initialise par le serveur web « Tomcat » : web.xml
2- Un objet de la classe org.springframework.web.servlet.DispatcherServlet est crée

3- @Controller avec ComponentScan sont configurées➔ bean de type Controller


« VenteController » sera cree MAIS

4- Il est ou le conteneur ApplicarionContext (voir Spring Core)


➔ Le Dispatcher Servlet est le responsable de la création du conteneur :
WebApplicationContext

Professeur. Hind LAMHARHAR 9


JEE-Spring

4.4 Contrôleurs avec plusieurs actions


Si on veut gérer plusieurs actions d’un seul contrôleur, il faut ajouter autant de méthodes avec
@RequestMapping et une url.
Par exemple, supposons, en plus de la méthode passerCommande, on veut afficher l’ensemble
des produits de cette commande vendue à un client donné « afficherProduits » et on veut aussi
afficher aussi l’ensemble des commandes d’un client de cette vent :
« afficherCommandesClient ». Dans ce cas il faut ajouter les deux méthodes et de les annoter
avec @RequestMapping et l’url de la requête.

Professeur. Hind LAMHARHAR 10


JEE-Spring

5 TP Spring MVC : partie 1

1. Créer le projet et suivre les étapes du cours


2. Ajouter les autres contrôleurs de l’exemple
3. Pour chaque contrôleur ajouter deux actions
4. Eliminer @ResponseBody d’un des contrôleurs, vos remarques?

Fournisseur Stock
Controller Controller

Employe Vente

Controller Controller

…. Factures

Controller

Professeur. Hind LAMHARHAR 11


JEE-Spring

6 View Resolver (Gestionnaires des vues)


Comment configurer la partie View du pattern MVC, exemple une page jsp ?
Prenons notre exemple de la gestion de la pâtisserie, on veut afficher le message de bienvenue
dans une page html ou jsp.

➢ Objectif : Supprimer @ResponseBody, tester et afficher la vue dans une page web (jsp
ou html)➔Alors notre contrôleur doit retourner une vue.
1- Créer une page welcome.html ou welcome.jsp dans le dossier WEB-INF/vues, suivante :

2- Ajouter un nouveau contrôleur « WelcomeController » et ajouter la méthode bienvenue


() qui return la page

3- Tester avec http://localhost:8080/ProjectSpringMVCCours/patisserie/welcome


Vérifier que l’url pattern au niveau du web.xml est la suivante :

Professeur. Hind LAMHARHAR 12


JEE-Spring

6.1 Problème
Le contrôleur (WelcomeController) retourne le nom de la vue.
Mais ce n’est pas la bonne approche, pourquoi ?
Supposons qu’on veut changer l’emplacement ou bien de la technologie utilisée pour la vue. Il faut
modifier à chaque moment le contrôleur : violation du deuxième principe « ouverture à
l’extension, fermeture à la modification.
Solution : il faut bien utiliser la View Resolver du Spring MVC, Dans Spring
MVC, ViewResolver est utilisé pour résoudre le «nom de la vue». ViewResolver charge
l’emplacement des beans de vue à partir de la propreté prefix : (Ici : /WEB-INF/) et l’extension
de la vue avec la propriété suffix (ici : .html);
La configuration de la View Resolver doit être faite au niveau du fichier de configuration (XML
ou java), dans la cadre de notre exemple, il faut ajouter cette configuration dans le fichier
(patisserie-servletdispatcher-servlet.xml)
Alors, que faut-il configurer exactement ?

6.2 Fonctionnement

"/WEB-INF/vues/welcome.jsp"
prefix suffix

Au niveau de spring MVC il existe une classe appeler InternalRessourceViewResolver qui


permet de configurer ce fonctionnement de View Resolver, cette classe permet de configurer le
/patisserie/*

prefix et le suffix, cette classe contient ces deux attributs avec des getter/setters. Afin de
configurer View Resolver il faut ainsi configurer les deux attributs : suffix et prefix.

Question : Comment on configure le bean de cette classe avec des propriétés dans le fichier de
configuration spring ?

Changer l’emplacement du fichier ensuite développer une page .jsp ou lieu de html

Professeur. Hind LAMHARHAR 13


JEE-Spring

Controller

Dispatcher Servlet
/patisserie/welcome

Requête

Réponse

welcome

welcome
/WEB-INF/vues/Welcome.jsp

View Resolver
prefix suffix

6.3 Configuration des beans

Professeur. Hind LAMHARHAR 14


JEE-Spring

7 Model
La composante Model du pattern MVC pour le partage des données, est réalisé à travers
l’interface Model du spring. Le contrôleur récupère les données de la requête et renvois la
réponse à la vue à travers cette composante.
Pour notre exemple de la gestion de la pâtisserie, on va :
➢ On va afficher les données d’une commande dans une vue jsp
(consulterCommande.jsp) en appelant l’action (/commande) du contrôleur
CommandeController
➢ Ensuite on va récupérer les données de la saisie d’une commande de la vue
(passerCommande.jsp) en exécutant l’action (/passercommande) du même
contrôleur
7.1 Affichage des données d’une commande dans une vue jsp
1- On va créer un contrôleur de gestion des commandes (CommandeController) qui
affiche les produits d’une commande. Dans ce contrôleur, on ajouter l’action
« /commande » comme suit :

✓ Model comme paramètre de la méthode (action du contrôleur : /commande)


✓ addAttribute : permet de stocker les données à afficher dans la vue
(consulterCommande.jsp). Dans cet exemple, on va stocker les trois données :
produit, quantité, et numéro de la commande.
Question : model.addAttribute est l’équivalent de quoi dans le cadre du cours déjà vu
des servlets ?
Ces attributs seront récupérés au niveau de la vue qu’il faut créer. Mais il faut d’abord,
configurer le bean ViewResolver.

Professeur. Hind LAMHARHAR 15


JEE-Spring

2- Reconfigure le fichier spring

3- Créer une vue (page jsp) qui permet d’afficher les produits d’une commande et leurs
quantités

4- Tester

Professeur. Hind LAMHARHAR 16


JEE-Spring

7.2 Récupérer les données de la saisie d’une commande de la vue


Scenario : supposons qu’on veut réaliser le scénario suivant de navigation entre les pages avec le
Transfer des données.
1- A partir du lien de la page d’accueil /META-INF/vues/welcome.jsp, on veut accéder à la page
de la gestion des commandes, spécifiquement la page de la saisie de la commande
2- La page de passer Commande /META-INF/vues/passerCommande.jsp permet de saisir les
informations du produit à acheter : nom et quantité qu’on veut transférer à la page suivante
de confirmation
3- La page de confirmation /META-INF/vues/confirmation.jsp permet d’indiquer à
l’utilisateur que sa demande est encours de traitement
Processus du Transfer des données : Il faut capturer les donnée de la page
passerCommande.jsp → les stocker dans le modèle du spring MVC → et envoyer ce modèle à
la page confirmation.jsp → et récupérer les données de ce modèle

i. Capturer les données « produit et


quantité »

ii. Les mettre dans le modèle


iii. Les afficher dans la deuxième vue

Professeur. Hind LAMHARHAR 17


JEE-Spring

7.2.1 Utilisation de HttpServletRequest

@RequestMapping("/passercommande")
public String passerCommande(Model model) {
return "passerCommande"; }

@RequestMapping("/confirmer")
public String confirmerCommande(HttpServletRequest request,Model model) {
//capturer les données reçues de la requête
String produit=request.getParameter("produit");;
String quantite=request.getParameter("qte");

// set les données capturées de l'utilisateur dans le modèle


model.addAttribute("produitValue", produit);
model.addAttribute("quantiteValue", quantite);
return "confirmation"; }

Professeur. Hind LAMHARHAR 18


JEE-Spring

7.2.2 Utilisation de @Requestparam

Scenario

Professeur. Hind LAMHARHAR 19


JEE-Spring

9 Data binding/liaison de données: Data Transfer Object Pattern (DTO)


Le modèle des objets de transfert de données, ou DTO (Data Transfert Object) est l'un des
design patterns de l’architecture des applications d'entreprise qui nécessite l'utilisation d'objets
qui agrègent et encapsulent les données pour le transfert. Ils sont nés dans le monde Java avec
les Enterprise JavaBean (EJB) pour définir implicitement une phase d'assemblage de toutes les
données qui seront utilisées pour la visualisation sont rassemblées avant d'aller à la couche web.
Les DTO peuvent contenir toutes les données d'une source ou des données partielles. Ils
peuvent également contenir des données provenant de sources uniques ou multiples (exemple un
utilisateur et sa localisation). Une fois mis en œuvre, les DTO deviennent le moyen de transport
de données entre les systèmes. L’idée principale est de réduire le nombre d'appels à distance
coûteux. Il est Utilisé pour convertir des données entre le DTO et n'importe quel objet entité. De
nos jours, nous utilisons des mappeurs à cette fin (Spring JPA).
Un objet de transfert de données est, essentiellement, comme une structure de données. Il ne doit
contenir aucune logique métier mais doit contenir des mécanismes de sérialisation et de
désérialisation.
Il faut noter que l'application du modèle DTO peut devenir un anti-modèle dans les systèmes
locaux. Il est destiné à être utilisé dans les appels à distance pour promouvoir la sécurité et un
couplage lâche. S'il est appliqué aux systèmes locaux, il s'agit simplement de sur-concevoir une
fonctionnalité simple.
Dans ce qui suit, on va illustrer l’utilisation de modèle DTO pour le transfert des données dans
le cadre du Spring MVC.
9.1 Création du DTO
Pour le contrôleur, CommandeController on va créer le DTO CommandeDTO. Ce modèle va
stocker les données de la requête (produits commandés / quantité et numéro de la commande.)
C’est une classe java avec les attributs et leurs setters/getters et un constructeur vide. Pas de
logique métier Ces propriétés doivent porter les mêmes noms de la vue.

9.2 DTO et Contrôleur

Professeur. Hind LAMHARHAR 20


JEE-Spring

Appel du DTO par le Controller CommandeController

Lire les propriétés du CommandeDTO par la vue confirmation.jsp

Attention les noms (produitValue et


QuantiteValue) de confirmation.jsp
sont différents de CommandeDTO

9.3 DTO et Vue

il faut être :

Exécution

Professeur. Hind LAMHARHAR 21


JEE-Spring

Scenario

Setters

Getters

9.4 Ajout du DTO au model

Professeur. Hind LAMHARHAR 22


JEE-Spring

Mais la page confirmation2 n’affiche rien ???


- Il faut récupérer le DTO au moment de sa première utilisation
- Il faut ajouter à la page des balises form de Spring MVC
9.4.1 Balise de spring : form

Form Tag Description

form:form Il s'agit d'une balise conteneur qui contient toutes les autres balises
de formulaire.

form:input Cette balise est utilisée pour générer le champ de texte.

form:radiobutton Cette balise est utilisée pour générer les boutons radio.

form:checkbox Cette balise est utilisée pour générer les cases à cocher.

form:password Cette balise est utilisée pour générer le champ de saisie du mot de
passe.

form:select Cette balise est utilisée pour générer la liste déroulante.

form:textarea Cette balise est utilisée pour générer le champ de texte multiligne.

form:hidden Cette balise est utilisée pour générer le champ de saisie masqué.

1- C’est au niveau de l’action passer commande où il faut créer le bean commandeDTO


2- Ensuite il faut le mettre comme attribut dans le model : (commandeInfo)
3- L’action confirmer va initialiser les propriétés du bean

Professeur. Hind LAMHARHAR 23


JEE-Spring

4- La vue passerCommande.jsp est enrichie par les balises (taglib) du spring ce qui nous a
permis d’ajouter l’attribut « modelAttribute ».
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

5- La page confirmation récupère les propriétés bean à partir de l’attribut commandeInfo

9.4.2 @ModelAttribute

Professeur. Hind LAMHARHAR 24


JEE-Spring

10 TP avec projet Maven


Le TP à rendre avec un compte rendu dans lequel vous répondez aux questions
du TP.

Etape 1 : Création du projet avec maven


▪ Ajouter les dépendances nécessaires : springframwork/ context-
mvc/servlet
Etape 2 : Configuration du DispatcherServlet
- Configurer le fichier web.xml
- Créer un fichier de configuration spring
- Tester avec Tomcat
Question 1 : Vérifier si le dispatcher servlet est initialisée
➔ Faire une capture écran

Etape 3 : Création de la servlet


- Créer un contrôleur relatif à votre partie de la gestion de la pâtisserie
- Ajouter deux actions au minimum
Question 2 : Explique le rôle de ce contrôleur brièvement
Faire un schéma des interactions entre client-dispatcher servlet-contrôleur

Etape 5 : Création de la vue


- Identifier les vues (accueil- jsp_action1-jsp_action2-…)
- Créer et configurer ces vues dans le fichier de configuration : View Resolver
Question 3 : faire capture écran du fichier de configuration et enrichir le
schéma de la question 2 par les interfaces graphiques
Etape 6 : Création d’un modèle DTO de votre partie de gestion de la
pâtisserie
- Créer vos propres DTO
- Modifier le contrôleur avec dataBinding en utilisant DTO
- Expliquer le scenario

Professeur. Hind LAMHARHAR 25

You might also like