27/10/2023
Développement JEE
Le Framework Spring Boot
Chapitre 3 : Introduction à Spring Boot
Sabeur ELKOSANTINI
Maître de conférences en informatique
[Link]@[Link]
[Link]
S. Elkosantini 1
Plan
▪ Chapitre 1 : Introduction aux architecture JEE
▪ Chapitre 2 : Introduction à Spring boot
▪ Chapitre 7 : Framework SpringBoot : Spring Data JPA
▪ Chapitre 8 : Framework SpringBoot : Formuaire
▪ Chapitre 9 : Framework SpringBoot : Rest et services
▪ Chapitre 10 : Framework SpringBoot : Session et sécurité
S. Elkosantini 2
1
27/10/2023
Le modèle MVC
Introduction
▪ Objectif :
▪ organiser une application interactive en séparant :
✓ les données (Modèle )
✓ la représentation des données (Vues)
✓ le comportement de l ’application (Contrôle)
S. Elkosantini 3
Le modèle MVC
Introduction
▪ Le modèle (M) représente la structure des données dans l ’application
▪ La vue (V) présente les données sous une certaine forme à l ’utilisateur.
▪ Le contrôleur (C) traduit les interactions utilisateur par des appels de méthodes sur le
modèle et sélectionne la vue appropriée.
S. Elkosantini 4
2
27/10/2023
Le modèle MVC
MVC pour les applications web
Navigateur
Contrôle et vue
JSP
JSP Modèle 1
Modèle Bean BD
Modèle
Contrôleur
(Servlet)
Navigateur
Modèle
(Bean)
BD
JSP Modèle II: MVC
Viewer
(JSP)
S. Elkosantini 5
Frameworks MVC
Les frameworks
▪ Framework = cadre de développement.
▪ Un Framework peut inclure :
✓ Un ensemble de classes généralement regroupées sous la forme de bibliothèques
pour proposer des services plus ou moins sophistiqués
✓ Un cadre de conception reposant sur les design patterns pour proposer tout ou
partie d'un squelette d'application
✓ Des recommandations sur la mise en œuvre et des exemples d'utilisation
✓ Des normes de développement
✓ Des outils facilitant la mise en œuvre
S. Elkosantini 6
3
27/10/2023
Frameworks MVC
Les frameworks
Mais pourquoi utiliser les frameworks
▪ L'objectif d'un framework est de faciliter la mise en ouvre des fonctionnalités de
son domaine d'activité
▪ Il doit permette au développeur de se concentrer sur les tâches spécifiques de
l'application à développer plutôt que sur les tâches techniques récurrentes.
S. Elkosantini 7
Frameworks MVC
Les frameworks
▪ Exemples de tâches techniques récurrentes telles que :
✓ l'architecture de base de l'application
✓ l'accès aux données
✓ l'internationalisation
✓ la journalisation des événements (logging)
✓ la sécurité (authentification et gestion des rôles)
✓ le paramétrage de l'application
✓ ...
S. Elkosantini 8
4
27/10/2023
Frameworks MVC
Les frameworks
▪ La mise en œuvre d'un framework permet ainsi de :
✓ Capitaliser le savoir-faire sans "réinventer la roue"
✓ Accroître la productivité des développeurs une fois le framework pris en main
✓ Homogénéiser les développements des applications en assurant la réutilisation de
composants fiables
✓ Faciliter la maintenance notamment évolutive des applications
S. Elkosantini 9
Frameworks MVC
Les frameworks
▪ Types de frameworks:
✓ Frameworks MVC: Struts, spring, JavaServer Faces, Stripes, etc.
✓ Framework persistances: Hibernate, JAXB, iBATIS, etc.
Le framework MVC Spring Boot
S. Elkosantini 10
10
5
27/10/2023
Frameworks MVC
Le framework Spring
▪ Basé sur l’ API Servlet de Java JEE
▪ Permettant de simplifier le développement d’applications web en respectant le
patron de conception MVC 2
S. Elkosantini 11
11
Frameworks MVC
Le framework Spring boot
▪ Architecture Spring Boot
S. Elkosantini 12
12
6
27/10/2023
Frameworks MVC
Le framework Spring boot
▪ Pour éviter les problèmes de Spring, Spring Boot propose :
✓ Les démarreurs (starter) : un démarreur est une dépendance, contenant un paquet de dépendance,
permettant de réaliser un type de projet (Web, Rest...). Ainsi, le développeur n’a plus à gérer, lui
même le problème d’incompatibilité entre les versions.
✓ l’auto-configuration : c’est-à-dire laisser Spring Boot configurer le projet à partir de
dépendances ajoutées par le développeur
S. Elkosantini 13
13
Frameworks MVC
Le framework Spring boot
▪ Pour exécuter le projet sous Eclipse:
▪ Ajouter le plugin Spring tools (ou utiliser [Link] pour créer le projet
▪ Faire un clic droit sur le projet et aller dans Run As et cliquer sur Spring Boot App ou faire un
clic droit sur la classe xxxApplication dans Package Explorer, aller dans Run As et cliquer sur
Java Application
ou
S. Elkosantini 14
14
7
27/10/2023
Frameworks MVC
Le framework Spring boot
▪ Structure d’un projet Spring Boot (Sous eclipse)
Classes
Fichiers de configuration
Configuration des
dépendances et du projet
S. Elkosantini 15
15
Frameworks MVC
Le framework Spring boot
▪ Configuration des dépendances ([Link])
✓ Exemple: pour créer un projet web, il faut ajouter la dépendance suivante
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
▪ La dépendance spring-boot-starter-web permet donc de créer un projet web contenant :
✓ un serveur Apache Tomcat
✓ Spring Framework et Spring MVC
✓ les validateurs d’Hibernate
✓ jackson pour les données au format JSON
✓ ...
S. Elkosantini 16
16
8
27/10/2023
Frameworks MVC
Le framework Spring boot
▪ Configuration des dépendances ([Link])
La version de Maven utilisé
Le projet utilise ici le parent "spring-boot-starter-
parent" de Spring Boot en version 2.7.0"
Le projet hérite des configurations de dépendances et
des plugins Maven définis dans ce parent
Des informations sur le projet
Des informations complémentaires du projet
S. Elkosantini 17
17
Frameworks MVC
Le framework Spring boot
▪ Configuration des dépendances ([Link])
Liste des dépendances
Le groupId et l’artifactID de
la dépendance
S. Elkosantini 18
18
9
27/10/2023
Frameworks MVC
Le framework Spring boot
▪ Configuration des dépendances ([Link])
Spécifie la configuration du processus de construction (build) du
projet.
Le groupId et l’artifactID de
la dépendance
Configuration la gestion des dépendances
S. Elkosantini 19
19
Frameworks MVC
Le framework Spring boot
Le point de démarrage de l’application: classe de bootstraping
package [Link];
import [Link];
import [Link];
@SpringBootApplication Annotation indiquant que c’est la classe principale
public class DemoApplication { Démarre le conteneur Spring et renvoi
l’objet ApplicationContext
public static void main(String[] args) {
[Link]([Link], args);
} }
Définition d’un Bean
S. Elkosantini 20
20
10
27/10/2023
Frameworks MVC
Le framework Spring boot
▪ Les annotations pour définir les beans :
✓ @Component, @Service, or @Repository (chapitres suivants)
✓ @Configuration et utiliser @Bean pour chaque méthode de la classe
S. Elkosantini 21
21
Frameworks MVC
Inversion de dépendances
▪ Toute application Java est une composition d'objets qui collaborent pour rendre
le service attendu
Implémentation
Problèmes ??
S. Elkosantini 22
22
11
27/10/2023
Frameworks MVC
Inversion de dépendances
L’objectif est de diminuer le couplage entre deux ou plusieurs
objets
▪ Solution: Injection de dépendances par les interfaces
S. Elkosantini 23
23
Frameworks MVC
Inversion de dépendances
▪ Exemple Qui va se charger de créer de cette instance ?
S. Elkosantini 24
24
12
27/10/2023
Frameworks MVC
Inversion de dépendances
▪ Exemple : solution 1
Initialisation dans un constructeur
Problème de couplage fort
S. Elkosantini 25
25
Frameworks MVC
Inversion de dépendances
▪ Exemple : solution 2 Injection de la dépendance par le constructeur
S. Elkosantini 26
26
13
27/10/2023
Frameworks MVC
Inversion de dépendances dans spring boot : Spring IoC
▪ Inversion of Control (IoC): Injection par mutateur
✓ Le flux de contrôle est orienté du code tiers vers le code de l’application
▪ Retour à l’exemple: Besoin d’un composant qui :
✓ Crée une instance des classes ReservationSalleDao et ReservationSalleService
✓ Réaliser l’injection de l’objet de type ReservationSalleDao
Conteneur IoC (IoC container).
S. Elkosantini 27
27
Frameworks MVC
Inversion de dépendances dans spring boot : Spring IoC
▪ Inversion of Control (IoC): Injection par mutateur
Conteneur IoC (IoC container).
▪ Accueille un ensemble d’objets dont il a la responsabilité de gérer le cycle de vie:
✓ Spring Framework est avant tout un conteneur IoC
Configuration des objets et de l’application
(fichier XML, annotations, classes de
configuration)
S. Elkosantini 28
28
14
27/10/2023
Frameworks MVC
Le framework Spring boot
▪ Pour exécuter le projet sous Eclipse:
2021-01-17 13:00:50.328 INFO 10368 --- [ main] [Link] :
Tomcat started on port(s): 9090 (http) with context path ''
▪ Pour changer le port par défaut :
Ajouter la ligne suivante dans le fichier resources/[Link]
[Link]=9090
S. Elkosantini 29
29
Frameworks MVC
Le framework Spring boot
▪ Pour exécuter le projet sous Eclipse: Aller à [Link]
S. Elkosantini 30
30
15
27/10/2023
Frameworks MVC
Le framework Spring boot
▪ Le contrôleur:
✓ un des composants du modèle MVC
✓ une classe Java annotée par Controller (ou RestController)
✓ Il reçoit une requête du contrôleur frontal et communique avec le modèle pour préparer et
retourner une réponse
S. Elkosantini 31
31
Frameworks MVC
Le framework Spring boot
▪ Le contrôleur:
package [Link];
import [Link];
import [Link];
@Controller Pour indiquer qu’il s’agit d’un contrôleur
public class appControl {
La méthode appelé par GET et
@GetMapping(value = "/index")
avec la route « index »
public void sayHello() {
[Link]("Hello World!");
}
}
Plusieurs routes pour la même
@GetMapping(value = {"/index", "/"}) méthode
S. Elkosantini 32
32
16
27/10/2023
Frameworks MVC
Le framework Spring boot
▪ Le contrôleur:
Pensez à ajouter DevTools permettant de redémarrer le projet après
chaque changement
Aller à Spring > Add DevTools
➔ Une nouvelle dépendance est ajoutée dans [Link]
<dependency> [Link]
<groupId>[Link]</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
S. Elkosantini 33
33
Frameworks MVC
Le framework Spring boot
▪ Les vues
✓ Permettent d’afficher des données
✓ Communiquent avec le contrôleur pour récupérer ces données
✓ Doivent être créer dans le répertoire views dans src/main/webapp/ (qu’il faut le créer).
Ajouter les dépendances : spring-boot-starter-web et tomcat-embed-jasper
<dependency>
<groupId>[Link]</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
Faire la mise à jour du projet après l’ajout des nouvelles dépendances
Maven > Update project
S. Elkosantini 34
34
17
27/10/2023
Frameworks MVC
Le framework Spring boot
▪ Les vues
Ajouter les dépendances à Apache Tomcat et JSTL dans [Link]
(voir lien [Link]
Par exemple JSTL :
<dependency>
<groupId>[Link]</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
S. Elkosantini 35
35
Frameworks MVC
Le framework Spring boot
▪ Les vues
Nouveau contenu d’[Link]
[Link]=/views/
[Link]=.jsp
Toutes les propriétés possibles de [Link] sont disponibles ici :
[Link]
[Link]
S. Elkosantini 36
36
18
27/10/2023
Frameworks MVC
Le framework Spring boot
▪ Les vues
Nouveau contenu du contrôleur
package [Link];
import [Link];
import [Link];
@Controller
public class appControl { Enlever l’extension .jsp
@GetMapping(value = "/index")
public String sayHello() {
return "index";
}
}
S. Elkosantini 37
37
Frameworks MVC
Le framework Spring boot
▪ Echange les beans entre les vues et les contrôleurs
Coté contrôleur
package [Link];
import [Link];
import [Link];
import [Link];
@Controller
public class AppControl { Une interface qui permet
@GetMapping(value = "/index") d’envoyer des attributs à la
public String sayHello(Model model) { vue
[Link]("nomP", "PC");
return "index";
}
} Redirection vers la racine
redirect:/
S. Elkosantini 38
38
19
27/10/2023
Frameworks MVC
Le framework Spring boot
▪ Echange les beans entre les vues et les contrôleurs
Coté Vue
<body>
<h1>Gestion de stock</h1>
Le nom du produit est ${ nomP }
</body>
S. Elkosantini 39
39
Frameworks MVC
Le framework Spring boot
▪ Echange les beans entre les vues et les contrôleurs
Coté contrôleur (ou en utilisant l’interface ModelAndView)
public ModelAndView sayHello() {
ModelAndView mv= new ModelAndView("index");
[Link]("nomP", "PC");
return mv;
}
Une classe qui permet
d’indiquer à la fois le modèle
et la vue
S. Elkosantini 40
40
20
27/10/2023
Frameworks MVC
Le framework Spring boot
▪ Echange les beans entre les vues et les contrôleurs
Lecture de paramètres des requêtes (/chemin?param1=value1)
public ModelAndView sayHello(@RequestParam(value="nom") String
nom) {
ModelAndView mv= new ModelAndView("index");
[Link]("nomP", nom);
return mv;
permet de recupérer la valeur du paramétre de la
}
requète HTTP est de l’affecter au paramètre nom
de la méthode
S. Elkosantini 41
41
Frameworks MVC
Le framework Spring boot
▪ Echange les beans entre les vues et les contrôleurs
Lecture de paramètres des requêtes (/chemin?param1=value1)
Et si on ne passe pas de paramètres ?
public ModelAndView sayHello(@RequestParam(value="nom", required =
false, defaultValue = "PC") String nom) {
ModelAndView mv= new ModelAndView("index");
[Link]("nomP", nom);
return mv; Paramètre requis
}
Valeur par défaut
S. Elkosantini 42
42
21
27/10/2023
Frameworks MVC
Le framework Spring boot
▪ Echange les beans entre les vues et les contrôleurs
Lecture de variables de chemins (/chemin/value)
@GetMapping(value = "/afficheProduit/{nom}")
public ModelAndView afficheProduit(@PathVariable String nom) {
ModelAndView mv= new ModelAndView("index");
[Link]("nomP", nom);
return mv;
} variables de chemins
Tester avec [Link]
S. Elkosantini 43
43
22