viernes, 15 de febrero de 2013

Conociendo Struts 2 - introducción y preparación de herramientas de trabajo

Si bien tuve la oportunidad de trabajar en modalidad MVC en tecnologia NET y JAVA, Struts 2 es un framework el cual no tuve la oportunidad de manipular por ello es que voy a trabajar un poco con el para entender sus posibilidades.

Por un lado esta de mas decir que struts 2 no es un continuación de struts 1 sino una unificación de dos framework como lo son webwork y struts. Por un lado struts es un MVC usado en un porcentaje alto de proyectos que hoy se encuentran implementados y funcionales por su fácil implantación  y una curva de aprendizaje aceptable para todo desarrollo. 


El desarrollo de Struts 2 está pensado para mejorar Struts aportando flexiblidad, sencillez y robustez a los elementos que se emplean en el desarrollo, facilitar el desarrollo de nuevas aplicaciones y el mantenimiento de aquellas que se desarrollen.

Por ello se hace una nueva arquitectura, una nueva API, nuevos Tags, etc., a partir de un framework existente WebWork, pero manteniendo todo lo bueno que tenía Struts.

El resultado lo vamos a analizar en una serie de por lo menos 10 artículos que nos posibiliten conocer este  framework sencillo y fiable.

Características de struts 2


1. Diseño Simplificado:  en la versión 2 en la cual se hace uso de Interfaces  provee una
mayor facilidad para la extensión y la adaptación, ya que los interfaces son más fáciles de adaptar que las clases abstractas utilizadas por struts. 
Los actions se convierten en POJOs, elementos que además estarán poco acoplados. Los POJOs son clases que cuentan con getter y setter para poder recibir valores desde páginas, y cuentan con algunos métodos en los cuáles pondremos la lógica de negocio.

2. Simplificación de los actions: Como hemos dicho los actions son POJOs , cualquier clase java con un método execute puede actuar como un Action. Así no se hace necesario implementar ningún interfaz. 

3. Desaparecen los ActionForms: se ven reemplazados por simples JavaBeans que son usados para leer las propiedades directamente. Lo usual es que el propio Action actúe de JavaBean, con lo que se facilita el
desarrollo. Además de ha mejorado la lectura de parámetros con el objetivo de no tener únicamente propiedades de tipo String.

4. Test simplificados: como los actions engloban la lógica de negocio y los JavaBeans, es más sencillo hacer test unitarios.

5. Fácil selección de opciones por defecto: casi todos los elementos de configuración tienen definidos un valor por defecto que se puede parametrizar, lo que facilita la elección de acciones por defecto.

6. Results mejorados: a diferencia de los Action Forwards, los results de Struts 2 son más flexibles a la hora de poder definir múltiples elementos de la vista. Además desaparece la complejidad de utilizar ActionForwards, ya que se sustituye por la devolución de Strings.

7. Mejoras en Tags: struts 2 permite añadir capacidades utilizando tags que permite hacer páginas consistentes sin añadir código. Los tags presentan más opciones, están orientados a los results y pueden ser
cambiados de forma sencilla. Además se añaden tags de marcado (markup) los cuáles son editables usando templates FreeMarker. Esto significa que podemos hacer que un mismo tag se comporte de forma
diferente sin tener que hacer ninguna tarea de programación.

8. Se introducen anotaciones: las aplicaciones en struts 2 puede usar anotaciones como alternativa a XML y configuraciones basadas en properties.

9. Arranque rápido: muchos cambios se pueden hacer sin necesidad de reiniciar el contenedor web.

10. Parametrización del controlador: Struts 1 permitía parametrizar el  procesador de peticiones a nivel de módulo. Struts 2 lo permite a nivel de action.

11. Fácil integración con Spring.

12. Soporte de Ajax: se incluye un theme AJAX que nos permite hacer

Como funciona Struts 2



Un usario envía una petición: Un usuario realiza la petición de un recurso dentro del servidor.

El elemento FilterDispatcher determina la acción que deberá responder: El framework dispone de los elementos requeridos para que el dispatcher sea capaz de determinar qué action es el responsable de recibir la petición y procesarla. Para ello se apoya en el framework para  la publicación del recurso, y para su ejecución.

Se aplican los interceptores definidos: Existen diferentes interceptores que se pueden configurar para que ejecuten diferentes funcionalidades como workflows, validaciones, upload de ficheros, etc.

Se ejecuta el Action: Tras la ejecución de los diferentes interceptores el método específico del Action es ejecutado, realizándose aquellas operaciones y acciones que se hayan definido. El action termina devolviendo un resultado el cúal se utiliza para determiar la página a devolver.

Se renderiza la salida: Tras la ejecución del action se determina cuál es la página que se devuelve y se ejecutan el forward a dicha página.

Se devuelve la petición.: Para realizar la devolución se ejecutan los interceptores que correspondan y se procede a devolver la petición al cliente. De esta forma es posible añadir lógica externa a los servidores
también en la devolución

Se muestra el resultado al cliente final: Finalmente el control es devuelto al cliente quien podrá visualizar el resultado en su navegador.



Responsabilidades del Controlador

Es el responsable de recibir las peticiones de los clientes y es el responsable de:

1. Procesar las peticiones, determinando qué clase es la que tiene que responder.
2. Modificar el modelo en función de los parámetros que recibe ejecutando la lógica de negocio que el desarrollador haya definido. 
3. Redirigir a la vista en función de la lógica de negocio. Como no podía se de otro forma, el controlador permite el uso de tecnologías estándares tales como Java Filters, Java Beans, ResourceBundles, XML, etc.

Responsabilidades del Modelo

Es la parte responsable de la gestión de la información. En este punto se suelen incluir aquellas clases, herramientas, librerías, etc., que permiten el acceso a los datos, así como el modelado de los mismos. Algunas de las tecnologías que se suelen emplear son JDBC, EJB, Hibernate o JPA, entre otros.

Responsabilidades de la Vista

Es la responsable de la percepción que tienen los usuarios finales de la aplicación. Se incluyen las páginas Html, JS, etc, y en general todos los elementos de visualización de la aplicación. Se nutre de la información que el controlador ha captado del modelo para pintar las páginas finales. Algunas de las tecnologías que se emplean son Html, JSP, XSLT, PDF,
templates,etc.


En un nivel mas profundo 

Para aclarar ideas y mostras cómo es la arquitectura de Struts 2 se añade un diagrama en el cual se puede ver de forma gráfica qué elementos son los que intervienen dentro del procesamiento de una peticón HTTP, distinguiéndose cuáles son elementos de estándares de J2EE, cuáles son elementos propios de
Struts 2 y cuáles son creados por el usuario.



1. Una petición llega a un servlet (HttpServletRequest) el cual es la parte del controlador que va a recibir la petición.

2. El servlet delega en el ActionMapper para determinar cúal es la acción que se va a ejecutar.

3. A continuación se ejecuta la “cadena de filtros”, entre los que destacamos:
  • Action Context Clean Up Filter. Éste filtro se emplea cuando hay  que realizar una integración con   otras tecnologías (compartición de cookies,etc.)
  • FilterDispatch. Éste es encargado de determinar si la resolución de la petición requiere la ejecución o no de un action. Hemos de tener en cuenta que existen redirecciones u otros que no necesitan de un action que las implemente. En el caso de que haya que usar un action, se delega en el Action Proxy.

4. Action Proxy: se ejecuta cuando la petición requiere la ejecución de un action. Lo que hace es utilizar el Gestor de Configuraciones para crear  ActionInvocation. Éste es una clase que implementa el patrón
Command, el cuál se ejecuta.

5. Action Invocation: se lanza tras leer el fichero de configuración, y por tanto es conocedor de qué clase se debe ejecutar, así como de los interceptores que intervienen. Por ello es responsable de ejecutar cada
uno de los interceptores, y luego ejecutará el Action correspondiente. Éste Action contendrá la lógica de negocio que se debe ejecutar. Como resultado de la ejecución del Action se obtendrá un Result, el
cual se emplea para determinar cuál de los elementos de la vista se deben llamar.

6. Se ejecuta el elemento que debe configurar la vista y el resultado se devuelve deshaciendo el camino hasta el cliente.

Ahora que ya contamos con una introducción de struts 2  podemos preparar nuestro entorno de trabajo.

como para comenzar deberíamos tener instalador Tomcat 7 y enlazado a eclipse Helio, si no sabes como hacerlo Aquí hay una guia a disposicion

Deberíamos tener instalado Web Tools Platform SDK (WTP SDK) en nuestro Helio para facilitar el desarrollo web, por ello procederemos a realizar la instalación del mismo.

Primero que nada deberemos instalar WPT en nuestro caso realizaremos la instalación en eclipse de la versión 3.2.5 y a continuacion mostraremos el proceso de instalación.

The Eclipse Web Tools Platform (WTP) software repository - 






El proceso de instalación nos solicitara reiniciar eclipse para que los cambios tengan efecto.


Podremos verificar la instalación desde eclipse.



podríamos decir que ahora tenemos el entorno de trabajo preparado para trabajar en desarrollo web, por un lado contamos con el tomcat 7 instalado, configurado y eclipse con lo necesario para trabajar de manera cómoda.

Ahora el siguiente paso es descargar struts 2 desde 


En mi caso opte por la versión full que contiene todo el material del framework


Al descomprimir el archivo podremos ver el contenido del mismo.

En esta primera entrega:
  •  conocimos struts 2, sus virtudes y funcionamiento
  •  Instalamos el servidor de aplicaciones para trabajar 
  • Preparamos Eclipse para trabajar 
  • Descargamos struts 2


No hay comentarios:

Publicar un comentario