Struts en Java 1205535054489007 2
Struts en Java 1205535054489007 2
Struts en Java 1205535054489007 2
Agenda
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 ()
Cuando aparecieron los Servlets Java, los desarrolladores se dieron cuenta de que eran ms rpidos y ms potentes que el CGI estndar, eran portables y extensibles. Lo problemtico del asunto era el hecho de tener que escribir infinitas sentencias println() para enviar cdigo HTML al navegador. Como respuesta a esto surgieron las JavaServer Pages.
Introduccin ()
Los JSP permiten escribir cdigo Java dentro de ellos, pudiendo as mezclar fcilmente HTML con Servlets y tener todas las ventajas de stos. Sin embargo este modelo no resolva todava los problemas propios de las aplicaciones Web, como control de flujo por ejemplo.
Introduccin ()
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-VistaControlador, 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 ()
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.
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.
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.
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.
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.
El controlador tiene almacenado la relacin entre las posibles peticiones y la lgica de negocio que les corresponden.
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.
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.
Es un framework de cdigo abierto para desarrollar aplicaciones Web J2EE usando el patrn de diseo Modelo-VistaControlador. 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.
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. Proporciona la integracin con el modelo, la lgica de negocio se implementa basndose en clases predefinidas por el framework y siguiendo el patrn Facade.
Facilita y soporta la construccin de la interfaz de la aplicacin utilizando un conjunto de tags predefinidos. Se busca es evitar el uso de scriptles, que son trozos de cdigo Java entre <% y %>; para ganar mantenibilidad y performance. Permite el desarrollo de sus componentes en paralelo o por personal especializado.
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.
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:
Struts: struts-config.xml ()
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.
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.
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.
Mtodo execute():
public ActionForward execute( ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response ) throws java.lang.Exception
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.
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.
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 multi-idioma, interaccin con formularios y otras utilidades. Para usar los Struts HTML Tags es necesario incluir la siguiente lnea en el JSP:
<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>
<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">
<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:
Struts: Utilizacin I
En el struts-config.xml
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> <html:link page="/TestAction.do">Test the Action</html:link>
En el JSP inicial
Struts: Utilizacin II ()
TestAction .java
importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importorg.apache.struts.action.Action; importorg.apache.struts.action.ActionForm; importorg.apache.struts.action.ActionForward; importorg.apache.struts.action.ActionMapping; publicclassTestAction extendsAction{ publicActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throwsException{ returnmapping.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>
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.
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.
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.
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.
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.
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