TD n°0 & TD n°1

Notions abordées :

  • Contrôleurs
  • Routage
  • Vues
  • Session et contexte

0.1. Création du repository git

  1. Créer un dossier springboot-tds ;
  2. Publier springboot-tds sur github en tant que nouveau repository ;
  3. Ajouter jcheron à la liste des colaborators de ce projet ;
  4. Publier (commit and push) régulièrement sur github.

Création

Créer le projet td0 :

  • Group : s4.spring
  • Artifact : td0
  • Packaging : War
  • Description : Gestion d'items
  • Dependencies : Web, Devtools, Mustache

Configurer le projet dans application.properties, pour que le contextPath soit td0/, configurer Mustache

Vues

On utilisera Semantic-UI pour la partie présentation.

Créer un template header.html :

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Gestion d'items</title>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/2.7.8/semantic.min.css">
</head>
<body>
	<div class="ui container">

Créer un template footer.html :

</div><!-- Fermeture de la div ui-container -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fomantic-ui/2.7.8/semantic.min.js"></script>
</body>
</html>

Objet métier

Créer une classe Element dans s4.spring.models :

Ajouter :

  • Des accesseurs (getters/setters) sur les 2 membres
  • Sur-définir la méthode equals pour que 2 items du même nom soit considérés comme égaux

Initialisation d'un objet en session

L'annotation @SessionAttributes permet de définir des variables de session. Combinée à @ModelAttribute, elle permet l'initialisation correcte de la variable de session.

@SessionAttributes("items")
public class MainController {

	@ModelAttribute("items") 
	public List<Element> getItems(){
		return new ArrayList<>();
	}
}

Routes

AdresseDescription
items/ Affiche la liste des éléments stockée en Session + 1 bouton pour ajouter un élément (/items/new)
items/new Afficher un formulaire d'ajout d'élément (seulement son nom), la validation va vers /items/addNew puis redirige vers /items
items/inc/{nom} Incrémente l'évaluation de l'élément de 1, puis redirige vers /items
items/dec/{nom} Décrémente l'évaluation de l'élément de 1, puis redirige vers /items

Redirection

Effectue l'ajout, puis redirige la réponse vers la route /items

	@PostMapping("items/addNew")
	public RedirectView addNew(@RequestParam String nom) {
		...
		return new RedirectView("/items/");
	}

Ajouts/modifications

  • Ajouter la route items/delete/{nom} pour supprimer un item par son nom
  • Restructurer l'application :
    • Ajouter une classe s4.spring.models.Categorie ayant un libelle et pouvant comporter une liste d'items
    • Modifier la classe Categorie pour qu'elle puisse gère ses items (accès, ajout, suppression…)
    • Mettre en session la liste des catégories, initialisée par défaut avec les catégories Amis, Famille, Professionnels
    • Afficher sur la route / les catégories et les items contenus (on pourra utiliser le composant Tab)

Tests, intégration, déploiement

Tests unitaires et tests d'intégration

Utilisation de MockMvc:

package s4.spring.td1;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;

@SpringBootTest
@AutoConfigureMockMvc
class Td1ApplicationTests {
	@Autowired
	private MockMvc mvc;

	@Test
	void contextLoads() {
	}

	@Test
	void loadHello() throws Exception {
		this.mvc.perform(get("/")).andExpect(content().string("Hello world!"));
	}
}

Intégration continue

  • Créer un compte ou se connecter sur Travis-ci
  • Ajouter le repository github
  • Créer le fichier de configuration .travis.yml à la racine du repo git

language: java
cache:
  directories:
    - '$HOME/.m2/repository'
before_install:
  - chmod +x mvnw
script:
  - ./mvnw install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
  - ./mvnw test -B

Ajouter le build status badge dans le fichier README.md :

[![Build Status](https://travis-ci.org/<username>/<reponame>.svg?branch=master)](https://travis-ci.org/<username>/<reponame>)

Publication, mise en production

  • Créer un compte sur Heroku
  • Ajouter une application de nom <prenom>.<nom>
  • La connecter à github et activer le déploiement automatique (si les tests passent)
framework-web/spring/td0.txt · Dernière modification: 2020/01/21 11:09 par jcheron
GNU Free Documentation License 1.3
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0