Eduardo Saavedra A. Desarrollo de aplicación en Struts Desarrollo de aplicación de prueba. Eduardo Saavedra A. 21/10/2009 Tabla de contenido 1 Introducción al primer Proyecto Struts ................................................................................. 3 1.1 Introducción .................................................................................................................. 3 1.1.1 1.2 2 Requerimientos básicos: ....................................................................................... 3 Nociones de MVC .......................................................................................................... 4 Desarrollo del primer Proyecto Struts .................................................................................. 5 2.1 Interfaz de inicio ............................................................................................................ 6 2.2 Struts Config .................................................................................................................. 9 2.3 Vista ............................................................................................................................. 11 2.4 Controlador ................................................................................................................. 15 2.5 Interfaz de respuesta .................................................................................................. 18 2.6 Pruebas........................................................................................................................ 19 1 Introducción al primer Proyecto Struts 1.1 Introducción Se generará un proyecto que mostrará lo básico y a su vez la base de struts. Las aplicaciones en struts tiene la siguiente forma de ejecución en el servidor de aplicaciones: Figura 1 Paso 1: El cliente (generalmente un navegador) genera una solicitud que es atendida por el Controller (un Servlet especializado). Paso 2-3: El mismo 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. Paso 4-5-6: Según el resultado que retorne el Action, el Controller derivará la generación de interfaz a una o más JSPs, las cuales podrán consultar los objetos del Model a fines de realizar su tarea. Struts al ser una framework MVC de desarrollo de aplicaciones WEB requiere que los desarrolladores tengan conocimiento o nociones básicas de estas aplicaciones. Además la generación de interfaces visuales se basa totalmente en HTML. 1.1.1 Requerimientos básicos: Conocimientos en HTML Funcionamiento de aplicaciones WEB en general Programación JAVA Sintaxis XML 1.2 Nociones de MVC Modelo Vista Controlador (MVC) es un patrón de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de control en tres componentes distintos. El patrón MVC se ve frecuentemente en aplicaciones web, donde la vista es la página HTML y el código que provee de datos dinámicos a la página. El modelo es el Sistema de Gestión de Base de Datos y la Lógica de negocio, y el controlador es el responsable de recibir los eventos de entrada desde la vista. Java bajo su plataforma J2EE posee varios frameworks para implementación MVC: Java / J2ee Apache Struts Java / J2ee Apache Beehive Java / J2ee Apache Spring Java / J2ee Apache JavaServerFaces Asimismo en otras plataformas como PHP y .NET: PHP BSD Zend Framework PHP MIT CakePHP PHP GPL Symfony .NET Apache Spring .NET .NET MS-PL ASP.NET MVC La idea del MVC se adopto fuertemente para el desarrollo de aplicaciones WEB dando gran espacio en el mercado para aplicaciones, escalables, seguras, robustas, “forzando” el bajo acoplamiento y alta cohesión. Aunque se pueden encontrar diferentes implementaciones de MVC, el flujo que sigue el control generalmente es el siguiente: 1. El usuario interactúa con la interfaz de usuario de alguna forma (por ejemplo, el usuario pulsa un botón, enlace, etc.) 2. El controlador recibe (por parte de los objetos de la interfaz-vista) la notificación de la acción solicitada por el usuario. El controlador gestiona el evento que llega, frecuentemente a través de un gestor de eventos (handler) o callback. 3. El controlador accede al modelo, actualizándolo, posiblemente modificándolo de forma adecuada a la acción solicitada por el usuario (por ejemplo, el controlador actualiza el carro de la compra del usuario). Los controladores complejos están a menudo estructurados usando un patrón de comando que encapsula las acciones y simplifica su extensión. 4. El controlador delega a los objetos de la vista la tarea de desplegar la interfaz de usuario. La vista obtiene sus datos del modelo para generar la interfaz apropiada para el usuario donde se refleja los cambios en el modelo (por ejemplo, produce un listado del contenido del carro de la compra). El modelo no debe tener conocimiento directo sobre la vista. 5. La interfaz de usuario espera nuevas interacciones del usuario, comenzando el ciclo nuevamente. 2 Desarrollo del primer Proyecto Struts Tomando como base el documento StrutsLab1 se procederá a confeccionar la aplicación y siguiendo con el flujo expuesto en la fig1 se crearan os distintos archivos representantes de cada parte del framework. El objetivo de la aplicación será crear un simple formulario que redireccionará mediante un botón a una página de respuesta mostrando los datos ingresados en el formulario. Por medio de esta actividad se verá de forma práctica el flujo MVC que realiza Struts. 2.1 Interfaz de inicio Del laboratorio anterior se tomará el index.jsp encontrado en la carpeta raíz de WebPages que muestra NetBeans. Debería tener el siguiente contenido: Con algo de conocimiento HTML y de los tags ofrecidos nativamente por Struts se debe llegar a lo siguiente: Si bien no es HTML puro debido a que hay tags especiales, su forma es similar y contenida.De forma particular el significado de los tags es: 1. De la línea 1 a 5 se “importan” las “Tag libraries” que el archivo JSP utilizará. 2. Entre las líneas 7 a 46 se encuentra el contenido a mostrar: 2.1. Las líneas 8 a 12 muestran las cabeceras a utilizar, esto es típico en el HTML, se utilizan los tags “meta”, “title”, “link”, “script”, etc. 2.2. De la 14 a la 45 está el cuerpo del HTML: 2.2.1.El tag especial “html” en la línea 16 utiliza la tag library HTML llamada en la línea 4, este tag indica que se utilizará un FORM con un action especifico hasta la línea 43. 2.2.2.Luego se utiliza una “table” genérica del HTML, donde cada “tr” es una fila y cada “td” una columna, dentro de la tabla se aprecian varios tags “html” y unos “vean” 2.2.3.Los tags vean como el de la línea 21 espera a que llegue una variable por parte de la clase SaludaForm llamada error, esta clase debe tener sus respectivos get y set. 2.2.4.El tag “html” de la línea 26, 30 y 34 generan un campo de tipo texto con sus respectivas propiedades (nombre, edad, email) 2.2.5.El último de la línea 38 genera un botón “submit” con el valor Saluda. 2.3. Finalmente en la línea 44 se suele llamar a un tag llamado errors, que se verá más adelante. Perfecto, veamos qué ocurre si se llama a la aplicación a través de un navegador, para esto se debe “ejecutar” el proyecto: La respuesta es: Si se ve la traza de este error, se puede llegar rápidamente a la conclusión: “No se puede recuperar la definición para el Bean SaludaForm en la acción “/saluda”, esto hace referencia a las líneas 16/21 del jsp anterior. 2.2 Struts Config En este momento se introducirá un elemento fundamental para Struts el cual es su archivo de configuración, llamado: struts-config.xml Este archivo XML contiene todo lo relevante para el correcto funcionamiento de la aplicación, desde los mapeos hasta opciones detalladas de las acciones y vistas. El error que lanzó tomcat hace referencia a que falta asociar una acción a un form Bean que utilizamos en el JSP. El archivo struts-config.xml se encuentra en la carpeta WEB-INF del proyecto y por defecto se ve así: En la línea 22 hay un “action”, esta configuración indica que: cada vez que se llame a /Welcome a través del navegador el controlador devolverá la página welcomeStruts, para ser desplegada al cliente. Este config se cambiará al final del documento por lo siguiente (no editarlo aun!): En la línea 23 se bautiza un Formulario “SaludaForm” cuyo path es /saluda, su scope “request” y notese el type que hace referencia a un package cl.esati.myfirst.controllers.SaludaAction Dentro del action se crea un forward llamado “success” cuyo path a mostrar es la página success.jsp alojada e WEB-INF/pages El forward se gatilla cuando el Action “SaludaAction” lo indica. A continuación se verá como generar un Action mediante NetBeans 2.3 Vista Entonces se procederá primero a generar un ActionForm, cada pantalla (vista) de la aplicación web debería tener un ActionForm. Para crear uno en NetBeans: Habiendo creado un package haciendo referencia a “views” crear un archivo de categoría Striuts de tipo ActionForm Bean: Recordar que este Bean quedará en el package “views”. Si se observa nuevamente el archivo struts-config.xml se verá que se ha actualizado: Ahora se hace referencia a un form-bean mediante el nombre SaludaForm haciendo la llamada a la clase respectiva del package respectivo. El contenido “SaludaForm” debe tener los mismos campos que se muestran en el jsp creado inicialmente, por lo tanto se deben tener atributos: nombre edad email Entonces la clase SaludaForm tendrá: Nota: Favor de borrar lo que netbeans crea por defecto! Ahora hay que generar los métodos get y set: Y pinchar Generar El archivo quedará así: 2.4 Controlador Con esto Struts entenderá como obtener y dejar datos en los bean. Ahora falta crear una clase Action para llevar a ejecución la acción que corresponda según la interacción del usuario con la vista. Dar el nombre SaludaAction y definir el Action Path /saluda Luego seleccionar el Form Bean asociado al action y dejarlo como de scope Request: Debería crearse en el struts-config.xml: El archivo SaludaAction.java creado tendrá la siguiente estructura, por el momento no se editará, nótese la variable SUCCESS que representa a un string con valor “success”: Luego agregar dentro del struts-config.xml de ese tag action el siguiente forward: Esto indica que cuando el SaludaAction devuelva success (el string designado en el SaludaAction) se redirigirá a la página success.jsp dentro de la carpeta WEB-INF/pages El scope debe ser request ya que se utilizará tan solo una vez, el path es el mismo del archivo .jsp del formulario, el nombre del action se encontrará asociado al FORM creado anteriormente (SaludForm), esto hará que el form se instancie cuando se instancie el Action. Finalmente agregar al struts-config.xml el global forward 2.5 Interfaz de respuesta Falta crear la página “success.jsp” que se definió en el struts-config.xml: Los tags bean:write representan los atributos que se llenaron al momento de hacer el “POST” del formulario del “index.jsp”. 2.6 Pruebas Si se visita el index.jsp resultará lo siguiente