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