martes, 23 de noviembre de 2010

INICIO STRUTS2

INTRODUCCION

Struts 2 es un framework de presentación, basado en el patron MVC. Se distingue su amplia capacidad de configuración y extensibilidad. Permite el uso de plugins de componentes e integracion con otros frameworks.


ARQUITECTURA



PRINCIPALES COMPONENTES

Los principles componentes de framework son:

  • DispatcherFilter
  • Interceptors
  • Actions
  • Results

DispatcherFilter

Es el punto de entrada del framework. A partir de el se lanza la ejecución del procesamiento para cada request que involucre al framework.

Sus principales responsabilidades son:

  • Ejecutar los Actions (handlers para los request)
  • Comenzar la ejecución de la cadena de interceptors (interceptors chain) asociados al request
  • Limpiar el ActionContext (para evitar memory leaks). El ActionContext es el contexto sobre el cual se ejecuta un Action

Interceptors

Son clases que siguen el patron interceptor, realizan tareas muy similares a los advice de AOP. Se encargan de interceptar la invocación a un Action. Permiten realizar operaciones antes y despues de la invocacion de un Action. Tambien permiten evitar que un Action se ejecuto. Nos sirve para retilizar cierta funcionalidad que queremos aplicar a un conjunto de Actions.

Struts2 trae definidos un conjunto de interceptors por defecto, que le permite realizar un conjunto de acciones sobre los Actions. el Request y Response. Estas acciones son, por ejemplo: validaciones de los parámetros de entrada, inyección de dependencia, logueo, etc.


Actions

Los Actions seran lo encargados de ejecutar la logica necesaria para manejar un request determinado. A diferencia de versiones anteriores de struts, los Actions no estan obligados a implementar o heredar de una interfaz o clase ya definida. Pueden ser POJOs. Igualmente, struts2 posee una interfaz Action. Esta interfaz permite definir el método por defecto que se ejecutará sobre el Action para que no tengamos que definirlo por otro medio (Existen varias formas de indicarle a Struts2 el método a invocar sobre un action). Tambien existe una implementación de esta interfaz, denominada ActionSupport, que nos provee funcionalidad de gran utilidad necesaria por un conjunto de Interceptors para poder manipular el Action a invocar.
  • "success" es el resultado por defecto (no hace falta más configuración en el fichero de configuracion de las acciones de struts.xml)


Results

Los Results son Objetos que encapsulan el resultado de un Action. Los Actions de la aplicación simplemente devolveran un String en sus métodos. Un Action puede devolver diferentes resultados luego de su ejecución. Cada uno de estos resultados se corresponde con un Result, previamente configurado en Struts2. La configuración de cada Result determina principalmente: el tipo de vista a mostrar (JSP, Velocity Templates, FreeMarker?, entre otros), el recurso asociado a dicha vista, el nombre asociado al Result (mediante este y el resultado del Action se determina el Result a utilizar).


RELACION

Para no dejar los componentes definidos y no relacionados, y para mejorar el entendimiento del framework, vamos a explicar como funciona todo junto.

  1. Llega un Request a la aplicación.
  2. El Request es interpretador por el DispatcherFilter y determina que Action y que conjunto de Interceptors invocar.
  3. Cada DispatcherFilter ejecuta sus acciones previas a la ejecución del método de Action a invocar
  4. Es invocado el método del Action.
  5. Cada DispatcherFilter ejecuta sus acciones posteriores a la ejecución del método de Action a invocar
  6. Se examina el resultado obtenido del Action y se determina el Result correspondiente.
  7. Mediante el Result determinado se genera la vista, y según la configuración definida sober el se invoca el proceso de generación de la vista.
  8. La vista generada retorna al cliente.

Package Tag

Atributos disponibles
  • name: identificativo dentro del doc
  • extends: hereda propiedades de otro paquete, hay que heredar de struts:"struts-default"
  • namespace: url directorio principal antes del mapeo de la accion /myWebApp/package1/my.action vs /myWebApp/package2/my.action”
  • abstract: comportamiento parecido a clase java abstract

No hay comentarios:

Publicar un comentario