63
Patrón MVC con STRUTS

Patron mvc struts

Embed Size (px)

Citation preview

Page 1: Patron mvc struts

Patrón MVC con STRUTS

Page 2: Patron mvc struts

Agenda Introducción Conceptos fundamentales Apache Struts Framework

Características Controlador Vista Modelo Utilización

Apache Struts Project

Page 3: Patron mvc struts

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.

Page 4: Patron mvc struts

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

Page 5: Patron mvc struts

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

Page 6: Patron mvc struts

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.

Page 7: Patron mvc struts

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).

Page 8: Patron mvc struts

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.

Page 9: Patron mvc struts

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.

Page 10: Patron mvc struts

Patrones de Diseño (…) Patrones de comportamiento: tratan de

cómo definir la comunicación e interacciónentre los objetos de un sistema con lafinalidad de reducir el acoplamiento entreéstos.

Page 11: Patron mvc struts

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.

Page 12: Patron mvc struts

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.

Page 13: Patron mvc struts

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.

Page 14: Patron mvc struts

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.

Page 15: Patron mvc struts

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.

Page 16: Patron mvc struts

Patrón MVC: Funcionamiento (2)

Page 17: Patron mvc struts

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.

Page 18: Patron mvc struts

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.

Page 19: Patron mvc struts

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.

Page 20: Patron mvc struts

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.

Page 21: Patron mvc struts

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.

Simplifica notablemente la implementaciónde una aplicación siguiendo la arquitectura del patrón MVC.

Page 22: Patron mvc struts

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.

Page 23: Patron mvc struts

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.

Page 24: Patron mvc struts

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.

Page 25: Patron mvc struts

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.

Page 26: Patron mvc struts

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.

Page 27: Patron mvc struts

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.

Page 28: Patron mvc struts

Struts: Funcionamiento (…)

Page 29: Patron mvc struts

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

Page 30: Patron mvc struts

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.

Page 31: Patron mvc struts

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.

Page 32: Patron mvc struts

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.

Page 33: Patron mvc struts

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.

Page 34: Patron mvc struts

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.

Page 35: Patron mvc struts

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.

Page 36: Patron mvc struts

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.

Page 37: Patron mvc struts

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

Page 38: Patron mvc struts

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.

Page 39: Patron mvc struts

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.

Page 40: Patron mvc struts

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.

Page 41: Patron mvc struts

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.

Page 42: Patron mvc struts

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.

Page 43: Patron mvc struts

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" %>

Page 44: Patron mvc struts

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>

Page 45: Patron mvc struts

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">

Page 46: Patron mvc struts

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.

Page 47: Patron mvc struts

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.

Page 48: Patron mvc struts

Struts: Internacionalización (…)

Ejemplo:login.titulo = Ingreso al Sistemalogin.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).

Page 49: Patron mvc struts

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.

Page 50: Patron mvc struts

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>

Page 51: Patron mvc struts

Struts: Internacionalización (…)

Por ultimo se utiliza el Tag <bean:message key="clave.subclave"/> donde clave y subclave corresponden al texto por el que se reemplazará según el idioma del usuario.

Ejemplo: <H1> <bean:message key="login.titulo"/> </H1>

Page 52: Patron mvc struts

Struts: Utilización I En el struts-config.xml

<action path="/Welcome"forward="/pages/Welcome.jsp"/>

En el JSP inicial <html:link page="/Welcome.do">Primera peticion al

controlador</html:link> En Welcome.jsp

Page 53: Patron mvc struts

Struts: Utilización I (…) <%@ taglib uri="/tags/struts-bean" prefix="bean" %>

<%@ taglib uri="/tags/struts-html" prefix="html" %><html:html locale="true"><head> <title><bean:message key="welcome.title"/></title><html:base/></head><body bgcolor="white"><h3><bean:message key="welcome.heading"/></h3><p><bean:message key="welcome.message"/></p>

</body></html:html>

Page 54: Patron mvc struts

Struts: Utilización II En el struts-config.xml

<action path="/TestAction" type= “aplicacion.TestAction“ > <forward name="testAction" path= "/pages/TestAction.jsp"/> </action>

En el JSP inicial <html:link page="/TestAction.do">Test the

Action</html:link>

Page 55: Patron mvc struts

Struts: Utilización II (…) TestAction .java

import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;

public class TestAction extends Action{public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws Exception{return mapping.findForward("testAction"); } }

Page 56: Patron mvc struts

Struts: Utilización II (…) En TestAction.jsp

<%@ taglib uri="/tags/struts-bean" prefix="bean" %><%@ taglib uri="/tags/struts-html" prefix="html" %><html:html locale="true"><head>

<title><bean:message key=“test.title"/></title></head><body bgcolor="white"><h3><bean:message key=“test.mensaje"/></h3>

</body></html:html>

Page 57: Patron mvc struts

Apache Struts Project La organización principal, a la cual

pertenece este proyecto es la Apache Software Foundation.

Apache Struts Project es la comunidad de desarrollo de código abierto que se encarga de crear y mantener el Apache Struts Framework.

Está formado por un grupo diverso de voluntarios con sentido de colaboración.

Page 58: Patron mvc struts

Apache Struts Project (…) El proyecto es llamado "Struts“ porque la

finalidad del framework es proporcionar algo como "bases invisibles" que soporten el desarrollo de aplicaciones profesionales.

Struts nos proporciona el pegamento que une diversos elementos de la plataforma Java en un todo coherente.

Page 59: Patron mvc struts

Apache Struts Project (…) El objetivo del proyecto es aprovechar los

estándares existentes mediante la producción de las piezas que faltan para ser capaces de crear aplicaciones de categoría empresarial que sean fáciles de mantener en el tiempo.

Ofrece dos versiones principales del framework Struts.

Page 60: Patron mvc struts

Apache Struts Project (…) Struts 1 es reconocido como el framework más

popular para aplicaciones Web en Java. Este framework, en su versión 1.x, es maduro,

está bien documentado, y cuenta con un amplio soporte.

Es la mejor alternativa para afrontar problemas comunes de desarrollo.

Page 61: Patron mvc struts

Apache Struts Project (…) Struts 2 fue originalmente conocido como

WebWork 2; después de trabajar independientemente por varios años, las comunidades de Struts y WebWork unieron fuerzas para crear Struts 2.

El framework 2.x es la mejor opción para afrontar elegantemente los problemas difíciles del desarrollo.

Page 62: Patron mvc struts

Apache Struts Project (…) Struts 2 es un elegante y extensible framework

para la creación de la empresa de aplicaciones web en Java.

El framework está diseñado para apoyar el ciclo completo de desarrollo, desde la construcción, el despliegue y a lo largo del periodo de mantenimiento de las aplicaciones.

Page 63: Patron mvc struts

Links de interés http://struts.apache.org/ http://struts.apache.org/2.x/ http://struts.apache.org/1.x/ http://www.roseindia.net/struts/