Seleccionar página

Comparativa de Frameworks: Struts

por | Dic 16, 2007 | Java

El API Struts fue liberado en el año 2001 para proporcionar un marco de trabajo MVC estándard para la comunidad Java en respuesta a los diseños basados en JSPs monolíticos que mezclaban HTML y código java, lo que se conoce como «Modelo 1».

Modelo de programación

Sigue un modelo de programación basado en acciones

Todas las peticiones HTTP (request) realizadas por el cliente son dirigidas al controlador principal (ActionServlet) y redirigidas según el mapeo especificado (ActionMapping) en un archivo de configuración (struts-config.xml) a clases-accion (ActionForm) que implementan la lógica de la aplicación y tienen asociado un bean-formulario (FormBean) con los datos enviados. Posteriormente el controlador redirige a la vista adecuada.

Paso a paso, su funcionamiento sería así:

1. El cliente solicita una página que contiene datos a completar.

2. El servidor le envía la página.

3. El cliente, con los datos completados envía de regreso la página. El ActionServlet verifica la ruta con la que se lo invocó y extrae el path de esa ruta y busca en los actionMappings cual es la Acción a invocar y que formulario necesita recibir como entrada

4. El controlador crea o reutiliza el Formulario dependiendo el ámbito en que es ejecutada la petición, carga los datos en el formulario, los valida y luego crea la acción y le pasa el formulario como parámetro

5. La acción recibe el formulario y con sus datos invoca a las reglas del negocio (generalmente delegadas en otros objetos)

6. A partir de la respuesta recibida, carga los valores de salida y selecciona la siguiente vista a enviar

Como puede apreciarse, el diseño está basado en el patrón «Service to Worker». Este consiste en Combinar un controlador y un dispacher con vistas y helper (Front Controller + View Helper1 ) para manejar peticiones de clientes y preparar una presentación dinámica como respuesta. Los controladores delegan la recuperación de contenido en los helpers, que manejan el relleno del modelo intermedio para la vista. Un dispatcher es el responsable del control de la vista y la navegación y puede encapsularse dentro de un controlador o de un componente separado.

Capas afectadas

Presentación y Negocio.

MVC push/pull

Push.

El FormBean definido en el ActionMapping para la acción que se va a ejecutar está disponible en la página a través de la biblioteca de etiquetas (TAGs) de Struts

Internacionalizacion (i18n) y localización (L10n)

Permite definir archivos de mensajes para diferentes idiomas y seleccionar uno automáticamente dependiendo del idioma por defecto del cliente. No proveé de un mecanismo para elegir el idioma.

Estos archivos tienen una serie de pares clave/valor que son referenciados desde la vista.

Sistema de seguridad

Se encarga de los mecanismos de control de autenticación y acceso.

Sistema de plantillas (templates)

Las últimas versiones de Struts vienen con la extensión Struts-Tiles integrada. Este es un sistema de plantillas que sigue el patrón Composite View2 . Esto consiste en utilizar vistas compuestas que se componen de varias subvistas atómicas. Cada componente de la plantilla se podría incluir dinámicamente dentro del total y la distribución de la página se maneja independientemente del contenido.

Sistema de validación

Define las reglas de validación en un archivo llamado validation-rules.xml. El framework lee las restricciones definidas y agrega validadores a las entradas en el lado del cliente y del servidor.

También permite Validar los datos desde el FormBean.

Sistema de navegación (pageflow)

Cada accion definida en struts-config.xml puede tener asociado uno o varios forwards que indican a qué página debe redirigirse. La elección del forward se realiza desde el ActionForm

Sistema de caché

No proporciona un sistema de caché.

Testeabilidad

No proveé de un mecanismo nativo, pero existen numerosas extensiones para realizar los test.

Mapeo Objeto-Relacional (ORM)

No. Struts se centra en las capas de negocio y presentación, pero debido a su diseño es fácil hacerlo cooperar con soluciones ORM.

Programación Orientada a Aspectos (AOP)

No.

Inyección de dependencias (DI)

No

Ajax

No viene integrado por defecto, cosa lógica ya que Struts es mucho anterior a Ajax.

Sin embargo es posible su integración, pero es laboriosa, ya que requiere reescribir código en la capa de presentación y negocio.

Configuración

La configuración está basada 100% en archivos XML y prácticamente centralizada en el fichero de configuración principal: struts-config.xml. Para aplicaciones grandes este fichero suele volverse inmanejable.

Extensibilidad

Este es uno de los puntos sus fuertes. Struts no fue diseñado para ofrecer una solución web completa, si no como un núcleo que define la comunicación entre la capa de presentación y negocio.

Es fácil añadirle extensiones para manejar la seguridad, el flujo de páginas, plantillas de vistas… y hacerle cooperar con otros framewoks como hibernate o Spring.

Madurez

En cuanto a madurez puede decirse que es el lider indiscutible. Ha sido el estandar de facto durante años, y ha sido usado por grandes y pequeñas empresas en multidud de proyectos.

Última versión

Hemos trabajado con la versión 1.3.8. También existe un Struts 2.0, pero sus características son tan diferentes que puede considerarse un framework completamente distinto a Struts 1.X

Curva de aprendizaje

Struts proveé una API con sus métodos y sus clases, las cuales tienes que extender para implementar la lógica de negocio. Esto hace que tengas que tener un conocimiento aceptable de dichas clases, sus responsabilidades y sus interacciones, lo que retrasa la hora de empezar a desarrollar. Sin embargo no presenta un modelo demasiado complicado y gracias a la cantidad de documentación se hace más facil.

Documentación

Debido a su gran difusión existen inumerables artículos, foros y similar con información sobre su funcionamiento, integración y cualquier problema que pueda surgir durante un desarrollo basado en struts

Te puede interesar…

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *