Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Struts2
1 STRUTS2
8 de Febrero de 2008
Arquitectura de 5 capas
Nombre de la capa Responsabilidad Implementación tecnológica
Presentación Interfaz de usuario JSP/HTML/Javascript
Swing, SWT, Eclipse RCP
Flex (Adobe)
Aplicación Flujo de navegación, validación
sintáctica, interactuación con la capa de
servicio
Servlets, Apache Struts v1/v2, Spring
MVC, Tapestry, Java Server Faces ,
Spring Web Flow
2 STRUTS2
Servicios Control de transacciones, flujo de lógica
de negocio, rol de fachada
EJB sesión sin estado. POJO + AOP
Dominio Modelo de dominio, lógica del dominio
de negocio, validación semántica
POJO
Persistencia Persistencia de objetos de dominio Hibernate, Ibatis, Java Persistence API
(JPA), TopLink
Model-View-Controller
Model1
Model2
3 STRUTS2
Cuidado!!!
4 STRUTS2
� Desarrollo
� Fácil arranque. Arquitetipo Maven2
� Soporte para Ajax como ciudadano de primera clase.
� Fácil integración con Spring. Dependency Injection
� Tecnología de renderizado: JSP, Freemarker, Velocity, JasperReports, …
� Los formularios son clases Java planas (POJO).
� Las acciones son clases Java planas (POJO).
� Despliegue
� Tecnología basada en plugins. Únicamente es necesario añadir la librería. No más configuración.
¿Por qué Struts2?
5 STRUTS2
� Profiling integrado
� Gestión de errores precisa.
� Mantenimiento
� Facilidad de realizar pruebas sobre las acciones
� Convención sobre configuración
� Integrada herramienta de depuración
� Integración con Freemarker para desarrollo de tags. No es necesario la API de librería de tags
Arquitectura Struts2
6 STRUTS2
Característica Struts1 Struts2
Action Extiende de una clase base abstracta. No permite interfaces.
No es necesario que extienda de una clase base. Puede implementar el interfaz Action. Extiende de ActionSupport para tareas comunes.
Modelo de threading Las acciones de Struts1 son singleton y deberían ser thread-safe. Requiere especial cuidado a la hora del desarrollo.
Las acciones de Struts2 son instanciadas por cada petición. No supone una penalización importante del rendimiento ni impacto en la recolección de basura
Dependencia con la especificación de servlets
Struts1 presenta dependencia puesto que es pasado como parámetro el objeto HttpServletRequest y
Presenta objetos de contexto para poder acceder al request y al response si es preciso.
Comparativa Struts1/Struts2
7 STRUTS2
HttpServletRequest y HttpServletResponse
preciso.
Facilidad de pruebas Está más acoplado al contenedor, por tanto, dificulta la prueba. Existe un framework llamado StrutsTestCase que usa MockObjects para facilitar las pruebas
Las acciones de Struts2 no están acopladas al contenedor, con lo que es más sencillo el desarrollo de las pruebas. Aplica Dependency Injection.
Encapsulación de los parámetros de entrada
Se realizan mediante el ActionForm. Aumenta la cantidad de codigo necesaria. Dificultad de reutilización
Struts2 usa las propiedades de las acciones como propiedades de entrada.
Comparativa Struts1/Struts2 (II)
Característica Struts1 Struts2
Lenguaje de expresiones Struts1 integra con JSTL y EL. EL presenta escasez a la hora de tratar con colecciones y propiedades indexadas
Struts2 puede usar JSTL, pero el framework soporta un lenguaje de expresiones más flexible llamado OGNL (Object Graph Navigation Language)
Enlace de valores en la vista Struts1 usa el mecanismo estandar JSP para enlazar objetos en el contexto de la página.
Struts2 usa una tecnología basada en un modelo de pila “ValueStack” para que las librerías de tags accedan a los valores. Permite desacoplar la vista del tipo de objeto que va a ser renderizado
Dependencia con la especificación de servlets
Struts1 presenta dependencia puesto que es pasado como parámetro el objeto
Presenta objetos de contexto para poder acceder al request y al response si es
8 STRUTS2
servlets es pasado como parámetro el objeto HttpServletRequest y HttpServletResponse
acceder al request y al response si es preciso.
Conversión de tipos Las propiedades del ActionForm son normalmente String. Se apoya de Commons-BeanUtils para conversión de tipos.
Struts2 usa OGNL para conversión de tipos. El framework incluye una colección de converters
Validation Struts1 soporta validación declarativa (commons-validator) y programática
Struts2 presenta validación declarativa (Xwork Validation Framework) y programática.
Control de la ejecución de la acción Permite configurar direferentesRequestProcessor por módulo
Permite controlar el ciclo de vida de cada acción mediante la pila de interceptores
Tecnología de rendering
Action JSP
Freemarker
9 STRUTS2
JasperReports
El objetivo es no tener que realizar ningún paso de configuración (struts.xml), asumiendo un conjunto de convenciones para la ejecución de las acciones y el renderizado de vistas
Configuración Zero
10 STRUTS2
Codebehind Plugin.
Integración con SiteMesh
Antes de SiteMesh
11 STRUTS2
Integración con SiteMesh (II)
Después de SiteMesh
12 STRUTS2
¿Qué es AJAX?
� Introduce el modelo de aplicación Web asíncrona.
� ¿Qué es AJAX?
13 STRUTS2
Ajax Tags con Dojo Toolkit
Validación cliente con DWR ( Actualmente migrando a una solución con interceptores – JSONValidationWorkflowStack)
AJAX en Struts2
14 STRUTS2
JSON Plugin
GWT plugin
� Usa patrones (wildcards) para definir las vistas y acciones
� Usa alternativas de mapeo de URI’s con el objeto de simplificar la configuración
� Usa distintas tecnologías de renderizado (result types)
� Usa conversión de datos
� Usa el soporte para datos tabulares
� Usa validación declarativa cuando sea posible
� Mueve las acciones CRUD a una misma acción
Consejos para la productividad
15 STRUTS2
� Mueve las acciones CRUD a una misma acción
� Usa anotaciones donde sea posible (Tener en cuenta que no refresca en caliente)
� Usa configuración zero
� Usa resultados globales para vistas comunes
� Usa manejo de excepciones declarativo