Le modèle MVC de type 2 (ou MVC2), avec une Servlet unique (contrôeur façade) comme point d'entrée des applications de ce type a été amélioré par Spring et son framework MVC par rapport à d'autre framework MVC comme Struts.
Spring MVC s'illustre par le côté pratique de sa configuration et son implémentation:
- Une programmation déclarative qui sépare les couches: Contrôleur-Vue-Service
- Les contrôleurs sont décorés par annotation de manière à s'abstraire de l'API Servlet et d'adapter spécifiquement les contrôleurs à ses besoins.
- La programmation par contrat (interface) offre de nombreux choix stratégique (classe d'implémentation des interfaces) et ceci à tous les niveaux de notre architecture MVC:
- Au niveau du type du contrôleur (contrôleur de base ou contrôleur de gestion des formulaires (GET ou POST).
- Au niveau du type de Vue à générer (HTML, JSP, XML, PDF, EXCEL...) etc...
Spring MVC plus en détail :
1. Initialisation du framework spring MVC
· Chargement du context de l’application Web
o web.xml: L’implémentation ContextLoaderListener de ServletContextListener permet de configurer et d’initialiser le context au démarrage et lefinaliser à l’arret de l’applcation Web.
· Chargement du context de Spring MVC et initialisation du contrôleur de facade : DispacherServlet (<nom-servler>-servet.xml)
2. Traitement des requêtes
· Activation des annotations @RequestMapping
o Configuré avec l’Implémentation DefaultHandlerMapping et HandlerMapping et AnnotationMethodHandlerAdapter
o Utilisation de la balise component-scan de l’espacde de nommage context pour la détection automatique de tous les composants présents et notament les contrôleurs Spring : Utilisation de l’annotation @Autowired pour l’injection de dépendance.
Les contrôleurs n’ont alors plus à être défini entant que bean dans la config Spring.
· Sélection du Contrôleur avec @RequestMaping
o Propriété de @RequestMapping
§ method : RequestMethod.GET, RequestMethod.POST
§ params :
§ value :
· Voir types de paramètres possibles et types de retour
· Contrôleur de gestion de formulaire
o Affichage : GET avec annotations :
§ @RequestMapping
§ @ModelAttribute : annotation de la méthode d’initialisation du formulaire
§ @InitBinder : annotation pour méthode d’initialisation avec avec ajout d’un PropertyEditor personnalisé
o Soumission : POST avec annotations :
§ @RequestMapping
§ @ModelAttribute
§ @InitBinding
§ Validation avec Implémentation de l’interface Validator et paramètre BindingResult
· Gestion des exceptions :
o Avec l’implémentation SimpleMappingExceptionResolver de HandlerExceptionResolver
3. Support de REST