Struts en Java

62
Struts : MVC en Java 8º Seminario Internacional de Informática y Sistemas Ing. Ana María Pacheco Aspilcueta

Transcript of Struts en Java

Page 1: Struts en Java

Struts : MVC en Java

8º Seminario Internacional de Informática y Sistemas

Ing. Ana María Pacheco Aspilcueta

Page 2: Struts en Java

Agenda

Introducción Conceptos fundamentales Apache Struts Framework

Características Controlador Vista Modelo Utilización

Apache Struts Project

Page 3: Struts en Java

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: Struts en Java

Introducción (…)

Cuando aparecieron los Servlets Java, los desarrolladores se dieron cuenta de que eran más rápidos y más potentes que el CGI estándar, eran portables y extensibles.

Lo problemático del asunto era el hecho de tener que escribir infinitas sentencias println() para enviar código HTML al navegador. Como respuesta a esto surgieron las JavaServer Pages.

Page 5: Struts en Java

Introducción (…)

Los JSP permiten escribir código Java dentro de ellos, pudiendo así mezclar fácilmente HTML con Servlets y tener todas las ventajas de éstos.

Sin embargo este modelo no resolvía todavía los problemas propios de las aplicaciones Web, como control de flujo por ejemplo.

Page 6: Struts en Java

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: Struts en Java

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: Struts en Java

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: Struts en Java

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: Struts en Java

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.

Page 11: Struts en Java

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: Struts en Java

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: Struts en Java

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: Struts en Java

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: Struts en Java

Patrón MVC: Funcionamiento

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: Struts en Java

Patrón MVC: Funcionamiento (…)

El controlador tiene almacenado la relación entre las posibles peticiones y la lógica de negocio que les corresponden.

Page 17: Struts en Java

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 18: Struts en Java

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 19: Struts en Java

Apache Struts Framework

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 20: Struts en Java

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.

Page 21: Struts en Java

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.

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 22: Struts en Java

Apache Struts Framework (…)

Facilita y soporta la construcción de la interfaz de la aplicación utilizando un conjunto de tags predefinidos.

Se busca es evitar el uso de scriptles, que son trozos de código Java entre “<%” y “%>”; para ganar mantenibilidad y performance.

Permite el desarrollo de sus componentes en paralelo o por personal especializado.

Page 23: Struts en Java

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 24: Struts en Java

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 25: Struts en Java

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 26: Struts en Java

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 27: Struts en Java

Struts: Funcionamiento (…)

Page 28: Struts en Java

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 29: Struts en Java

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 30: Struts en Java

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 31: Struts en Java

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 32: Struts en Java

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 33: Struts en Java

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 34: Struts en Java

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 35: Struts en Java

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 36: Struts en Java

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 37: Struts en Java

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 38: Struts en Java

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 39: Struts en Java

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 40: Struts en Java

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 41: Struts en Java

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 42: Struts en Java

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://jakarta.apache.org/struts/tags-html" prefix="html" %>

Page 43: Struts en Java

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 44: Struts en Java

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 45: Struts en Java

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 46: Struts en Java

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 47: Struts en Java

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

Page 48: Struts en Java

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 49: Struts en Java

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 50: Struts en Java

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 51: Struts en Java

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 52: Struts en Java

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 53: Struts en Java

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 54: Struts en Java

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 55: Struts en Java

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 56: Struts en Java

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 57: Struts en Java

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 58: Struts en Java

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 59: Struts en Java

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 60: Struts en Java

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 61: Struts en Java

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 62: Struts en Java

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/