Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Struts

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 15

8/3/2014

A&DEV

MANUAL STRUTS 1.2.X

Introduccin al Framework Struts 1.2.x. v0.1 | Garca Rivera Juan Pablo

Contenido
Primeros Pasos .................................................................................................................................... 1 Instalacin ....................................................................................................................................... 1 Configuracin .................................................................................................................................. 5 Mapeo en Struts .................................................................................................................................. 9 Mapeo simple.................................................................................................................................. 9 Mapeo utilizando Action ................................................................................................................. 9 La clase Action ................................................................................................................................... 10

Objetivo Introducir al interesado en la utilizacin del Framework Struts 1.2.x y hacer que este sea capaz de poder implementar la tecnologa en sus proyectos futuros.

Primeros Pasos
Instalacin
Antes de iniciar tenemos que bajar la versin a utilizar del Framework, Struts es un Framework soportado por Apache el cual nos pone a nuestra disposicin dicha herramienta en el siguiente enlace http://archive.apache.org/dist/struts/struts-1.2.2/jakarta-struts-1.2.2.zip, una vez que cuentes con el archivo ya en tu ordenador lo que sigue es proceder a descomprimir el archivo, a lo cual te crear un directorio llamado jakarta-struts-1.2.2 donde hayas indicado que fuera descomprimido; accederemos a este directorio hasta ~/jakarta-struts-1.2.2/dist/lib, en este nivel encontraremos los archivos .jar y .tld que necesitamos para poder implementar este Framework. Proseguiremos a crear un proyecto en el cual deseemos implementar esta herramienta para lo cual nos valdremos del IDE eclipse Indigo se ha utilizado esta versin por motivos personales debido a que esta es la ltima versin de eclipse que soporta a BEA Weblogic 8.1, sin embargo, eres libre de elegir cualquier versin de este IDE. A continuacin se mostrara el proceso para crear un proyecto web dinmico de forma visual:

Ilustracin 1: Creacin de un proyecto Web Dinmico

En caso de no ver la opcin para crear dicho proyecto ingresa a la opcin Other y veras lo siguiente:

Ilustracin 2: Asistente creacin de proyectos

Bajo la etiqueta Wizards: veras un cuadro de texto en el cual escribiremos parte del tipo de proyecto que deseamos, en este caso Dynamic Web Project y a continuacin el asistente nos mostrara el resultado en la parte de abajo:

Ilustracin 3: Utilizando filtro del asistente

Seleccionamos la opcin disponible y continuamos dando clic en el botn Next >: 2

Ilustracin 4: Asistente de configuracin del proyecto web dinmico

Asegura te de asignar un nombre a tu proyecto, tambin es necesario especificar en qu contenedor web se har la ejecucin; existen muchas opciones a la hora de elegir un contenedor web como: Tomcat, Glassfish, Weblogic, JBoss Application Server. En este ejemplo utilizaremos 3

JBoss AS. Por ltimo queda la versin de Dynamic web module el cual es el responsable para utilizacin del Servlet API, para este y los futuros proyectos se utilizara la versin 2.5 y terminamos presionando el botn Finish.

Ilustracin 5: Estructura del nuevo proyecto

Aqu cabe notar las carpetas Java Resource y WebContent, en la primera se colocara todo el cdigo fuente correspondiente del proyecto y en el segundo irn los archivos pblicos de nuestro proyecto como los archivos .jsp, archivos de estilo .css, archivos de imagen y archivos javascript .js; Tambin veremos que aqu se encuentra el directorio WEB-INF dentro del cual se encuentra la el directorio lib y el archivo web.xml, este ltimo es muy importante ya que en l se especifican las configuraciones de nuestra aplicacin web, el directorio lib como su nombre lo indica es un directorio destinado para albergar libreras necesarias para nuestro proyecto y el cual tiene una referencia desde la carpeta Libraries dentro de Java Resources. En este punto lo que queda por hacer es copiar todos los archivos .jar que estn dentro de la carpeta ~/jakarta-struts-1.2.2/dist/lib que habamos descomprimido dentro de la carpeta /WebContent/WEB-INF/lib y as mismo todos los archivos .tld y el archivo validator-rules.xml de ~/jakarta-struts-1.2.2/dist/lib dentro de /WebContent/WEB-INF quedando de la siguiente manera: 4

Ilustracin 6: Estructura final del WebContent

Configuracin
Ahora que ya sabemos cmo instalar Struts, debemos configurarlo para que este se ponga en accin, para ello ya se haba mencionado que dentro del proyecto existe un archivo llamado web.xml, en el vamos a configurar un objeto muy importante que nos permite hacer uso de las ventajas del Framework, el objeto ActionServlet este objeto funciona como el controlador, dentro del web.xml de nuestro proyecto pondremos la siguiente especificacin:

<servlet> <servlet-name>action</servlet-name> <servlet-class> org.apache.struts.action.ActionServlet </servlet-class> <init-param> <param-name>config</param-name> <param-value> /WEB-INF/struts-config.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>

Como se muestra en la configuracin anterior existe una referencia a un archivo llamado struts config.xml dentro del directorio /WEB-INF, crea este archivo con el siguiente contenido:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <data-sources> </data-sources> <form-beans> </form-beans> <global-forwards> </global-forwards> <action-mappings> </action-mappings> <controller> </controller> </struts-config>

Ms tarde se hablara de este archivo, siguiendo con la configuracin principal dentro del archivo web.xml seguido de la especificacin del objeto ActionServlet como un servlet, se especificara la siguiente seccin:
<servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>

Esta seccin le indica a struts la forma de acceder a nuestras funciones por ejemplo: si especificramos una funcin Test tendramos que escribir en el navegador despus de la ruta absoluta de nuestro proyecto Test.do quedando de la siguiente manera http://localhost:8080/miproyecto/Test.do, si en el <url-pattern> especificramos algo como <url-pattern>/do/*</url-pattern> entonces especificaramos algo como lo siguiente: http://localhost:8080/miproyecto/do/Test. Esta seccin nos sirve para ocultar de cierto modo el recurso real al que intentamos acceder. Tenemos que tener cuidado de tener cierto orden en cuanto a las secciones especificadas en nuestro archivo web.xml estas estn regidas por la especificacin del DOCTYPE que tambin puede ser remplazada por la especificacin del <web-app>, si en algn momento se nos muestra un error en el esquema del web.xml revisa la especificacin. Por tanto, despus del <servletmapping> sigue el <welcome-file-list> en esta seccin no hay mucho que modificar, esta seccin se encarga de especificar que archivos se auto ejecutaran cuando se acceda a un directorio raz de nuestra aplicacin desde el navegador, como por ejemplo el index.html. Por ltimo sigue la especificacin de los taglibs, esta seccin no es obligatoria y solo se especificara si y solo si nos proponemos a usar los taglibs que nos ofrece Struts, un ejemplo de esta seccion sera el siguiente:

<jsp-config> <taglib> <taglib-uri>/WEB-INF/struts-bean</taglib-uri> <taglib-location>/WEB-INF/struts-bean</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-html</taglib-uri> <taglib-location>/WEB-INF/struts-html</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-logic</taglib-uri> <taglib-location>/WEB-INF/struts-logic</taglib-location> </taglib> </jsp-config>

Al final tendremos una especificacin de nuestro web.xml como la siguiente:


<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/webapp_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>jBossStrutsProject</display-name> <servlet> <servlet-name>action</servlet-name> <servlet-class> org.apache.struts.action.ActionServlet </servlet-class> <init-param> <param-name>config</param-name> <param-value> /WEB-INF/struts-config.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <jsp-config> <taglib> <taglib-uri>/WEB-INF/struts-bean</taglib-uri> <taglib-location>/WEB-INF/struts-bean</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-html</taglib-uri> <taglib-location>/WEB-INF/struts-html</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-logic</taglib-uri> <taglib-location>/WEB-INF/struts-logic</taglib-location> </taglib>

</jsp-config> </web-app>

La estructura final de nuestro proyecto sera la siguiente:

Ilustracin 7: Estructura final del proyecto

Mapeo en Struts
Dentro del archivo struts-config.xml existe la seccin <action-mappings> la cual se encarga de indicarle al ActionServlet como acceder a nuestros recursos mediante un mapeo, en esta seccin podremos realizar algunos tipos de mapeos tales como mapeos directos los cuales solo se especifica el recurso pero no hay retorno de ningn objeto, y un mapeo con retorno el cual dependiendo el retorno se realizar alguna accin.

Mapeo simple
Al hacer un mapeo de este tipo principalmente lo hacemos haciendo referencia a un archivo .jsp o podramos hacerlo hacia una clase que se encargue de crear el resultado en HTML sea cual sea el caso el uso bsico en el <action-mappings> serial el siguiente:
<action-mappings> <action path="/Test" forward="/test.jsp" /> </action-mappings>

Como se nota una accin se declara por medio de la etiqueta <action path="" forward="" /> el cual utilizando los atributos path especifica el acceso y fordward especifica el retorno con ello el anterior ejemplo nos dara como resultado al ejecutar nuestra aplicacin y colocar la siguiente direccin http://localhost:8080/miproyecto/Test.do en el navegador, el contenedor web automticamente nos devolver directamente el contenido del archivo test.jsp que se encuentra en directorio WebContent de nuestro proyecto.

Mapeo utilizando Action


El siguiente ejemplo es un poco ms extenso pero ilustra un poco mejor el uso de la etiqueta action:
<action path="/Hello" type="dev.myserver.mystrutsproject.action.HelloWorldAction"> <forward name="success" path="/jsp/home.jsp" /> </action>

Como se nota, se especifica nuevamente una accin pero ahora utilizando el atributo type haciendo referencia a una clase; esta clase debe extender de org.apache.struts.action.Action el cual es el objeto que utiliza el controlador de Struts para atender las solicitudes Request dependiendo la especificacin en el struts-config.xml, as mismo se nota que se ha colocado una etiqueta <forward name="" path="" /> el cual dependiendo la respuesta que nos retorne el Action se utilizara un forward para regresar el resultado. En el ejemplo forward est esperando que el Action responda con success que esta especificado en el atributo name, path por su parte le dice al controlador que debe dar como resultado el uso de home.jsp que est dentro del directorio /WebContent/jsp de nuestro proyecto, una accin puede esperar varias respuestas del Action, por tanto podramos especificar varias etiquetas fordwad como por ejemplo:

<action path="/Hello" type="dev.myserver.mystrutsproject.action.HelloWorldAction"> <forward name="success" path="/jsp/home.jsp" /> <forward name="error" path="/jsp/error.jsp" /> <forward name="alert" path="/jsp/alert.jsp" /> </action>

Incluso podramos hacer referencia a otra accin colocando en el path=Accion.do y aadiendo despus de este el atributo redirect=true.

La clase Action
La clase Action es la responsable de atender las solicitudes Request que son enviadas del lado del cliente, ya sea mediante el mtodo Post o Get. Para poder hacer uso de esta clase basta con extender de ella, ejemplo:
package dev.myserver.mystrutsproject.action; 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; import dev.myserver.mystrutsproject.form.LoginForm; public class HelloWorldAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){ return mapping.findForward("success"); } }

Al extender de esta clase deberemos crear el mtodo principal que es llamado para atender el Request el cual es el execute este mtodo retorna un objeto de tipo ActionFordward el cual representa el retorno esperado de la accin llamada por el controlador que est en el strutsconfig, as mismo esta funcin execute tiene tres parmetros de entrada ActionMapping, ActionForm, HttpServletRequest y un HttpServletResponse. El primero ActionMapping segn Struts representa la informacin que el Controlador conoce sobre el mapeo de un Request en particular y poder seleccionar una accin en particular en la clase Action que fue invocada, ActionForm es un JavaBean opcional relacionado con uno o varios ActionMapping que puede tener sus valores inicializado, este objeto es utilizado para representar un formulario del lado de la vista y as mismo lo podremos utilizar como trasporte entre la capa de negocio hacia la vista, por 10

tanto quiere decir que si creamos un objeto que represente el formulario, este podra variar un poco segn lo ocupemos o no para trasportar informacin, veamos un ejemplo: Primero debemos crear un form del lado jsp

Ilustracin 8: Vista y cdigo del formulario a utilizar

Ahora debemos crear un ActionForm que represente este formulario el cual quedara de la siguiente manera:
package dev.myserver.mystrutsproject.form; import org.apache.struts.action.ActionForm; public class LoginForm extends ActionForm{ private static final long serialVersionUID = 1L; private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }

Para poder hacer uso de este objeto de Struts debemos extender de org.apache.struts.action.ActionForm una vez hecho esto, como se nota en el ejemplo deberemos especificar variables con los mismos nombres de los campos que hemos especificado en el formulario con su atributo property y tambin crear los getters y setters correspondientes de cada uno, con esto solo falta hacer uso de nuestro nuevo formulario en el action:

11

package dev.myserver.mystrutsproject.action; 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; import dev.myserver.mystrutsproject.form.LoginForm; public class HelloWorldAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){ LoginForm login = (LoginForm)form; if( login. getUsername().equals(root) && login. getPassword ().equals(toor) ){ return mapping.findForward("success"); }else{ return mapping.findForward("error"); } } } Struts automticamente har uso de los setters de nuestra clase LoginForm y asignara el valor correspondiente proveniente del formulario en el jsp.

12

También podría gustarte