martes, 22 de enero de 2008

MVC en Spring

En el siguiente apartado se detalla como esta implementado el patron Model-View-Controller sobre Spring framework.Como la mayoria de los framework que implementan el patron MVC, Spring tiene implementado un servlet que realiza las tareas de Front Controller, esto significa que cada uno de los request que son realizados por el usuario, pasan a traves de este servlet. El nombre que recibe este servlet es Dispatcher Servlet. Y como indicamos anteriormente, todos los request que son realizados por los distintos usuarios pasan por este componente. Como la imagen lo indica el Request llegan al Dispatcher el cual tiene la responsabilidad de delegar a otro componente el procesamiento del request.

Para obtener el nombre del componente que recibira el request , Spring utiliza lo que se denomina el Handler Mapping , el cual tiene la funcion de determinar cual sera el Controller que recibira el request. El Handler Mapping como indicamos tiene el objetivo de indicar al dispatcher

cual sera el componente que debe recibir el request enviado por el usuario.
Por lo cual el Dispatcher Servlet , le pregunta a uno o mas Handler Mapping cual sera le Controller que recivira el Request.
Dentro del Spring existe varios Handler Mapping los cuales tiene distintas capacidades de poder mapear a los controladores.

En el siguiente cuadro se indican los Handler Mapping que posee Spring.

Handler Mapping
Como mapea el Request
BeanNameUrlHandlerMapping Mapea controladores a URL basandose en el nombre del Bean
SimpleUrlHandlerMapping Mapea controladores a URL basandose en una collecion de propiedades que se definen en el Spring application context.
ControllerClassNameHandlerMapping Mapea controladores a URL utilizando el Controller Class Name
CommonsPathMapHandlerMapping
Mapea controladores a URL usando metadatas en el codigo del controlador. Esta metadata es definida usando Jakarta Commons Atributes.

Luego de que el Handler Mapping le entrega nombre del Controller que se hara cargo del Request , el Distpacher Servlet le envia el
request al Controller.Para poder implementar un Controller sobre Spring es necesario que se cree una clase que herede de los Controller que han sido implementados por Spring, los cuales dependiendo de la funcionalidad a realizar es el Controller que se debera utilizar. En el siguiente cuadro se puede ver que tipos de Controller estan disponibles sobre Spring.

Controller type
Classes Usarlo cuando ...
View ParameterizableViewController
UrlFilenameViewController
Para cuando un controlador solo necesita desplegar informacion
Simple Controller (interface)
AbstractController
Para controladores simples que solo se utilizan como Simples Servlet
Throwaway ThrowawayController Para manejar los request como un Commando
Multiaction
MultiActionController
Para implementar una serie de acciones con similar logica
Command
BaseCommandController
AbstractCommandController
Si tus controladores reciben parametros estos son manejados dentro de un objeto
Form
AbstractFormController
SimpleFormController
Para desplegar y procesar un formulario, bajo el mismo componente
Wizard
AbstractWizardFormController
Para realizar una interaccion mas rica con el usuario a traves de varias pantallas

Luego que el Controller recibe el Request , se construye un Objeto que se denomina ModelAndView ,este componente tiene como funcion la de :

1- Entregar un nombre logica a la vista que debera realizar el despliegue del Model
2- Entregar un nombre logico al Model que esta asociado a este componente
3- Inyectar el objeto Model el cual tiene los datos que seran desplegados en la Vista.

Luego que el objeto ModelAndView es regresado al dispatcher y este componente delega la responsabilidad de la mapping del nombre logico de la vista, con el componente a utilizar al ViewResolver.El ViewResolver es el encargado de realizar el mapping entre el nombre logico de la vista y el componente. En el siguiente cuadro se indican los ViewResolver disponibles a ser configurados sobre Spring.

View Resolver
Como trabaja ....
InternalResourceViewResolver Resuelve el nombre logico utilizando el mapping a velocity y JSP
BeanNameViewResolver Resuleve el nombre logico utilizando Bean definidos en el Spring Context
ResourceBundleViewResolver
Define el mapping entre los nombres logicos y las vistas asociadas , definiendolo en un archivo de propiedades
XmlViewResolver
Define el mapping entre los nombres logicos y las vistas asociadas , definiendolo en un archivo XML

Luego que las vista realiza el procesamiento , el dispatcher envia el request de retorno al usuario. Es importante señalar que el MVC es solo un modulo dentro del framework de Spring.

No hay comentarios: