Spring Boot : encore de l’abstraction
Pour eviter les problémes de Spring MVC, Spring Boot propose :
Les demarreurs ( starter) : un demarreur est une dépendance, contenant un paquet de dependance, permettant de réealiser un type de projet (Web, Rest ). Ainsi, le developpeur n’a plus´ à gerer, lui méme le problème d’incompatibilité entre les versions.´
l’auto-configuration : c’est-a-dire laisser Spring Boot configurer le projet a partir de dépendances ajoutées par le développeur.éxemple, pour creer un projet web, il faut ajouter la dépendance´ Spring Boot suivante :
spring-boot-starter-web
Exemple, pour creer un projet web, il faut ajouter la dépendance´ Spring Boot suivante :
spring-boot-starter-web
Exemple, pour creer un projet web, il faut ajouter la dépendance´ Spring Boot suivante :
La dependance spring-boot-starter-web inclut les six dependances suivantes :
spring-boot-starter
spring-boot-starter-json
spring-boot-starter-tomcat
org.hibernate.validator
hibernate-validator
org.springframework
spring-web
org.springframework
spring-webmvc
org.apache.tomcat.embed
tomcat-embed-jasper
javax.servlet
jstl
org.apache.tomcat.embed
tomcat-embed-jasper
Le point de demarrage de l’application
package;
import.SpringApplication;import.autoconfigure.SpringBootApplication;
@SpringBootApplicationpublic classFirstSpringBootApplication {
public static voidmain(String[] args) {
(FirstSpringBootApplication.class, args);
}
}
Explication
SpringApplication : la classe de demarrage d’une application Spring et qui va créer´ une instance de la classe ApplicationContext
ApplicationContext : l’interface centrale d’une application Spring permettant de fournir des informations de configuration a l’application.`
@SpringBootApplication : contient les 3 annotations suivantes
@Configuration : fait partie du noyau de Spring Framework et indique que la classe annote peut contenir des méhodes annotées´ par @Bean. Ainsi,Spring Container peut traiter la classe et gen´ erer des beans qui seront utilis´ es par l’application.´
@EnableAutoConfiguration : permet, au demarrage de´ Spring, de genérer automatiquement les configurations´ necessaires en fonction des d´ ependances ajoutées.´
@ComponentScan : demande de scanner ce package contenant de Beans de configuration
Allons donc à http://localhost:8080/Resultat : message d’erreur´
On a creé un projet web, mais on n’a aucune page HTML, JSP ou´ autre
Spring Boot, comme Spring MVC, implemente le patron de conception MVC, donc il nous faut au moins un controleur et une vue.ˆ
Le controleurˆ
un des composants du modele MVC` une classe Java annotee par´ Controller ou RestController
Il rec¸oit une requete du contrˆ oleur frontal et communique avec le modele pour pr` eparer et retourner une reponse a la vue`
Remplac¸ons le contenu du HomeController par le code suivant :
package.controller;
importorg.springframework.stereotype.Controller;import.annotation.RequestMapping;import.annotation.RequestMethod;
@Controllerpublic classHomeController {
@RequestMapping(value = "/hello", method = )public voidsayHello() {
.println("Hello World!");
}
}
Explication
La premiere ligne indique que notre contrôleur se trouve dans leˆ package .controller
Les trois imports concernent l’utilisation des annotations
L’annotation @Controller permet de declarer que la classe´ suivante est un controleur Springˆ
La valeur de l’annotation @RequestMapping indique la route
(/hello ici) et la methode permet d’indiquer la m´ ethode HTTP´
(get ici, c’est la methode par d´ efaut). On peut aussi utiliser le´
raccourci @GetMapping(value = "/url")
Remplac¸ons le contenu du HomeController par le code suivant :
package.controller; importorg.springframework.stereotype.Controller;import.annotation.GetMapping; @Controllerpublic classHomeController { @GetMapping(value = "/hello")public voidsayHello() { .println("Hello World!"); } } |
}
Ou ajouter la dependance Maven suivante´
Les vues sous Spring
Permettent d’afficher des donnees´
Communiquent avec le controleur pour rˆ ecupérer ces données´
Doivent etre crèées dans le répertoire views dans WEB-INF
Peuvent etre crˆ eées avec un simple code´ JSP, JSTL ou en utilisant un moteur de template comme Thymeleaf
Appelons a partir du contrôleurˆ
package.controller; importorg.springframework.stereotype.Controller;import.annotation.GetMapping ; @Controllerpublic classHomeController { @GetMapping(value = "/hello")publicString sayHello() {return""; } } |
Dans le return, on precise le nom de la vue´ a afficher (ici c’est` )
Nouveau contenu d’application.properties
.prefix=/views/
Toutes les proprietés possibles de application.properties sont ici :
package.controller; importorg.springframework.stereotype.Controller;import.annotation.GetMapping ; @Controllerpublic classHomeController { @GetMapping(value = "/hello")publicString sayHello() {return"hello"; } } |
N’oublions pas de deplacer´ dans views qu’il faut le creer´ dans webapp
Comment le controleur envoie des donnˆ ees´ a la vue?`
package.controller; importorg.springframework.stereotype.Controller;import.Model;import.annotation.GetMapping ; @Controllerpublic classHomeController { @GetMapping(value = "/hello")publicString sayHello(Model model) { model.addAttribute("nom", "Wick");return"hello"; } } Comment la vue recup´ ere les données envoy´ ees par le contr´ oleur?ˆ
Exactement comme dans la plateforme JEE
Comment la vue recup´ ere les données envoy´ ees par le contr´ oleur?ˆ
Exactement comme dans la plateforme JEE Ajouter isELIgnored="false" s’il ne reconnait pas les Expressions de langage Une deuxieme fac¸on en utilisant` ModelAndView
Une troisieme fac¸on en utilisant` ModelAndView
Model vs ModelMap vs ModelAndView ModelMap : est une classe implementant l’interface Map et permettant d’ajouter des attributs sous forme de key - value et de les passer a la vue. On peut donc chercher unélément´ selon la valeur de la cle ou de la valeur´ ModelAndView : est un conteneur a la fois d’un` ModelMap pour les attributs et d’un View Object. Le controleur pourra ainsiˆ retourner une seule valeur. Comment le controleur rˆ ecupére les param` etres de requéte?ˆ
Pour tester, il faut aller sur l’URL localhost:8080/hello?nom=wick Explication @RequestParam(value = "nom") String nom : permet de recup´ erer la valeur du param etre de la requéte HTTP est deˆ l’affecter au parametre` nom de la methode.´ Il est possible aussi de preciser une valeur par d efaut´
Comment le controleur rˆ ecupére une variable de chemin?`
Pour tester, il faut aller sur l’URL localhost:8080/hello/wick Ou ajouter les dependances suivantes´
Pour plus de details : /jpa/docs/current/reference/html/ On peut egalement ecrire des requ´ etes HQL (Hiberenate Query Language) avecˆ l’annotation Query
Ou ajouter la dependance Maven suivante Configurons application.properties-names=jsp/* spring.thymeleaf.prefix=/views/ -names=thymeleaf/* return "nomVue"; Dans les controleurs, remplacer chaque appel d’une page JSPˆ return "nomVue"; Parreturn "jsp/nomVue"; 67 / 76 Dans les controleurs, remplacer chaque appel d’une page JSPˆ return "nomVue"; Par return "jsp/nomVue"; Pour appeler une page Thymeleaf return "thymeleaf/nomVue";
Pour tester, creer un contr´ oleurˆ ThymeleafController
La vue
La vue
En allant , Hello World! est affiche´ Preciser les sources et l’encodage de messages dans´ application.propertiesspring.messages.encoding=UTF-8 spring.messages.basename=messages Preciser les sources et l’encodage de messages dans´ application.properties spring.messages.encoding=UTF-8 spring.messages.basename=messages Contenu de messages.properties (dans src/main/resources) =Bonjour tout le monde Preciser les sources et l’encodage de messages dans´ application.properties spring.messages.encoding=UTF-8 spring.messages.basename=messages Contenu de messages.properties (dans src/main/resources) =Bonjour tout le monde Contenu de messagesen.properties (dans src/main/resources) =Hello world Preciser les sources et l’encodage de messages dans´ application.properties spring.messages.encoding=UTF-8 spring.messages.basename=messages Contenu de messages.properties (dans src/main/resources) =Bonjour tout le monde Contenu de messagesen.properties (dans src/main/resources) =Hello world Dans une vue (Thymeleaf), ajouter <h1 th:text= "#{ }">h1>
Creons la classe de configuration MvcConfig dans .configuration
En allant sur http://localhost:8080/thymeleaf?language=en , le resultatést : Hello world En allant sur http://localhost:8080/thymeleaf?language=en , le resultatést : Hello world En allant sur http://localhost:8080/thymeleaf?language=fr , le resultatést : Bonjour tout le monde En allant sur http://localhost:8080/thymeleaf?language=en , le resultatést : Hello world En allant sur http://localhost:8080/thymeleaf?language=fr , le resultatést : Bonjour tout le monde En allant sur http://localhost:8080/thymeleaf?language=it , le resultatést toujours le meme :ˆ Bonjour tout le monde Considerons le contr´ oleurˆ PersonneRestController
Modifions le point d’entree (qui impl´ ementera l’interface´ ApplicationRunner) pour ajouter des tuples dans la base de donnees avant d’appeler nos services REST´
On peut aussi modifier le chemin de contexte a partir de la classe de démarrage´ public static voidmain(String[] args) { System.setProperty("server.servlet.context-path", "/firstspringboot "); (FirstSpringBootApplication.class, args); } } |