Cette application de gestion de tâches (To-Do App) est une démonstration pédagogique complète de Spring MVC. Elle illustre tous les concepts fondamentaux de l'architecture MVC dans le contexte de Spring Boot.
Cette application démontre :
- Introduction à Spring MVC - Architecture et principes de base
- Architecture MVC - Séparation claire des responsabilités
- Contrôleurs - Gestion des requêtes HTTP
- Vues - Rendu avec Thymeleaf
- Modèles - Représentation des données
- Configuration - Configuration Spring Boot et MVC
L'application suit le pattern MVC (Model-View-Controller) :
┌─────────────┐
│ Vue (View) │ ← Templates Thymeleaf (HTML)
└──────┬──────┘
│
┌──────▼──────────────┐
│ Contrôleur │ ← @Controller, @GetMapping, @PostMapping
│ (Controller) │
└──────┬──────────────┘
│
┌──────▼──────────────┐
│ Service Layer │ ← Logique métier
└──────┬──────────────┘
│
┌──────▼──────────────┐
│ Modèle (Model) │ ← Classes POJO (Task)
└─────────────────────┘
src/main/java/sn/esmt/isi/demospringmvc/
├── controller/ # Contrôleurs MVC
│ ├── HomeController.java
│ └── TaskController.java
├── model/ # Modèles de données
│ └── Task.java
├── service/ # Couche service (logique métier)
│ ├── TaskService.java
│ └── TaskServiceImpl.java
└── DemoSpringMvcApplication.java
src/main/resources/
├── templates/ # Vues Thymeleaf
│ ├── home.html
│ └── tasks/
│ ├── list.html
│ ├── form.html
│ └── view.html
└── static/
└── css/
└── style.css
@Controller
@RequestMapping("/tasks")
public class TaskController {
// Gestion des requêtes HTTP
}Annotations utilisées :
@Controller: Marque la classe comme un contrôleur Spring MVC@RequestMapping: Définit le chemin de base pour toutes les méthodes@GetMapping: Traite les requêtes HTTP GET@PostMapping: Traite les requêtes HTTP POST@PathVariable: Extrait des variables de l'URL@ModelAttribute: Lie les paramètres de formulaire à un objet
public class Task {
private Long id;
private String title;
private String description;
private boolean completed;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
// getters, setters...
}Templates HTML avec expressions Thymeleaf :
<div th:each="task : ${tasks}">
<h5 th:text="${task.title}">Titre</h5>
<p th:text="${task.description}">Description</p>
</div>@Service
public class TaskServiceImpl implements TaskService {
// Logique métier
}@Autowired
public TaskController(TaskService taskService) {
this.taskService = taskService;
}L'application offre les opérations CRUD complètes :
- ✅ Créer une nouvelle tâche
- 📖 Lire la liste des tâches et voir les détails
- ✏️ Modifier une tâche existante
- 🗑️ Supprimer une tâche
- ✔️ Marquer une tâche comme terminée/en cours
- Spring Boot 4.0.0 - Framework principal
- Spring MVC - Framework web MVC
- Thymeleaf - Moteur de templates pour les vues
- Bootstrap 5.3 - Framework CSS pour le design
- Bootstrap Icons - Icônes
- Maven - Gestion des dépendances
- Java 17 - Langage de programmation
- Java 17 ou supérieur
- Maven 3.6 ou supérieur
- Cloner le projet
git clone <repository-url>
cd DemoSpringMvc- Compiler le projet
./mvnw clean compile- Lancer l'application
./mvnw spring-boot:run- Accéder à l'application
http://localhost:8080
./mvnw test- Séparation des préoccupations (Separation of Concerns)
- Chaque couche a une responsabilité unique et bien définie
- Facilite la maintenance et les tests
- Point d'entrée de l'application
- Gèrent les requêtes HTTP et les réponses
- Orchestrent l'interaction entre le modèle et la vue
@GetMapping("/tasks")→ Liste des tâches@GetMapping("/tasks/{id}")→ Détails d'une tâche@PostMapping("/tasks")→ Création d'une tâche@PostMapping("/tasks/{id}")→ Mise à jour d'une tâche
Navigateur → Contrôleur → Service → Modèle
↓
Vue (Template)
↓
Navigateur
- Configuration simplifiée avec Spring Boot
- Injection de dépendances automatique
- Testabilité facile
- Support de nombreux moteurs de templates
- Gestion des erreurs intégrée
@PostMapping
public String createTask(@ModelAttribute Task task, RedirectAttributes redirectAttributes) {
Task createdTask = taskService.createTask(task);
redirectAttributes.addFlashAttribute("successMessage",
"Tâche créée avec succès: " + createdTask.getTitle());
return "redirect:/tasks";
}@GetMapping
public String listTasks(Model model) {
model.addAttribute("tasks", taskService.getAllTasks());
model.addAttribute("pageTitle", "Liste des tâches");
return "tasks/list";
}<div th:each="task : ${tasks}">
<h5 th:text="${task.title}">Titre</h5>
<span th:if="${task.completed}" class="badge bg-success">Terminée</span>
</div>L'application utilise les configurations par défaut de Spring Boot :
- Port : 8080
- Context path : /
- Thymeleaf cache : désactivé en développement (via DevTools)
Cette application est à des fins pédagogiques. N'hésitez pas à la modifier et à l'améliorer pour vos besoins.
Projet de démonstration pédagogique - Libre d'utilisation
Application de démonstration Spring MVC pour exposé pédagogique
Note : Cette application utilise un stockage en mémoire (HashMap). Les données sont perdues au redémarrage de l'application. Pour une application en production, il faudrait utiliser une base de données persistante (H2, PostgreSQL, MySQL, etc.).




