Download Struts2

Document related concepts
no text concepts found
Transcript
Struts2
8 de Febrero de 2008
1
STRUTS2
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)
2
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
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
STRUTS2
Model-View-Controller
Model1
Model2
3
STRUTS2
Cuidado!!!
4
STRUTS2
¿Por qué 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.
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
5
STRUTS2
Arquitectura Struts2
6
STRUTS2
Comparativa Struts1/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
HttpServletResponse
Presenta objetos de contexto para poder
acceder al request y al response si es
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.
7
STRUTS2
Comparativa Struts1/Struts2 (II)
Característica
Struts1
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
HttpServletRequest y
HttpServletResponse
Presenta objetos de contexto para poder
acceder al request y al response si es
preciso.
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
Struts1 soporta validación declarativa
(commons-validator) y programática
Struts2 presenta validación declarativa
(Xwork Validation Framework) y
programática.
Permite configurar direferentes
RequestProcessor por módulo
Permite controlar el ciclo de vida de cada
acción mediante la pila de interceptores
Conversión de tipos
Validation
Control de la ejecución de la acción
8
STRUTS2
Struts2
Tecnología de rendering
Freemarker
Action
JSP
JasperReports
9
STRUTS2
Configuración Zero
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
Codebehind Plugin.
10
STRUTS2
Integración con SiteMesh
Antes de SiteMesh
11
STRUTS2
Integración con SiteMesh (II)
Después de SiteMesh
12
STRUTS2
¿Qué es AJAX?
¿Qué es AJAX?
Introduce el modelo de aplicación Web asíncrona.
13
STRUTS2
AJAX en Struts2
Ajax Tags con Dojo Toolkit
Validación cliente con DWR ( Actualmente migrando a una
solución con interceptores – JSONValidationWorkflowStack)
JSON Plugin
GWT plugin
14
STRUTS2
Consejos para la productividad
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
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
15
STRUTS2