Spring MVC Controllers

Objectifs: 

  • Déterminer les cas d’utilisation des contrôleurs implémentés par Spring MVC
  • Déterminer le fonctionnement des contrôleurs : AbstractController et AbstractCommandController
Spring MVC controllers

Un grand plus que marque Spring MVC par rapport aux autres framework telleque Struts ou WebWork, c’est qu’il offre une panoplies de contrôleurs dont chaque un est spécifique à un traitement bien particulier. Mais pour profiter de cet avantage il faut bien comprendre le fonctionnement de chaque contrôleur à fin de faire le bon choix.


Les contrôleurs de Spring MVC peuvent être classés en six catégories, nous décrivons dans le tableau ci-dessous en quel cas on peut choisir chaque type.



tabusecase.jpg

Le diagramme de classe ci-dessous décrit les contrôleurs définis par Spring MVC.

diagramme classe spring mvc controllers

Interface Controller

L’interface Controller définit le comportement minimal d’un contrôleur qui consiste à intercepter une requête et retourner le modèle et le view adéquats. L’interface Controller définit une seule méthode handleRequest().

AbstractController

AbstractController implémente le comportement minimal d’un contrôleur. Il implémente la méthode handleRequest() et définit une méthode abstract handleRequestInternal() qui doit être implémentée par les contrôleurs spécifique qui héritent de AbstractController.

La méthode handleRequest() implémente le scénario suivant :
  1. Vérifier si la méthode utilisée dans la requête HTTP (GET, POST, …) est supportée par le contrôleur, si non une exception sera envoyée.
  2. Vérifier si la session existe (en cas où le contrôleur est configuré pour que la session soit obligatoire).   Exemple : dans le cas d’un workflow où la présence de la session est obligatoire pour le traitement, dans ce cas le contrôleur peut être configuré pour vérifier l’existence de la session si non une exception sera envoyée.
  3. Vérifier si le Header Cache doit être utilisé, dans se cas le Header sera configuré pour ceci.
  4. Synchroniser la session (si le contrôleur est configuré pour ceci).
  5. Exécuter la méthode handleRequestInternal() qui sera implémentée par les  subClass

Certes que AbstractController permet d’implémenter le comportement minimal d’un contrôleur, mais il permet aussi de vérifier la présence de la session, utiliser le Header cache et la synchronisation de la session. L’utilisation de ces fonctionnalités est configurable soit dans le fichier de configuration XML soit en utilisant des setters dans le constructeur du contrôleur.

 AbstractCommandController
 
Tout d’abord il faut savoir que le mot « commande » n’a rien avoir avec le design pattern « commande » de GoF ; en fait dans notre cas le mot « commande » désigne le bean créé à partir des paramètres du requête HTTP.

Donc, comme vous avez compris, le AbstractCommandController est utilisé dans le cas où on a besoin de récupérer données envoyées en paramètre de la requête. Pour ceci il faut
  1. Préciser au contrôleur le nom de la commande ( ou le bean) qui va encapsuler les paramètres récupérés  de la requête, ceci en appelant la méthode setCommandClass().

  2. Implémenter la méthode handle() qui sera appelée par le dispatcher, cette méthode recevra en paramètre la « commande » créé à partir des données récupérées de la requête.

    Exemple : soit l’exemple ci-dessous qui permet de récupérer les informations sur un utilisateur à partir d’un formulaire.
 AbstractCommandController

Conclusion

Dans cet article nous avons vu quelques cas d'utilisation des contrôleurs définis par Spring MVC, ainsi que le mécanisme de fonctionnement des contrôleurs  AbstractController et AbstractCommandController. Dans l'article prochain nous verrons, en détail, le contrôleur SimpleFormController.

Références
Expert Spring MVC and Web Flow by Seth Ladd, Darren Davison, Steven Devijver, and Colin Yates.
Spring in Action by Graig Walls Ryan Breidenbach

Aucun commentaire: