Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Esta tutorial explicar los primeros pasos usando los struts de Apache como framework para internet y eclipse como ambiente de desarrollo. Crearemos un ejemplo simple de una aplicain para biblioteca usando plugins libres como la consola Struts y JBOSS IDE.
Informacin General
Autor : Sebastian Hennebrder Sascha Wolski http://www.laliluna.de/tutorials.html Tutoriales para Struts, EJB, eclipse y xdoclet. Traduccin: Sebastian Arechederreta Dato : Enero, 20 th 2005 Herramientas De Desarrollo Eclipse 3.x Consola struts JBOSS IDE (al usar JBOSS) Sysdeo plugin (al usar Tomcat) Cdigo fuente: http://www.laliluna.de/assets/tutorials/first_steps_with_struts.zip
Uso del cdigo fuente. El cdigo fuente no incluye ninguna de las bibliotecas solo los fuentes. Cree un proyecto web, agregue las bibliotecas manualmente segn lo explicado en este tutorial. Luego extraiga los cdigos fuentes, que proporcionamos, a su proyecto. La versin pdf de este tutorial (en ingls). http://www.laliluna.de/assets/tutorials/first_steps_with_struts_es.pdf
Requisitos 1 Instalacin de la consola struts 2 Crear un proyecto web 2 Agregando soporte struts 2 Crear una pgina de bienvenida por defecto 4 Global Action Forwards y Action Mapping 5 Caso de uso: lista de libros 6 Caso de uso: Agregar, editar y borrar datos 15 Cambios a la lista de libros JSP 21 Prueba de la aplicacin 22
Requisitos
Requerimientos para la instalacin de JBOSS IDE, cuando est utilizando JBOSS como servidor de aplicacin. Una tutorial de cmo crear y distribuir proyectos web con la JBOSS IDE se puede encontrar aqu. http://www.laliluna.de/webprojects-eclipse-jbosside-tutorial-en.html
Cuando se utiliza Tomcat, se puede utilizar el plugin de eclipse http://www.sysdeo.com/eclipse/tomcatPlugin.html como alternativa.
el cul fue mencionado en los requisitos. Desarrolle un proyecto web como se explica all.
Usted encontrar los archivos JAR en Project > WebRoot > WEB-INF > lib . Utilice SHIFT para seleccionar mltiples archivos jar.
Usted encontrar el archivo index.jsp en la carpeta WebRoot del proyecto. Debemos agregar las bibliotecas de etiqueta de struts a nuestro JSP. Necesitamos bibliotecas de etiqueta (Tag Libraries)para utilizar etiquetas de struts en un JSP. En este caso necesitamos solamente la biblioteca de la lengeta de la lgica de struts. Cambie su contenido de JSP al siguiente.
<% @page contentType="text/html" %> <% @page language="Java" %> <% @taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %> <logic:forward name="welcome"/>
La etiqueta logic:forward hace que Struts busque una redireccin (forward) en el archivo de configuracin. Cuando no se puede encontrar esta redireccin occure una excepcin. Explicamos la action forward en el captulo siguiente.
<%@ page language="java"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html:html locale="true"> <head> <html:base /> <title>index.jsp</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="Esta es mi pgina"> </head> <body> Bienvenido! <br> <html:link action="bookList">Mostrar lista de libros</html:link> </body> </html:html>
Qu es un mapa de accin (action mapping)? El mapa de accin es el corazn de struts. Maneja todas las acciones entre la aplicacin y el usuario. Usted puede definir qu accin ser ejecutada creando un mapa de accin (Action Mapping). El diagrama le muestra, cmo el servidor de aplicacin maneja la peticin del index.jsp o una accin no mapeada.
En el primer paso creamos una nueva accin mapeada. Abra el archivo struts-config.xml de la configuracin de struts, que est situado en WebRoot/WEB-INF. Se abre la consola de struts. (si no, botn derecho sobre struts-config.xml y seleccine "open with".
Marque Action Mapping y y seleccione Add. Escriba /default como Path y seleccione el tipo de accin Forward. Usaremos como pgina de bienvenida /jsp/default.js
En el paso siguiente crearemos la accin global forward. Marque "Global Forwards", seleccione "add". Elija /default.do como Path, que es la accin que especificamos antes.
Una accin de struts siempre hace una cierta lgica del negocio y guarda el resultado en una clase del tipo ActionForm. Los datos del ActionForm se pueden mostrar en un JSP. Nuestra Action leer datos de una base de datos, guardandolos en ActionForm. El JSP exhibir nuestros datos.
La clase Libro representa un libro con las propiedades: id, autor, ttulo y disponibilidad.(id, author, title y available) Cree cuatro variables.
Cree un getter y un setter para cada una de las variables. Botn derecho en su clase, Source > Generate Getters and Setters
Agregue dos constructores a la clase para fijar las propiedades en la inicializacin de la clase.
// Contructor para propiedades iniciales public Book(long id, String author, String title, boolean available) { this.id = id; this.author = author; this.title = title; this.available = available; }
JSP.
Abra struts-config.xml y agregue un nuevo form bean con la consola de struts. El tipo es nuestra ltima clase creada.
public class BookListForm extends ActionForm { private Collection books; /* lalinuna.de 02.11.2004 * obtiene la collection de libros */ public Collection getBooks() { return books; } /* lalinuna.de 02.11.2004 * establece la collection de libros */ public void setBooks(Collection books) { this.books = books; } /* lalinuna.de 02.11.2004 * limpia la collection de libros */ public void reset(ActionMapping arg0, HttpServletRequest arg1) } } books = new ArrayList();
En nuestra clase hemos definido cada vez una coleccin de libros y los mtodos de acceso (getters y setters).El mtodo reset es llamado por struts cada vez que un formulario es inicializado. Cuando su estructura es requerida, ste es en cada peticin.
);
return mapping.findForward("showList");
Clase SimulateDB
No utilizaremos una base de datos verdadera en este tutorial sino una simulacin de la base de datos. Copie el archivo SimulateDB.java del cdigo fuente que proporcionamos como una descarga arriba del paquete de.laliluna.tutorial.library.
Cree un Forward pata la Action Mapping del JSP con el nombre showList
La marca <logic:iterate> recorre la coleccin de libros del form bean bookListForm Con la marca <logic:iterate> se tiene acceso a las propiedades de un libro. La marca <bean:write> muestra la propiedad (author, title) de la posicin actual. <html:checkbox> crea una casilla de verificacin.
Esto es produccin fuuuhh, tenemos nuestro form Bean con una Action Form Class, nuestro Action Mapping con su Action Class y JSP, y los servicios necesarios activos. Muy bien. Tenemos que crear un action class que gaurde los datos en un action form. Para mostrar la lista de libros hemos creado un JSP que utiliza los datos en action form. Fcil, no?. Si quiere puede hacer una prueba de la aplicacin ahora. Mire al final del tutorial como probarla.
Genere los getters y setters. Luego herede todos los mtodos de la clase Book.
book.setId(id); } public void setTitle(String title) { book.setTitle(title); } public String toString() { return book.toString(); }
El mtodo editBook obtiene el parmetro id de la solicitud y lee el libro segn el id desde la base de datos simulada. El forward showEdit se refiere a la pgina bookEdit.jsp
/** * Method deleteBook * @param mapping * @param form * @param request * @param response * @return ActionForward */ public ActionForward deleteBook( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { BookEditForm bookEditForm = (BookEditForm) form; /* lalinuna.de 04.11.2004 * obtiene el id del libro de la solicitud */ long id = Long.parseLong(request.getParameter("id"));
/* lalinuna.de 04.11.2004 * inicia la clase SimulateDB y borra un libro segn el id */ SimulateDB simulateDB = new SimulateDB(); simulateDB.deleteBookById(id, request.getSession()); return mapping.findForward("showList"); }
El mtodo deleteBook obtiene el id de la solicitud y elimina el libro de la base de datos simulada. El forward showList actualiza la lista de libros con la pgina bookList.jsp
/** * Method addBook * @param mapping * @param form * @param request * @param response * @return ActionForward */ public ActionForward addBook( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { BookEditForm bookEditForm = (BookEditForm) form; return mapping.findForward("showAdd"); }
El ltimo mtodo obtiene el libro del form bean bookEditForm y lo guarda en la base de datos simulada. Luego la aplicacin muestra la lista de libros.
Configuracin Struts
Cree un nuevo form bean con la consola struts.
Cree un nuevo action mapping. Como parmetro especifique do. Este parmetro es necesario para el DispatchAction.
Cambie el Action.
Cree tres forwards en la lengeta ?forward tab?. Uno para el JSP que edita, otro para el JSP que agrega y otro para el que muestra la lista de libros.
Cree un JSP llamado bookAdd.jsp en la carpeta /WebRoot/jsp. El forward showAdd apuntar a esta pgina.
<%@ page language="java"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %> <html> <head> <title>Agregar un libro</title> </head> <body> <%-- crear un formulario html --%> <html:form action="bookEdit"> <%-- Mostrar los datos del formulario --%> <table border="1"> <tr> <td>Autor:</td> <td><html:text property="author" /></td> </tr> <tr> <td>Ttulo:</td> <td><html:text property="title" /></td> </tr> <tr> <td>Disponible:</td> <td><html:checkbox property="available" /></td>
</tr> <tr> <td colspan="2"> <html:submit>Guardar</html:submit> </td> </tr> </table> <%-- fijar el parmetro para dispatch action --%> <html:hidden property="do" value="saveBook" /> </html:form> </body> </html>
La etiqueta <html:form> crea un nuevo formulario HTML y se refiere con el parmetro action=?bookEdit? al action mapping. La etiqueta <html:text> crea un campo de texto con la propiedad autor del libro. <html:hidden> es un campo oculto con el nombre do. Necesitamos este campo oculto, porque le dice a la clase dispatch action que mtodo ser llamado. Abra el archivo bookEdit.jsp. Puede usar el cdigo del archivo bookAdd.jsp y cambiar las siguientes lneas.
<title>Editar un libro</title>
<%@ page language="java"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"%> <html> <head> <title>Show book list</title> </head> <body> <table border="1"> <tbody>
<%-- set the header --%> <tr> <td>Author</td> <td>Book name</td> <td>Available</td> <td> </td> <td> </td> </tr> <%-- check if book exists and display message or iterate over books --%> <logic:empty name="bookListForm" property="books"> <tr> <td colspan="5">No books available</td> </tr> </logic:empty> <logic:notEmpty name="bookListForm" property="books"> <logic:iterate name="bookListForm" property="books" id="book"> <tr> <%-- print out the book informations --%> <td><bean:write name="book" property="author" /></td> <td><bean:write name="book" property="title" /></td> <td><html:checkbox disabled="true" name="book" property="available" /> </td> <%-- print out the edit and delete link for each book --%> <td><html:link action="bookEdit.do?do=editBook" paramName="book" paramProperty="id" paramId="id">Edit</html:link></td> <td><html:link action="bookEdit.do?do=deleteBook" paramName="book" paramProperty="id" paramId="id">Delete</html:link></td> </tr> </logic:iterate> </logic:notEmpty> <%-- print out the add link --%> <tr> <td colspan="5"><html:link action="bookEdit.do?do=addBook">Add a new book</html:link> </td> </tr> <%-- end interate --%> </tbody> </table> </body> </html>
Prueba de la aplicacin
Inicie jboss y convierta el proyecto a un archivo paquete. (Esto est explicado en el tutorial JBOSS IDE, mencionado anteriormente). Llame al proyecto en su navegador favorito: http://localhost:8080/LibraryWeb/