MVC avec Spring
MVC Projet Structure
MVC est avant tout une façon de structurer une application.
mon-projet/
├── pom.xml
└── src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── monentreprise/
│ │ └── monprojet/
│ │ ├── controleur/
│ │ ├── repository/
│ │ ├── modele/
│ │ └── vue/
│ ├── resources/
│ └── webapp/
│ ├── WEB-INF/
│ └── resources/
└── test/
├── java/
└── resources/
Dans cette structure, le répertoire src/main/java contient le code source de l’application, organisé en packages pour les contrôleurs, les modèles et les vues. Le répertoire src/main/resources contient les fichiers de ressources, tels que les fichiers de configuration de Spring. Le répertoire src/main/webapp contient les fichiers liés à la partie web de l’application, tels que les fichiers JSP et les ressources statiques (images, CSS, JavaScript, etc.).
Le répertoire src/test contient les fichiers liés aux tests de l’application, avec une structure similaire à celle du répertoire src/main.
Spring MVC
Spring MVC est un framework Java populaire pour la création d’applications Web. Il suit le modèle de conception Model-View-Controller (MVC), qui divise une application en trois parties interconnectées: le modèle, la vue et le contrôleur.
Le modèle représente les données de l’application et les règles métier qui régissent l’accès à ces données. La vue est responsable de la présentation des données à l’utilisateur, généralement sous forme de pages HTML. Le contrôleur gère les interactions entre la vue et le modèle, en traitant les demandes entrantes, en mettant à jour le modèle et en renvoyant des réponses appropriées.
Spring MVC utilise un modèle de programmation basé sur les annotations pour définir les contrôleurs et les méthodes de gestionnaire. Les contrôleurs peuvent être annotés avec @Controller ou @RestController, tandis que les méthodes de gestionnaire peuvent être annotées avec des annotations telles que @RequestMapping, @GetMapping, @PostMapping, etc. pour mapper les demandes entrantes à des méthodes spécifiques.
Les contrôleurs peuvent également utiliser des annotations telles que @RequestParam, @PathVariable, @RequestBody, etc. pour lier les paramètres de méthode aux parties de la demande, telles que les paramètres de requête, les variables de chemin et le corps de la requête.
Spring MVC fournit également un support pour la validation des données, la conversion des types, la gestion des exceptions, la négociation du contenu et d’autres fonctionnalités utiles pour la création d’applications Web robustes.
Voici un exemple simple de contrôleur Spring MVC qui gère les demandes liées aux utilisateurs:
@Controller
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public String listUsers(Model model) {
List<User> users = userService.findAll();
model.addAttribute("users", users);
return "users/list";
}
@GetMapping("/{id}")
public String showUser(@PathVariable Long id, Model model) {
User user = userService.findById(id);
model.addAttribute("user", user);
return "users/show";
}
@GetMapping("/new")
public String newUser(Model model) {
model.addAttribute("user", new User());
return "users/new";
}
@PostMapping
public String createUser(@Valid User user, BindingResult result) {
if (result.hasErrors()) {
return "users/new";
}
userService.save(user);
return "redirect:/users";
}
}
Dans cet exemple, nous avons créé une classe UserController annotée avec @Controller et @RequestMapping pour indiquer qu’il s’agit d’un contrôleur et pour mapper les demandes à l’URI /users. Le contrôleur utilise l’annotation @Autowired pour injecter une instance de UserService dans la classe, qui est utilisée pour effectuer des opérations CRUD (Create, Read, Update, Delete) sur les données des utilisateurs.
Le contrôleur définit plusieurs méthodes de gestionnaire pour gérer les différentes demandes liées aux utilisateurs:
listUsers(Model model): Cette méthode est annotée avec@GetMappingpour mapper les demandes GET à l’URI/usersà cette méthode. La méthode renvoie une vue nomméeusers/listqui affiche une liste de tous les utilisateurs.showUser(@PathVariable Long id, Model model): Cette méthode est annotée avec@GetMapping("/{id}")pour mapper les demandes GET à l’URI/users/{id}à cette méthode. La méthode prend en paramètre un identifiant d’utilisateur et renvoie une vue nomméeusers/showqui affiche les détails de l’utilisateur correspondant.newUser(Model model): Cette méthode est annotée avec@GetMapping("/new")pour mapper les demandes GET à l’URI/users/newà cette méthode. La méthode renvoie une vue nomméeusers/newqui affiche un formulaire pour créer un nouvel utilisateur.createUser(@Valid User user, BindingResult result): Cette méthode est annotée avec@PostMappingpour mapper les demandes POST à l’URI/usersà cette méthode. La méthode prend en paramètre un objetUservalidé et crée un nouvel utilisateur dans la base de données. Si des erreurs de validation sont détectées, la méthode renvoie la vueusers/new. Sinon, elle redirige vers l’URI/users.