SPRING MVC
UP ASI
Bureau E204
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 1
Plan du Cours
▪ Spring MVC ( Définition + Spring web)
▪ Les architectures physiques et logiques
▪ Serveur web vs. Serveur d’application
▪ Postman
▪ Dépendance web
▪ Cycle de Vie d’une requête HTTP (Spring Boot + Postman)
▪ RestController
– TP Spring Boot + Spring Data JPA + Spring MVC (REST) + Postman
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 2
Introduction
• 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.
• Nous allons nous intéresser au développement de la couche Web (Web
Services REST + Contrôleur + Service + Repository) dans ce cours.
• Nous allons aussi pratiquer la consommation des services par Postman.
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 3
Introduction
• Plusieurs Projets Spring permettent d’implémenter des applications Web :
• Framework Spring (qui contient Spring MVC)
• Spring Web Flow (Implémenter les navigations Stateful).
• Spring mobile (Détecter le type de l’appareil connecté).
• Spring Social (Facebook, Twitter, LinkedIn).
• …
• Nous allons nous intéresser à Spring MVC.
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 4
SPRING MVC
• Spring MVC est un Framework Web basé sur le design 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 JSF,
JSP, Velocity, Thymeleaf...
• Spring MVC n’offre pas une technologie de vue mais permet en revanche
de communiquer avec toutes les technologies web les plus performantes
tels que Angular, React, etc...
• Spring MVC est construit en se basant sur la spécification JavaEE : Java
Servlet.
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 5
Architecture Physique
• Tier est un mot anglais qui signifie étage ou niveau.
• Une application peut être 1-Tier, 2-Tiers, 3-Tiers ou N-Tiers.
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 6
Architecture Physique - 1-Tiers
• Une application 1-Tier est, par exemple, la Modification d’un
document Word sur un ordinateur Local.
• Tout est sur la même machine et les couches sont fortement liées.
• Inconvénients : Risque de perte des données (non sauvegardées à
distance), Impossible d’accéder à une même ressource par deux
utilisateurs en même temps.
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 7
Architecture Physique - 2-Tiers
• Une application 2-Tiers est typiquement une application client lourd.
• Le niveau Présentation (IHM) et le niveau Traitement sont sur la machine
de l’utilisateur.
• Le niveau Base de Données est sur un autre serveur.
• C’est une architecture Client / Serveur.
• Client = demandeur de ressource
• Serveur = fournisseur de ressource
Inconvénients
• Toute mise à jour des fonctionnalités nécessite un déploiement sur toutes
les machines des utilisateurs.
• Le serveur ne fait pas appel à une autre application pour fournir le service.
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 8
Architecture Physique - 3-Tiers
• Une application 3-Tiers introduit un niveau intermédiaire ( middleware) entre
le client et le serveur.
• Le niveau intermédiaire est chargé de fournir la ressource en faisant appel à
un autre serveur.
Avantages
• Centraliser la logique application sur un serveur HTTP
Inconvénients
• Le serveur HTTP ( élément principal de l’architecture )est fortement sollicité
d’où une charge de demandes provenant à la fois du client et du serveur.
• Bien que cette architecture résout le problème du client lourd de
l’architecture deux tiers, le soulagement du client est remplacé par un
serveur fortement sollicité.
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 9
Architecture Physique - 3-Tiers
• Une application 3-Tiers est typiquement une application Web :
– Niveau Présentation : IHM (Navigateur sur la machine de l’utilisateur)
– Niveau Traitement : Un serveur web (Tomcat, …) qui contient le WAR de
notre application.
– Niveau Base de données : Un serveur de BD qui stocke les données de
notre application.
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 10
Architecture Physique - N-Tiers
• L’architecture N tiers assure un équilibre de charge entre le client et le
serveur par l’introduction de nouvelles couches.
• Voici une architecture 4-Tiers d’une application web développée par un
étudiant Esprit pendant son projet de fin d’étude (GUI – Angular sur le Serveur
NodeJS – Spring Boot (Serveur Web Tomcat embarqué) – Serveur de base de
données MySQL) :
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 11
Architecture Physique - N-Tiers
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 12
Architecture Physique - N-Tiers
• Voici une architecture n-Tiers, en Micro-Servcies, d’une application web
développée par un étudiant Esprit pendant son projet de fin d’étude : GUI /
NodeJS / Spring Boot / DB
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 13
Architecture logique
• Une application typique utilisant Spring est généralement
structurée en trois couches :
– Couche Présentation : (Web + Contrôleur)
– Couche Service : interface métier avec mise en œuvre de
certaines fonctionnalités.
– Couche Accès aux Données : recherche et persistance des objets.
• Spring est un Framework utilisé pour créer et injecter les objets
requis pour communiquer entre les différentes couches.
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 14
Serveur Web vs Serveur d’Application
Serveur Web Serveur d’application JavaEE
Serveur web + EJB container
Héberge que la couche présentation et l’expose qu’à travers le Héberge la logique métier et peut aussi héberger la couche
protocole HTTP(S) présentation (supporte différents protocoles : HTTP, JNDI,
...).
Ne peut pas inclure un EJB Container. Doit inclure un EJB Container.
lightweight Relativement gourmand en ressources (CPU, RAM et Disk).
Exp : Apache HTTP Server, Tomcat, Jetty .... Exp : Wildfly, WebSphere ...
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 15
Serveur Web vs Serveur d’Application
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 16
Serveur Web vs Serveur d’Application
Spring IOC Container
Dans une application Spring, les objets sont créés, sont liés ensembles et
communiquent dans le Spring IOC Container.
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 17
Postman
• Parmi les nombreuses solutions pour interroger ou tester les web services
et les API, Postman propose de nombreuses fonctionnalités, une prise en
main rapide et une interface graphique agréable.
• Postman permet de construire et d’exécuter des requêtes HTTP, de les
stocker dans un historique afin de pouvoir les rejouer.
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 18
Postman
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 19
Postman
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 20
Dépendance web
• Le starter web permet d’ajouter toutes les dépendances liées à la partie
web notamment ceux liées à Spring MVC et l’exposition des web
services.
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 21
Cycle de Vie d’une requête HTTP
(Spring Boot + Postman)
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 22
Cycle de Vie d’une requête HTTP
(Spring Boot + Postman)
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 23
RestController
• Dans ce fichier de properties ajouter les lignes suivantes, pour définir l’url de
notre application :
#Server configuration
[Link]=8089
[Link]-path=/kaddem
• Cela permet de créer une partie de l’url que nous allons utiliser sur postman :
[Link]
• Le path complet sera crée au niveau de notre couche controller comme
présentée dans le slide suivant :
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 24
RestController
@RestController
@AllArgsConstructor
@RequestMapping("/equipe")
public class EquipeRestController {
IEquipeService equipeService;
// [Link]
@GetMapping("/retrieve-all-equipes")
public List<Equipe> getEquipes() {
List<Equipe> listEquipes = [Link]();
return listEquipes;
}
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 25
TP - Spring : Boot – Core – Data JPA – MVC (REST)
• Nous allons commencer par exposer des Web Service REST :
Spring Boot – Core – Data JPA – MVC (REST) -Postman
• Vous avez déjà créé un projet : Spring (Boot – Core – Data JPA)
avec un CRUD.
• Nous allons reprendre le même projet (étude de cas kaddem)
et exposer ces méthodes (CRUD) avec des Web Servie REST.
• Ces Web Services seront testé avec Postman.
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 26
TP - Spring : Boot – Core – Data JPA – MVC (REST)
• Installation de Postman :
• L’exécutable est sur le Drive du cours Spring (dossier Outils), à
télécharger et à installer.
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 27
TP - Spring : Boot – Core – Data JPA – MVC (REST)
• Vérifier que le fichier de properties contient les propriétés nécessaires (web,
base de données, log4j, …) :
#Server configuration
[Link]-path=/kaddem
[Link]=8089
### DATABASE ###
[Link]=jdbc:mysql://localhost:3306/springdb?useUnicode=true
&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
[Link]=root
[Link]=
### JPA / HIBERNATE ###
[Link]-sql=true
[Link]-auto=update
[Link]=[Link].MySQL5Dialect
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 28
TP - Spring : Boot – Core – Data JPA – MVC (REST)
#logging configuration
# Spécifier le fichier externe ou les messages sont stockés
[Link]=D:/spring_log_file.log
# Spécifier la taille maximale du fichier de journalisation
[Link]-size= 100KB
# spécifier le niveau de Log
[Link]=INFO
# Spécifier la forme du message
[Link]=%d{yyyy-MM-dd HH:mm:ss} - %-5level - %logger{36} - %msg%n
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 29
TP - Spring : Boot – Core – Data JPA – MVC (REST)
• Créer le package [Link]
• Créer le bean Spring EquipeRestController annoté @RestController
• Créer les méthodes nécessaires pour exposer le CRUD (voir pages
suivantes) :
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 30
TP - Spring : Boot – Core – Data JPA – MVC (REST)
@RestController
@AllArgsConstructor
@RequestMapping("/equipe")
public class EquipeRestController {
IEquipeService equipeService;
// [Link]
@GetMapping("/retrieve-all-equipes")
public List<Equipe> getEquipes() {
List<Equipe> listEquipes = [Link]();
return listEquipes;
}
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 31
TP - Spring : Boot – Core – Data JPA – MVC (REST)
// [Link]
@GetMapping("/retrieve-equipe/{equipe-id}")
public Equipe retrieveEquipe(@PathVariable("equipe-id") Integer equipeId) {
return [Link](equipeId);
}
// [Link]
@PostMapping("/add-equipe")
public Equipe addEquipe(@RequestBody Equipe e) {
Equipe equipe = [Link](e);
return equipe;
}
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 32
TP - Spring : Boot – Core – Data JPA – MVC (REST)
// [Link]
@DeleteMapping("/remove-equipe/{equipe-id}")
public void removeOperateur(@PathVariable("equipe-id") Long equipeId) {
[Link](equipeId);
}
// [Link]
@PutMapping("/update-equipe")
public Equipe updateEtudiant(@RequestBody Equipe e) {
Equipe equipe= [Link](e);
return equipe;
}
}
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 33
TP - Spring : Boot – Core – Data JPA – MVC (REST)
Réponse web service sur le navigateur
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 34
TP - Spring : Boot – Core – Data JPA – MVC (REST)
Réponse web service sur Postman
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 35
© 2022-2023 – ESPRIT – ARCHITECTURE DES SI II SPRING – Spring Data JPA – 1ere Entité 36
Travail à faire
Spring MVC
Exposer les services implémentés dans l’étude de cas Kaddem avec Postman
pour les tester.
© 2022-2023 – ESPRIT – Module Architecture des SI II (Spring) étude de cas gestion magasin-stock 37
SPRING MVC
Si vous avez des questions, n’hésitez pas à nous
contacter :
Département Informatique
UP ASI
Bureau E204
© 2022-2023 – ESPRIT – Module Architecture des SI II Spring – Spring MVC 38