You are on page 1of 63

Patrn MVC con STRUTS

Agenda

Introduccin Conceptos fundamentales Apache Struts Framework

Caractersticas Controlador Vista Modelo Utilizacin

Apache Struts Project

Introduccin ()

Las aplicaciones Web son diferentes a los sitios Web convencionales porque stas son capaces de crear una respuesta dinmica. Muchos sitios Web ofrecen slo pginas estticas, en cambio una aplicacin Web es capaz de interactuar con bases de datos y lgica de negocios con la finalidad de personalizar la respuesta a enviar.

Introduccin ()

Ventajas de los servlet frente a los CGI:


Ms rpidos Ms potentes Portables Extensibles

Desventajas

Escribir lneas infinitas println() para enviar cdigo HTML al navegador

Solucin

JavaServerPage

Introduccin ()
JSP permite escritura de cdigo Java dentro de ellos consiguiendo todas las ventajas tanto de los servlets como del cdigo HTML Sigue habiendo problemas propios de las aplicaciones web: El control de flujo

Introduccin ()

Las aplicaciones Web en general tienen tres aspectos a considerar en su desarrollo:


El

cdigo de acceso, insercin, consulta, actualizacin y/o eliminacin de los datos. El cdigo del diseo de las pginas a mostrar. El cdigo que controla el flujo de las pginas de la aplicacin.

Con la prctica nos damos cuenta que si una aplicacin Web grande tiene estos aspectos muy mezclados se vuelve difcil de mantener.

Introduccin ()

Una forma de separar estos aspectos es usando la arquitectura MVC: Modelo-Vista-Controlador, donde:
El

modelo representa a la lgica de negocios (manipulacin de datos). La vista representa la presentacin de los datos (diseo de pginas). El controlador representa el cdigo de navegacin de la aplicacin (control de flujo).

Patrones de Diseo

Los patrones de diseo son soluciones efectivas de problemas comunes en el diseo de software. La efectividad de un patrn ya ha sido comprobada. Un patrn es reusable. Los patrones facilitan el aprendizaje de los programadores inexpertos.

Patrones de Diseo ()

Los patrones de diseo se pueden clasificar, segn su propsito, en:

Patrones creacionales: abstraen el proceso de instanciacin y ocultan los detalles de cmo 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 Diseo ()

Patrones de comportamiento: tratan de cmo definir la comunicacin e interaccin entre los objetos de un sistema con la finalidad de reducir el acoplamiento entre stos.

Patrn MVC

El patrn de diseo Modelo-VistaControlador fue aportado originariamente por el lenguaje de programacin SmallTalk. Consiste en dividir una aplicacin en tres componentes: Modelo, Vista y Controlador. Se basa en la separacin de responsabilidades ya que cada una de las partes se encarga de un aspecto especfico y no interfiere con el de las otras.

Patrn MVC: Modelo

Representa las capas de lgica de negocios y persistencia de datos de la aplicacin. Est formada por todos los objetos de negocio que soportan los procesos propios del dominio de la aplicacin. 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.

Patrn MVC: Vista

Representa la capa de presentacin de los datos. Se encarga de mostrar la informacin al usuario, por lo tanto tiene que ver con el diseo y formateo de los datos para su presentacin. Interfaz de usuario para la interaccin con la aplicacin. En la vista solo se deben de realizar operaciones simples, como condiciones, ciclos, etc.

Patrn MVC: Controlador


Se encarga de controlar el flujo de la aplicacin. Tiene la funcin de recibir y responder a los eventos (acciones del usuario), convirtiendo stos en solicitudes de servicio. Adems, tiene que redirigir o asignar la parte de lgica de negocios a cada peticin. Cuenta con un mecanismo para guardar las correspondencias entre peticiones y respuestas que se les asignan. Cada accin del usuario causa que se inicie de nuevo un nuevo ciclo.

Patrn MVC: Funcionamiento (1)

El procesamiento de los datos se lleva a cabo entre sus tres componentes. El controlador recibe una peticin 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.

Patrn MVC: Funcionamiento (2)

Patrn MVC: Funcionamiento (3)

El controlador tiene almacenado la relacin entre las posibles peticiones y la lgica de negocio que les corresponden.

Patrn MVC: Ventajas


Separacin total entre las capas de presentacin, lgica de negocio y acceso a datos. Esta separacin es fundamental para el desarrollo de aplicaciones consistentes, reutilizables y ms fcilmente mantenibles, resultando en un ahorro de tiempo. En Java se puede implementar el patrn MVC con la clase Observer pero de una manera sencilla, sin embargo con Struts se aplica en toda una aplicacin Web convencional.

Frameworks

Un framework es la extensin de un lenguaje, a travs de una o ms jerarquas de clases que implementan una funcionalidad y que pueden ser extendidas de manera opcional.

Apache Struts Framework Un poco de historia

Originalmente fue creado por Craig R. McClanahan y donado al proyecto Jakarta de Apache Software Foundation en el ao 2000. En Junio de 2001 se libera la primera versin, y desde entonces muchos desarrolladores han participado en la mejora continua de este framework. Actualmente se ha lanzado una nueva versin de este framework, la cual se denomina Struts 2.

Apache Struts Framework ()

Es un framework de cdigo abierto para desarrollar aplicaciones Web J2EE usando el patrn de diseo Modelo-Vista-Controlador. Usa y extiende la Java Servlet API para motivar a los desarrolladores a adoptar la arquitectura MVC. Simplifica notablemente la implementacin de una aplicacin siguiendo la arquitectura del patrn 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 aplicacin se controla desde un archivo XML (struts-config.xml). Proporciona la integracin con el modelo, la lgica de negocio se implementa basndose en clases predefinidas por el framework y siguiendo el patrn Facade.

Apache Struts Framework ()

Facilita y soporta la construccin de la interfaz de la aplicacin utilizando un conjunto de tags predefinidos. Lo que se busca es evitar el uso de scriptles, que son trozos de cdigo 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 peticin proporcionado por el desarrollador de la aplicacin, 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 bsica para la implementacin del patrn MVC, permitiendo as que los desarrolladores puedan concentrarse en la lgica de negocios. El framework est compuesto por aproximadamente 300 clases e interfaces que estn 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 tambin se encarga de analizar la solicitud, seguir la configuracin que se le ha programado en su XML y llamar al Action correspondiente pasndole los parmetros enviados. El Action instanciar y/o utilizar los objetos de negocio para concretar la tarea.

Struts: Funcionamiento ()

Segn el resultado que retorne el Action, el Controlador derivar la generacin de interfaz a una o ms JSPs, las cuales podrn consultar los objetos del Modelo para mostrar informacin de los mismos.

Struts: Funcionamiento ()

Struts: Controlador

La clase ActionServlet es el corazn 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 peticin es manejada por Struts Action Servlet. Cuando el ActionServlet recibe la peticin intercepta la URL y basado en el archivo de configuracin struts-config.xml, dirige la peticin 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 patrn en su nomenclatura, por defecto *.do, pero ste se puede cambiar en el archivo web.xml.

Struts: struts-config.xml

Es el archivo de configuracin de Struts, aqu se mapean las acciones (peticiones). Seccin <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.

Seccin <action-mappings> contiene las definiciones de acciones, se usa un elemento <action> por cada accin, se definen los siguientes atributos:

Path: nombre de la clase action en relacin al contexto de la aplicacin. 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 ms de un forward, teniendo las siguientes propiedades:

Name: nombre del forward que ser utilizado al llamarlo desde la clase Action. Path: ruta de la pgina JSP.

Struts: Action Class

Una clase Action de una aplicacin Struts extiende a la clase org.apache.struts.action.Action. Una clase Action acta como un envoltorio para la lgica 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 especfico del modelo y retorna los resultados en sentido contrario.

Struts: Action Class ()

Una accin funciona como un adaptador entre una peticin HTTP entrante y la lgica de negocio creando una instancia de la Action correspondiente y ejecutando el mtodo execute(). Por lo tanto es necesario que la subclase sobreescriba el mtodo execute(). No se debe aadir lgica de negocio en ella, mejor utilizar otra capa DAO.

Struts: Action Class ()

Mtodo 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 parmetros son:

mapping - El ActionMapping usado para seleccionar esta instancia form - ActionForm bean para esta peticin, si existe request - La peticin HTTP que se est procesando response - La respuesta HTTP que se est creando.

Lanza una excepcin si en la lgica de negocio ocurre tambin una excepcin.

Struts: Action Form

Una de las tareas que consume mucho trabajo es la interaccin con formularios, ya sea para editar u obtener nueva informacin. Las comprobaciones, la gestin de errores, el volver a presentar el mismo form al usuario con los valores que puso y los mensajes de error estn 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 mtodos get y set para cada input de un formulario de una pgina, y los mtodos validate y reset. Se llena automticamente en el lado del servidor con los datos introducidos desde un formulario en el lado del cliente.

Struts: Modelo

Comprende toda la lgica del negocio, son las clases Java que el desarrollador tiene que implementar. No existe un formato definido para la creacin 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 presentacin de la informacin al usuario y del ingreso de sus datos. Muestran los datos proporcionados por los componentes del modelo. Struts provee soporte para construir fcilmente la interfaz de usuario a travs de la utilizacin de HTML Tag Library.

Struts: Vista ()
Pudiendo obtener aplicaciones multiidioma, interaccin con formularios y otras utilidades. Para usar los Struts HTML Tags es necesario incluir la siguiente lnea en el JSP:

<%@

taglib uri="http://struts.apache.org/tagshtml" 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 pgina. <html:message key="thekey"/> Busca el valor correspondiente al key dado en el archivos de recursos y lo muestra.

Struts: Internacionalizacin

Struts provee la facilidad de crear aplicaciones multilenguaje. Para crear una aplicacin multilenguaje se debe crear un archivo de texto (ej: ApplicationResources.properties) en el directorio donde se encuentren las clases de la aplicacin(ej. empresa/aplicacion) que contenga las claves y valores con el formato clave.subclave=texto de los textos que pertenezcan al idioma principal.

Struts: Internacionalizacin ()

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 cdigo ISO de idioma (ej: ApplicationResources_en.properties).

Struts: Internacionalizacin ()

En struts-config.xml se debe configurar el Tag /servlet/init-param/param-name application y ponerle como param-value la localizacin del archivo con el idioma principal.

Struts: Internacionalizacin ()

Ejemplo:
<servlet> <servlet-name>action</servlet-name> ... <init-param> <param-name>application</param-name> <param-value> empresa.aplicacion.ApplicationResources </param-value> </init-param>

Struts: Internacionalizacin ()

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

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

Struts: Utilizacin I

En el struts-config.xml

<action path="/Welcome" forward="/pages/Welcome.jsp"/> <html:link page="/Welcome.do">Primera peticion al controlador</html:link>

En el JSP inicial

En Welcome.jsp

Struts: Utilizacin 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: Utilizacin 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: Utilizacin 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: Utilizacin 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 organizacin principal, a la cual pertenece este proyecto es la Apache Software Foundation. Apache Struts Project es la comunidad de desarrollo de cdigo abierto que se encarga de crear y mantener el Apache Struts Framework. Est formado por un grupo diverso de voluntarios con sentido de colaboracin.

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 estndares existentes mediante la produccin de las piezas que faltan para ser capaces de crear aplicaciones de categora empresarial que sean fciles de mantener en el tiempo. Ofrece dos versiones principales del framework Struts.

Apache Struts Project ()

Struts 1 es reconocido como el framework ms popular para aplicaciones Web en Java. Este framework, en su versin 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; despus de trabajar independientemente por varios aos, las comunidades de Struts y WebWork unieron fuerzas para crear Struts 2. El framework 2.x es la mejor opcin para afrontar elegantemente los problemas difciles del desarrollo.

Apache Struts Project ()

Struts 2 es un elegante y extensible framework para la creacin de la empresa de aplicaciones web en Java. El framework est diseado para apoyar el ciclo completo de desarrollo, desde la construccin, el despliegue y a lo largo del periodo de mantenimiento de las aplicaciones.

Links de inters

http://struts.apache.org/ http://struts.apache.org/2.x/ http://struts.apache.org/1.x/ http://www.roseindia.net/struts/