mardi 28 février 2012

Spring MVC

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