Patrón MVC con STRUTS. Agenda Introducción Conceptos fundamentales Apache Struts Framework...

Preview:

Citation preview

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 (…) 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 (2)

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.

Simplifica notablemente 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: Funcionamiento (…)

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>

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>

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

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>

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>

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");  } }

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>

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.

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.

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.

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.

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.

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.

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/

Recommended