630 likes | 896 Views
Patrón MVC con STRUTS. Agenda. Introducción Conceptos fundamentales Apache Struts Framework Características Controlador Vista Modelo Utilización Apache Struts Project. Introducción (…).
E N D
Agenda Introducción Conceptos fundamentales Apache Struts Framework Características Controlador Vista Modelo Utilización Apache Struts Project
Introducción (…) Las aplicaciones Web son diferentes a los sitios Web convencionales porque éstas son capaces de crear una respuesta dinámica. Muchos sitios Web ofrecen sólo páginas estáticas, en cambio una aplicación Web es capaz de interactuar con bases de datos y lógica de negocios con la finalidad de personalizar la respuesta a enviar.
Introducción (…) • Ventajas de los servlet frente a los CGI: • Más rápidos • Más potentes • Portables • Extensibles • Desventajas • Escribir líneas infinitas println() para enviar código HTML al navegador • Solución JavaServerPage
Introducción (…) • JSP permite escritura de código Java dentro de ellos consiguiendo todas las ventajas tanto de los servlets como del código HTML • Sigue habiendo problemas propios de las aplicaciones web: El control de flujo
Introducción (…) Las aplicaciones Web en general tienen tres aspectos a considerar en su desarrollo: El código de acceso, inserción, consulta, actualización y/o eliminación de los datos. El código del diseño de las páginas a mostrar. El código que controla el flujo de las páginas de la aplicación. Con la práctica nos damos cuenta que si una aplicación Web grande tiene estos aspectos muy mezclados se vuelve difícil de mantener.
Introducción (…) Una forma de separar estos aspectos es usando la arquitectura MVC: Modelo-Vista-Controlador, donde: El modelo representa a la lógica de negocios (manipulación de datos). La vista representa la presentación de los datos (diseño de páginas). El controlador representa el código de navegación de la aplicación (control de flujo).
Patrones de Diseño Los patrones de diseño son soluciones efectivas de problemas comunes en el diseño de software. La efectividad de un patrón ya ha sido comprobada. Un patrón es reusable. Los patrones facilitan el aprendizaje de los programadores inexpertos.
Patrones de Diseño (…) Los patrones de diseño se pueden clasificar, según su propósito, en: Patrones creacionales: abstraen el proceso de instanciación y ocultan los detalles de cómo los objetos son creados o inicializados. Patrones estructurales: describen como las clases y objetos pueden ser combinados para formar grandes estructuras y proporcionar nuevas funcionalidades.
Patrones de Diseño (…) Patrones de comportamiento: tratan de cómo definir la comunicación e interacción entre los objetos de un sistema con la finalidad de reducir el acoplamiento entre éstos.
Patrón MVC El patrón de diseño Modelo-Vista-Controlador fue aportado originariamente por el lenguaje de programación SmallTalk. Consiste en dividir una aplicación en tres componentes: Modelo, Vista y Controlador. Se basa en la separación de responsabilidades ya que cada una de las partes se encarga de un aspecto específico y no interfiere con el de las otras.
Patrón MVC: Modelo Representa las capas de lógica de negocios y persistencia de datos de la aplicación. Está formada por todos los objetos de negocio que soportan los procesos propios del dominio de la aplicación. Se encarga del acceso a los datos para realizar consultas, eliminaciones, inserciones, actualizaciones y almacenarlos en un medio persistente, como por ejemplo una base de datos, un archivo de texto, XML, etc.
Patrón MVC: Vista Representa la capa de presentación de los datos. Se encarga de mostrar la información al usuario, por lo tanto tiene que ver con el diseño y formateo de los datos para su presentación. Interfaz de usuario para la interacción con la aplicación. En la vista solo se deben de realizar operaciones simples, como condiciones, ciclos, etc.
Patrón MVC: Controlador Se encarga de controlar el flujo de la aplicación. Tiene la función de recibir y responder a los eventos (acciones del usuario), convirtiendo éstos en solicitudes de servicio. Además, tiene que redirigir o asignar la parte de lógica de negocios a cada petición. Cuenta con un mecanismo para guardar las correspondencias entre peticiones y respuestas que se les asignan. Cada acción del usuario causa que se inicie de nuevo un nuevo ciclo.
Patrón MVC: Funcionamiento (1) El procesamiento de los datos se lleva a cabo entre sus tres componentes. El controlador recibe una petición y decide quien la lleva a cabo en el modelo. Una vez terminadas las operaciones en el modelo, se transfiere el flujo al controlador, que devuelve los resultados a una vista asignada.
Patrón MVC: Funcionamiento (3) El controlador tiene almacenado la relación entre las posibles peticiones y la lógica de negocio que les corresponden.
Patrón MVC: Ventajas Separación total entre las capas de presentación, lógica de negocio y acceso a datos. Esta separación es fundamental para el desarrollo de aplicaciones consistentes, reutilizables y más fácilmente mantenibles, resultando en un ahorro de tiempo. En Java se puede implementar el patrón MVC con la clase Observer pero de una manera sencilla, sin embargo con Struts se aplica en toda una aplicación Web convencional.
Frameworks Un framework es la extensión de un lenguaje, a través de una o más jerarquías de clases que implementan una funcionalidad y que pueden ser extendidas de manera opcional.
Apache Struts FrameworkUn poco de historia… Originalmente fue creado por Craig R. McClanahan y donado al proyecto Jakarta de Apache Software Foundation en el año 2000. En Junio de 2001 se libera la primera versión, y desde entonces muchos desarrolladores han participado en la mejora continua de este framework. Actualmente se ha lanzado una nueva versión de este framework, la cual se denomina Struts 2.
Apache Struts Framework (…) Es un framework de código abierto para desarrollar aplicaciones Web J2EE usando el patrón de diseño Modelo-Vista-Controlador. Usa y extiende la Java Servlet API para motivar a los desarrolladores a adoptar la arquitectura MVC. Simplificanotablemente la implementación de una aplicación siguiendo la arquitectura del patrón MVC.
Apache Struts Framework (…) El controlador ya se encuentra implementado en Struts, sin embargo y si es necesario es posible extenderlo o modificarlo. El flujo de la aplicación se controla desde un archivo XML (struts-config.xml). Proporciona la integración con el modelo, la lógica de negocio se implementa basándose en clases predefinidas por el framework y siguiendo el patrón Facade.
Apache Struts Framework (…) Facilita y soporta la construcción de la interfaz de la aplicación utilizando un conjunto de tags predefinidos. Lo que se busca es evitar el uso de scriptles, que son trozos de código Java entre “<%” y “%>”; para ganar mantenibilidad y rendimiento. Permite el desarrollo de sus componentes en paralelo o por personal especializado.
Apache Struts Framework (…) El framework provee tres componentes: Un manejador de petición proporcionado por el desarrollador de la aplicación, que se usa para relacionarlo a una determinada URI. Un manejador de respuesta que se utiliza para transferir el control a otro recurso que se encargará de completar la respuesta. Una biblioteca de tags que ayuda a los desarrolladores a crear aplicaciones interactivas basadas en formularios.
Apache Struts Framework (…) Struts provee la infraestructura básica para la implementación del patrón MVC, permitiendo así que los desarrolladores puedan concentrarse en la lógica de negocios. El framework está compuesto por aproximadamente 300 clases e interfaces que están organizadas en alrededor de 12 paquetes de nivel superior.
Struts: Funcionamiento El navegador genera una solicitud que es atendida por el Controlador (un Servlet especializado). El Controlador también se encarga de analizar la solicitud, seguir la configuración que se le ha programado en su XML y llamar al Action correspondiente pasándole los parámetros enviados. El Action instanciará y/o utilizará los objetos de negocio para concretar la tarea.
Struts: Funcionamiento (…) Según el resultado que retorne el Action, el Controlador derivará la generación de interfaz a una o más JSPs, las cuales podrán consultar los objetos del Modelo para mostrar información de los mismos.
Struts: Controlador La clase ActionServlet es el corazón del framework ya que es el controlador y se configura como servlet en el archivo web.xml
Struts: Controlador (…) Cada vez que un usuario hace una petición es manejada por Struts Action Servlet. Cuando el ActionServlet recibe la petición intercepta la URL y basado en el archivo de configuración struts-config.xml, dirige la petición al Action Class correspondiente. El Action Class es parte del controlador y se encarga de comunicarse con el modelo.
Struts: Controlador (…) Todas las peticiones atendidas por el framework siguen un patrón en su nomenclatura, por defecto *.do, pero éste se puede cambiar en el archivo web.xml.
Struts: struts-config.xml • Es el archivo de configuración de Struts, aquí se mapean las acciones (peticiones). • Sección <form-beans> contiene las definiciones de beans. • Se usa un elemento <form-bean> por cada bean de formulario, tiene los siguientes atributos importantes: • Name: Identificador único para referenciarlo en los mapeos de acciones.
Struts: struts-config.xml (…) • Type: ruta completa de la clase Java del bean de formulario. • Sección <action-mappings> contiene las definiciones de acciones, se usa un elemento <action> por cada acción, se definen los siguientes atributos: • Path: nombre de la clase action en relación al contexto de la aplicación. • Type: ruta completa de la clase Java de la clase Action.
Struts: struts-config.xml (…) • Name: El nombre del <form-bean> para usar con esta action, si corresponde. • Forward: ruta del archivo JSP a llamar. • Dentro de cada <action> se pueden definir más de un forward, teniendo las siguientes propiedades: • Name: nombre del forward que será utilizado al llamarlo desde la clase Action. • Path: ruta de la página JSP.
Struts: Action Class Una clase Action de una aplicación Struts extiende a la clase org.apache.struts.action.Action. Una clase Action actúa como un envoltorio para la lógica de negocio y provee una interfaz al modelo. Es el mediador entre la vista y el Modelo, ya que transmite los datos desde la Vista hacia el proceso específico del modelo y retorna los resultados en sentido contrario.
Struts: Action Class (…) Una acción funciona como un adaptador entre una petición HTTP entrante y la lógica de negocio creando una instancia de la Action correspondiente y ejecutando el método execute(). Por lo tanto es necesario que la subclase sobreescriba el método execute(). No se debe añadir lógica de negocio en ella, mejor utilizar otra capa DAO.
Struts: Action Class (…) Método execute(): public ActionForward execute( ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response ) throws java.lang.Exception
Struts: Action Class (…) • Sus parámetros son: • mapping - El ActionMapping usado para seleccionar esta instancia • form - ActionForm bean para esta petición, si existe • request - La petición HTTP que se está procesando • response - La respuesta HTTP que se está creando. • Lanza una excepción si en la lógica de negocio ocurre también una excepción.
Struts: Action Form Una de las tareas que consume mucho trabajo es la interacción con formularios, ya sea para editar u obtener nueva información. Las comprobaciones, la gestión de errores, el volver a presentar el mismo form al usuario con los valores que puso y los mensajes de error están soportados por Struts con los Action Forms y JSP.
Struts: Action Form (…) Un ActionForm es un JavaBean que se extiende org.apache.struts.action.ActionForm. Implementa los métodos get y set para cada input de un formulario de una página, y los métodos validate y reset. Se llena automáticamente en el lado del servidor con los datos introducidos desde un formulario en el lado del cliente.
Struts: Modelo Comprende toda la lógica del negocio, son las clases Java que el desarrollador tiene que implementar. No existe un formato definido para la creación de estos componentes, el framework proporciona interfaces a bases de datos, etc. Se elige el modelo de acuerdo con los requerimientos del cliente.
Struts: Vista Los componentes de la Vista son JSP y se encargan de la presentación de la información al usuario y del ingreso de sus datos. Muestran los datos proporcionados por los componentes del modelo. Struts provee soporte para construir fácilmente la interfaz de usuario a través de la utilización de HTML Tag Library.
Struts: Vista (…) Pudiendo obtener aplicaciones multi-idioma, interacción con formularios y otras utilidades. Para usar los Struts HTML Tags es necesario incluir la siguiente línea en el JSP: <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
Struts: Tag Library <html:html> Genera el tag <html>. <html:form> Genera <form> <html:button> Genera el tag <input type="button">. <html:submit> Genera <input type="submit"> para enviar los datos ingresados. <html:reset> Genera <input type="reset"> <html:checkbox> Genera el tag <input type="checkbox"> <html:hidden> Genera el tag <input type="hidden">. <html:img> Genera el tag <img>
Struts: Tag Library (…) <html:link> Genera un link html <html:password /> Genera el tag <input type=“password”>. <html:radio> Genera un radio button (<input type="radio">). <html:select multiple="true" property="selectBox"> Genera la lista en el formulario, selectBox debe ser un array. Usar <html:options> para especificar las entradas. <html:text> Genera el tag <input type="text">
Struts: Tag Library (…) <html:textarea> Genera el tag <textarea>. <html:file /> Genera el tag <input type=“file”> para subir archivos. <html:base> Genera el tag <base>. Este tag debe ser usado dentro del tag <head> <html:errors> Genera el codigo html para mostrar los errors que pueden ocurrir en la página. <html:message key="thekey"/> Busca el valor correspondiente al key dado en el archivos de recursos y lo muestra.
Struts: Internacionalización Struts provee la facilidad de crear aplicaciones multilenguaje. Para crear una aplicación multilenguaje se debe crear un archivo de texto (ej: ApplicationResources.properties) en el directorio donde se encuentren las clases de la aplicación(ej. empresa/aplicacion) que contenga las claves y valores con el formato clave.subclave=texto de los textos que pertenezcan al idioma principal.
Struts: Internacionalización (…) Ejemplo: login.titulo = Ingreso al Sistema login.labelusuario = Usuario : login.labelpassword= Password : Para cada idioma alternativo se creará un archivo nuevo que se llame igual pero que termine en "_xx.properties" siendo xx el código ISO de idioma (ej: ApplicationResources_en.properties).
Struts: Internacionalización (…) En struts-config.xml se debe configurar el Tag /servlet/init-param/param-name application y ponerle como param-value la localización del archivo con el idioma principal.
Struts: Internacionalización (…) Ejemplo: <servlet> <servlet-name>action</servlet-name> ... <init-param> <param-name>application</param-name> <param-value> empresa.aplicacion.ApplicationResources </param-value> </init-param>