Vous êtes sur la page 1sur 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