Spring MVC
Auteur : Walid YAICH Dernière mise à jour : Août 2018
1
Objectifs
▰ Définir Spring Web MVC
▰ Comprendre les concepts de base
(dispatcherServlet, views ...)
▰ Comprendre le cycle de vie d’une requête.
▰ Connaître les étapes nécessaires pour construire
un projet web en SpringMVC et le déployer sur
Tomcat 8.
▰ Implémenter une application “say hello” en
[Link]@espr
2
[Link]
Plan
▰ Structure du projet
▰ Introduction ▰ Configuration Maven
▰ Spring Web ▰ Déclaration de
▰ Spring Web MVC dispatcherServlet
▰ Les concepts de base ▰ Configuration de la couche
▰ DispatcherServlet web
▰ Controller ▰ Configuration de la couche
▰ View métier
▰ ViewResolver ▰ Implémentation de la vue
▰ Cycle de vie d’une requête et du Controller
▰ Tomcat 8 et Eclipse ▰ Déployer l’application
▰ Troubleshooting
[Link]@espr
▰ Test [Link]
3
[Link]@espr
[Link] Introducti
on
Un conteneur de servlets (Servlet container en
anglais) ou conteneur web (web container en
anglais) est un logiciel qui exécute des servlets.
Un ou une servlet est une classe Java qui
permet de créer dynamiquement des données au
sein d'un serveur HTTP.
Il existe plusieurs conteneurs de servlets, dont
Apache Tomcat ou encore Jetty. Le serveur
d'application JBoss Application Server(Wildfly)
utilise Apache Tomcat.
⇒ Dans ce cours on s'intéresse à l’implémentation de la couche Web.
4
Spring Web
● Spring MVC
● Spring WebFlow (Implémenter les navigations Stateful).
● Spring mobile (Détecter le type de l’appareil connecté).
● Spring Social (Facebook, Twitter, LinkedIn).
⇒ Dans ce cours on s'intéresse à Spring MVC.
[Link]@espr
5
[Link]
Spring Web MVC
● Spring MVC est un Framework Web basé sur le pattern MVC (Model / View /
Controller).
● Spring MVC fait partie du projet “Spring Framework”.
● Spring MVC s'intègre avec les différentes technologies de vue tel que JSP,
Velocity, Thymeleaf...
● Spring MVC s'intègre avec les autres Frameworks Web tel que JSF, Struts,
Wicket ...
● Spring MVC n’offre pas une technologie de vue.
● Spring MVC est construit en se basant sur la spécification JavaEE suivante :
Java Servlet. [Link]@espr
6
[Link]
Les concepts de base
● DispatcherServlet
● Controllers
● View
● ViewResolver
[Link]@espr
7
[Link]
DispatcherServlet
● DispatcherServlet est un servlet qui hérite de HttpServlet.
● DispatcherServlet joue le role du “Front controller”.
● DispatcherServlet gère toutes les requêtes et invoque les beans
adéquats.
● Avant la version 3 de la spécification Java Servlet, DispatcherServlet doit
être défini dans le [Link] (comme FacesServlet en JSF).
● Après la version 3 de la spécification Java Servlet, c’est possible de
définir DispatcherServlet en utilisant l’interface WebApplicationInitializer
(sans [Link]).
[Link]@espr
8
[Link]
DispatcherServlet
WebApplicationContext hérite
de ApplicationContext
pour rajouter les fonctionnalités
nécessaire à une application
web.
Child
Spécifique a chaque
instance de DispatcherServlet
Chargé par DispatcherServlet.
Partagé pour tous les contexts et tout
Parent es les instances de servlets.
Chargé par ContextLoaderListener.
[Link]@espr
9
[Link]
Controller
http:// localhost:8080 / Spring_MVC / servlet / sayHello?myName=Walid
Le model contient les La valeur de retour est le nom de
données qui seront transmis a la vue sans le suffix “.jsp”.
la vue. [Link]@espr
10
[Link]
View
● Une vue génère un output web, c.a.d, du code compréhensible par le
navigateur.
● Exemple de technologie de vue :
Jsp, velocity, freemarker, tymeleaf.
● Le Controller retourne généralement le nom de la vue.
● Le ViewResolver doit sélectionner la vue en se basant sur son nom.
Une vue en jsp :
[Link]@espr
11
[Link]
ViewResolver
Le ViewResolver prend le nom de la vue “helloPage” et génère le path relatif à webapp:
/views/[Link]
[Link]@espr
12
[Link]
Cycle de vie d’une
requête
URL : [Link]
[Link]@espr
13
[Link]
[Link]@espr
“Say hello” en Spring MVC [Link]
Voici les étapes nécessaires pour développer votre première application en
SpringMVC :
1) Configurer tomcat 8 sur eclipse
2) Construire le [Link]
3) Déclarer le dispatcherServlet ([Link])
4) Configurer SpringMVC ([Link])
5) Implémenter le controller ([Link])
6) Implémenter la vue ([Link])
7) Déployer sur tomcat 8 et tester
NB : Ces étapes sont détaillées dans les slides qui suivent.
Ce repository contient la squelette du projet “say Hello” :
[Link]
14
[Link]@espr
Tomcat 8 et Eclipse [Link]
1) Télécharger le zip et le décompresser
2) Ajouter un nouveau serveur dans eclipse
3) mettre le path du zip
décompressé
4) Sélectionner JDK 1.8
15
Tomcat 8 et Eclipse
Démarrer le serveur et tester :
localhost:8080
Ça devrai donner :
[Link]@espr 16
[Link]@espr
Structure du projet [Link]
Configuration de la couche métier
Configuration de la couche web
Déclaration de dispatcherServlet
Implémentation du Controller
Implémentation de la vue
17
Configuration [Link]@espr
[Link]
1) Créer un nouveau projet maven
avec les dépendances Spring
Maven
vu dans les chapitres
précédents.
2) Rajouter les dépendances de
SpringMVC et du servlet.
3) Changer le packaging vers
“war”
4) Clic droit sur le projet → Maven
→ update project
http:// localhost:8080 / Spring_MVC / servlet / sayHello?myName=Walid 18
Déclaration de
dispatcherServlet
Configuration de la couche métier
Configuration de la couche web
http:// localhost:8080 / Spring_MVC / servlet / sayHello?myName=Walid
[Link]@espr
19
[Link]
Configuration de la couche web
Charger la configuration
par défaut de
SpringMVC
Il faut mettre la liste des
packages qu’il faut scanner.
Déclarer le viewResolver
[Link]@espr
20
[Link]
Configuration de la couche
métier
Pour l’instant, aucun bean dans la couche métier, donc on laisse vide
[Link]@espr
21
[Link]
Implémentation de la vue et du
Controller
http:// localhost:8080 / Spring_MVC / servlet / sayHello?myName=Walid
ArtifactId Servlet mapping
[Link]@espr
22
[Link]
Déployer l’application
1) Clic droit sur le serveur, puis,
add and remove.
2) Le projet devrait apparaître à
gauche
3) Déployer le projet.
4) Démarrer le serveur
5) Tester localhost:8080
[Link]@espr
23
[Link]
Troubleshooting
[Link] is missing and <failOnMissingWebXml> is set to true
Solution :
Dans le [Link], sous <properties>, rajouter :
<failOnMissingWebXml>false</failOnMissingWebXml>
Parce que, on n’a pas besoin du [Link], on déclare le dispatcherServlet en
utilisant une classe Java et non pas le [Link].
NB :Ceci n’était pas possible avant la version 3 de la spécification Java Servlet.
[Link]@espr
24
[Link]
Troubleshooting
Solution :
[Link]@espr
25
[Link]
Test
http:// localhost:8080 / Spring_MVC / servlet / sayHello?myName=Walid
[Link]@espr
[Link]
Quote of the Day
“ “First, solve the problem.
Then, write the code.”
John Johnson
[Link]@espr
27
[Link]
Merci !
[Link]@espr
28
[Link]