0% ont trouvé ce document utile (0 vote)
455 vues23 pages

9 - Spring MVC - REST

Le document décrit Spring MVC, y compris ses concepts de base tels que DispatcherServlet, Controller, Model, View et ViewResolver. Il explique également le cycle de vie d'une requête HTTP dans Spring MVC. Enfin, il présente un TP sur la création d'une application Spring Boot avec Spring Data JPA et des services REST exposés avec Spring MVC.

Transféré par

malek attoini
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
455 vues23 pages

9 - Spring MVC - REST

Le document décrit Spring MVC, y compris ses concepts de base tels que DispatcherServlet, Controller, Model, View et ViewResolver. Il explique également le cycle de vie d'une requête HTTP dans Spring MVC. Enfin, il présente un TP sur la création d'une application Spring Boot avec Spring Data JPA et des services REST exposés avec Spring MVC.

Transféré par

malek attoini
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 23

SPRING MVC

UP ASI
Bureau E204

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 1


Plan du Cours

– Spring MVC

– Concepts de base (DispatcherServlet, Controller, Model, View,


ViewResolver, ...)

– Cycle de vie d’une requête.

– TP Spring Boot + Spring Data JPA + Spring MVC (REST)

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – 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éveloppent de la couche Web (Web


Services REST + Contrôleur + Service + Repository) dans ce cours.

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 3


Spring WEB

• 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 nos intéresser à Spring MVC.

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – 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 s'intègre avec les autres Frameworks Web tel que JSF, Struts, ...

• Spring MVC n’offre pas une technologie de vue.

• Spring MVC est construit en se basant sur la spécification JavaEE : Java


Servlet.
© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 5
Les Concepts de Base

• DispatcherServlet

• Controller

• Model

• View

• ViewResolver

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 6


DispatcherServlet

• DispatcherServlet est un servlet qui hérite de HttpServlet.

• DispatcherServlet joue le rôle du “Front Controller”. Le bean Spring que vous créez
et qui est annoté @Controller est le “Controller”.

• DispatcherServlet gère toutes les requêtes et invoque les beans adéquats.

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 7


Controller
@Controller
public class UserControlImpl {

@Autowired
IUserService userService;

@RequestMapping("/sayHello")
public String welcome(Map<String, Object> model, @RequestParam("myName") String
name) {
model.put("receivedName", name);
return "helloPage";
}

@RequestMapping(value = "/", method = RequestMethod.GET)


public String users(User user, Model model) {
model.addAttribute("user", new User());
model.addAttribute("users", userService.retrieveAllUsers());
return "users";
}
© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 8
View

• Une View (Vue) génère un output web, c.à.d., du code compréhensible par le
navigateur.
• Exemple de technologie de vue : JSF, JSP, Velocity, Thymeleaf.

• Le Controller retourne généralement le nom de la vue.


• Le ViewResolver doit sélectionner la vue en se basant sur son nom.
• Exemple : une vue en JSP :
<html>
<head>
<title>Calculateur de Poids idéal!!</title>
</head>
<body>
<div>
<p>DETERMINEZ VOTRE POIDS IDEAL:</p>
<form method="POST" name="monForm"action="${pageContext.request.contextPath}/calculate">
<p>Votre Taille en Centimètres: <input type="text" name="height" required /> <br/></p>
<input type="submit" class="button" value="CalculerPoids" /> <br/>
</form>
</div>
</body>
</html>
© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 9
ViewResolver
• Le ViewResolver prend le nom de la vue “index” par exemple, et génère le chemin (path)
relatif à webapp: /views/index.jsp

@EnableWebMvc
@ComponentScan(basePackages={"…", "…"})
public class MvcConfig {

@Bean
public ViewResolver simpleViewResolver(){
InternalResourceViewResolver vr = new InternalResourceViewResolver();
vr.setPrefix("/views/"); //Relatif a webapp
vr.setSuffix(".jsp");
return vr;
}
}

• Avec Spring Boot, il suffit d mettre à jour application.properties (pas besoin de créer le bean
de configuration MvcConfig ci-dessus) :

• #Web configuration
• spring.mvc.view.prefix=/views/
• spring.mvc.view.suffix=.jsp

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 10


Url de notre Application Web

• Dans ce fichier de properties ajouter les lignes suivantes, pour définir l’url de
notre application :

• #http://localhost:8081/SpringMVC/servlet/sayHello?myName=Walid

• #Server configuration
• server.port=8081
• server.servlet.context-path=/SpringMVC
• spring.mvc.servlet.path=/servlet

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 11


Cycle de Vie d’une requête HTTP

• Exemple : http://localhost:8081/SpringMVC/servlet/sayHello

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 12


TP - Spring : Boot – Core – Data JPA – MVC (REST)

• Nous allons commencer par exposer des Web Service REST : Spring :
Boot – Core – Data JPA – MVC (REST)

• (Par la suite, nous allons étudier les JSF, et donc nous allons pouvoir à
ce moment là créer une application une complète : Spring : Boot –
Core – Data JPA – MVC (JSF)).

• Vous avez déjà créé un projet : Spring (Boot – Core – Data JPA)
avec un CRUD sur l’entité User. Ce projet a été test avec JUnit.
• Nous allons reprendre le même projet et exposer ces méthodes
(CRUD) avec des Web Servie REST.

• Ces Web Services seront testé avec Postman.

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 13


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.

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 14


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, …) :

• #http://localhost:8081/SpringMVC/servlet/sayHello?myName=Walid

• #Server configuration
• server.servlet.context-path=/SpringMVC
• spring.mvc.servlet.path=/servlet
• server.port=8081

• ### DATABASE ###


• #spring.datasource.driver-class-name=com.mysql.jdbc.Driver
• spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&useJDBCCompliantTime
zoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
• spring.datasource.username=root
• spring.datasource.password=
• ### JPA / HIBERNATE ###
• spring.jpa.show-sql=true
• spring.jpa.hibernate.ddl-auto=update
• spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 15


TP - Spring : Boot – Core – Data JPA – MVC (REST)

• #Web configuration
• spring.mvc.view.prefix=/views/
• spring.mvc.view.suffix=.jsp

• #logging configuration
• logging.file=C:\logs\springboot.log
• logging.level.root=INFO
• logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %-5level - %logger{36} - %msg%n

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 16


TP - Spring : Boot – Core – Data JPA – MVC (REST)

• Créer les package tn.esprit.spring.control

• Créer le bean Spring UserRestController annoté @RestController

• Créer les méthodes nécessaires pour exposer le CRUD (voir pages


suivantes) :

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 17


TP - Spring : Boot – Core – Data JPA – MVC (REST)

• @RestController
• public class UserRestControlImpl {

• @Autowired
• IUserService userService;

• // http://localhost:8081/SpringMVC/servlet/retrieve-all-users
• @GetMapping("/retrieve-all-users")
• @ResponseBody
• public List<User> getUsers() {
• List<User> list = userService.retrieveAllUsers();
• return list;
• }

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 18


TP - Spring : Boot – Core – Data JPA – MVC (REST)

• // http://localhost:8081/SpringMVC/servlet/retrieve-user/{user-id}
• @GetMapping("/retrieve-user/{user-id}")
• @ResponseBody
• public User retrieveUser(@PathVariable("user-id") String userId) {
• return userService.retrieveUser(userId);
• }

• // Ajouter User : http://localhost:8081/SpringMVC/servlet/add-user


• @PostMapping("/add-user")
• @ResponseBody
• public User addUser(@RequestBody User u) {
• User user = userService.addUser(u);
• return user;
• }

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 19


TP - Spring : Boot – Core – Data JPA – MVC (REST)

• // http://localhost:8081/SpringMVC/servlet/remove-user/{user-id}
• @DeleteMapping("/remove-user/{user-id}")
• @ResponseBody
• public void removeUser(@PathVariable("user-id") String userId) {
• userService.deleteUser(userId);
• }

• // http://localhost:8081/SpringMVC/servlet/modify-user
• @PutMapping("/modify-user")
• @ResponseBody
• public User modifyUser(@RequestBody User user) {
• return userService.updateUser(user);
• }

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 20


TP - Spring : Boot – Core – Data JPA – MVC (REST)

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 21


TP - Spring : Boot – Core – Data JPA – MVC (REST)

• Tester l’ensemble des méthodes exposées avec Postman

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 22


SPRING MVC

Si vous avez des questions, n’hésitez pas à nous


contacter :

Département Informatique
UP ASI
Bureau E204

© 2020-2021 – ESPRIT – Module Architecture des SI II (Spring + JavaEE) – Spring MVC 23

Vous aimerez peut-être aussi