Вы находитесь на странице: 1из 26

Struts MVC Architecture Tutorial

El modelo contiene la lgica de negocio e interacta con el almacenamiento de persistencia para almacenar, recuperar y manipular datos. La vista es responsable de mostrar los resultados de vuelta al usuario. En Struts la capa de vista se implementa utilizando JSP. El controlador maneja todas las peticiones del usuario y selecciona la vista apropiado para volver. En Sruts trabajo del controlador es realizado por el ActionServlet.

Los siguientes eventos ocurren cuando El navegador cliente emite una solicitud HTTP. El ActionServlet recibe la solicitud. El archivo struts-config.xml contiene los detalles de las acciones, ActionForms, ActionMappings y ActionForwards. Durante el inicio el ActionServelet lee el archivo struts-config.xml y crea una base de datos de objetos de configuracin. Ms tarde, durante el procesamiento de la solicitud, el ActionServelet toma la decisin de referenciar a este objeto.

Cuando el ActionServlet recibe la solicitud, realiza las siguientes tareas. Hace todos los valores de solicitud en una clase JavaBean que extiende Struts ActionForm class. Decide qu clase de accin invocar para procesar la solicitud. Validar los datos introducidos por el usuario. La clase de accin procesar la solicitud con la ayuda del componente de modelo. El modelo interacta con la base de datos y el proceso de la solicitud. Despus de completar el procesamiento de la solicitud de la clase de accin devuelve un ActionForward al controlador. Sobre la base de la ActionForward el controlador invocar la vista apropiada. La respuesta HTTP se representa de nuevo al usuario por el componente de vista.

Struts Hello World Example in Eclipse


En este tutorial usted aprender cmo crear una aplicacin Struts hola mundo en eclipse. En primer lugar crear un nuevo proyecto, vaya a File->New and select DynamicWebProject.

Introduzca el nombre del proyecto y haga clic en el botn Finalizar.

Aada los siguiente archivos JAR a la WEB-INF \ lib.

Haga clic en la carpeta src y seleccionar New->Package.

Introduzca el nombre del paquete como com.vaannila.form y haga click Finish. Ahora haga clic derecho el paquete recin creado y seleccione New -> Class

Introduzca el nombre de la clase como HelloWorldForm y el nombre de superclase como org.apache.struts.action.ActionForm y haga clic en Finish.

. En la clase HelloWorldForm agregue el siguiente cdigo.

package com.vaannila.form; 02. 03.import org.apache.struts.action.ActionForm; 04. 05.public class HelloWorldForm extends ActionForm { 06. 07.private static final long serialVersionUID = -473562596852452021L; 08. 09.private String message; 10.

11.public String getMessage() { 12.return message; 13.} 14. 15.public void setMessage(String message) { 16.this.message = message; 17.} 18.}

De la misma manera crear un nuevo paquete com.vaannila.action y crear una clase HelloWorldAction que extiende de org.apache.struts.action.Action. Agregue el cdigo siguiente a la clase accin y guardarlo.

package com.vaannila.action; 02. 03.import javax.servlet.http.HttpServletRequest; 04.import javax.servlet.http.HttpServletResponse; 05. 06.import org.apache.struts.action.Action; 07.import org.apache.struts.action.ActionForm; 08.import org.apache.struts.action.ActionForward; 09.import org.apache.struts.action.ActionMapping; 10. 11.import com.vaannila.form.HelloWorldForm; 12. 13.public class HelloWorldAction extends Action { 14. 15.@Override 16.public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throwsException { 17.HelloWorldForm hwForm = (HelloWorldForm) form; 18.hwForm.setMessage("Hello World"); 19.return mapping.findForward("success"); 20.} 21.}

Aqu encasillar(typecast) el ActionForm para HelloWorldForm y establecer el valor del mensaje.

Aada las entradas siguientes en el archivo struts-config.xml.

01.<?xml version="1.0" encoding="ISO-8859-1" ?> 02. 03.<!DOCTYPE struts-config PUBLIC 04."-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" 05."http://struts.apache.org/dtds/struts-config_1_3.dtd"> 06. 07.<struts-config> 08. 09.<form-beans> 10.<formbean name="helloWorldForm"type="com.vaannila.form.HelloWorldForm"/> 11.</form-beans> 12. 13.<global-forwards> 14.<forward name="helloWorld" path="/helloWorld.do"/> 15.</global-forwards> 16. 17.<action-mappings> 18.<action path="/helloWorld"type="com.vaannila.action.HelloWorldActi on" name="helloWorldForm"> 19.<forward name="success" path="/helloWorld.jsp" /> 20.</action> 21.</action-mappings> 22. 23.</struts-config>

Ahora configurar el descriptor de despliegue. Agregue la siguiente informacin de configuracin en el archivo web.xml.

01.<?xml version="1.0" encoding="UTF-8"?> 02.<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"xmlns="http://java.sun.com/xml/ns/javaee"xmlns:web="http://java.sun.com/xml/n s/javaee/webapp_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/ xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID"version="2.5"> 03.<display-name>StrutsExample1</display-name> 04. 05.<servlet>

06.<servlet-name>action</servlet-name> 07.<servlet-class>org.apache.struts.action.ActionServlet</servletclass> 08.<init-param> 09.<param-name>config</param-name> 10.<param-value>/WEB-INF/struts-config.xml</param-value> 11.</init-param> 12.<load-on-startup>2</load-on-startup> 13.</servlet> 14. 15.<servlet-mapping> 16.<servlet-name>action</servlet-name> 17.<url-pattern>*.do</url-pattern> 18.</servlet-mapping> 19. 20.<welcome-file-list> 21.<welcome-file>index.jsp</welcome-file> 22.</welcome-file-list> 23.</web-app>
Al ejecutar la aplicacin la pgina index.jsp se ejecutar primero En la pgina index.jsp redireccionamos la solicitud al URI helloWorld.do, que a su vez invoca el HelloWorldAction.

1.<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %> 2.<logic:redirect forward="helloWorld"/>

En la clase accin devuelvemos el ActionForward "success(xito)" que se asigna a la pgina helloworld.jsp. En la pgina helloworld.jsp se muestra el mensaje "Hola Mundo".

01.<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %> 02.<html> 03.<head> 04.<meta http-equiv="Content-Type" content="text/html; charset=ISO8859-1"> 05.<title>Hello World</title> 06.</head> 07.<body> 08.<bean:write name="helloWorldForm" property="message"/> 09.</body> 10.</html>

Despus de crear todos los archivos de la estructura de directorios de la aplicacin se ve as.

Al ejecutar la aplicacin "Hello World" mensaje se muestra al usuario.

Usted puede descargar el cdigo fuente de este ejemplo, haga clic en el enlace de descarga.

Struts Hello World Tutorial


Vamos a decir un rpido hola a Struts. Los siguientes archivos son necesarios para crear una aplicacin Hello World.

index.jsp helloWorld.jsp web.xml struts-config.xml HelloWorldAction.java HelloWorldActionForm.java

web.xml
web.xml se utiliza para configurar las propiedades del contenedor de servlets de la aplicacin hello world.

1.<welcome-file-list> 2.<welcome-file>index.jsp</welcome-file> 3.</welcome-file-list>


La puerta de entrada de nuestra aplicacin Hello World es el archivo index.jsp. El archivo index.jsp debe mencionarse en web.xml como se muestra arriba.

index.jsp
En el ejemplo Hello World la pgina index.jsp simplemente reenva la peticin a la accin hello world.
view source print?

1.<jsp:forward page="HelloWorld.do"/>

struts-config.xml
El archivo struts-config.xml se utiliza para configurar el marco de trabajo (framework) Struts para la aplicacin Hello World. Este archivo contiene los detalles sobre la forma del bean y la asignacin de acciones.

01.<struts-config> 02. 03.<form-beans> 04.<form-bean name="HelloWorldActionForm" 05.type="com.vaannila.HelloWorldActionForm"/> 06.</form-beans> 07. 08.<action-mappings> 09.<action input="/index.jsp" name="HelloWorldActionForm"path="/Hello World" scope="session"type="com.vaannila.HelloWorldAction"> 10.<forward name="success" path="/helloWorld.jsp" /> 11.</action> 12.</action-mappings> 13. 14.</struts-config>

HelloWorldActionForm.java
HelloWorldActionForm extiende org.apache.struts.action.ActionForm. La clase HelloWorldActionForm tiene una variable String mensaje y los mtodos correspondientes getter y setter.

01.public class HelloWorldActionForm extends 02.org.apache.struts.action.ActionForm { 03. 04.private String message; 05. 06.public HelloWorldActionForm() { 07.super(); 08.} 09. 10.public String getMessage() { 11.return message; 12.} 13. 14.public void setMessage(String message) { 15.this.message = message; 16.} 17. 18.}

HelloWorldAction.java
HelloWorldAction class extiende de org.apache.struts.action.Action. El action class contiene el mtodo execute que contiene la lgica de negocio de la aplicacin. Para acceder a las variables de HelloWorldActionForm en la action necesitamos Tipo de casteo del objeto de formulario para HelloWorldActionForm. Entonces podemos acceder a las variables con los mtodos getter y setter. El mtodo Execute devuelve un valor de tipo ActionForward, basado en este valor la vista correspondiente ser llamada. Esta configuracin se realiza en strutsconfig.xml.

01.public class HelloWorldAction extends org.apache.struts.action.Act ion { 02. 03.private final static String SUCCESS = "success"; 04. 05.public ActionForward execute(ActionMapping mapping,ActionForm form, 06.HttpServletRequest request,HttpServletResponse response) throwsException { 07. 08.HelloWorldActionForm helloWorldForm = (HelloWorldActionForm) form; 09.helloWorldForm.setMessage("Hello World!"); 10.return mapping.findForward(SUCCESS); 11. 12.} 13.} 1.<action-mappings> 2.<action input="/index.jsp" name="HelloWorldActionForm" path="/HelloWorld" 3. scope="session" type="com.vaannila.HelloWorldAction"> 4.<forward name="success" path="/helloWorld.jsp" /> 5.</action> 6.</action-mappings>

El nombre de "success (xito)" se asigna a la vista helloworld.jsp. As que cuando al ejecutar el mtodo en el action devuelva " success (xito)" la solicitud ser enviada a la pgina helloWold.jsp.

helloWorld.jsp
En helloworld.jsp obtenemos el valor de la variable message del formulario y lo mostramos.

01.<%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> 02.<html> 03.<head> 04.<title>Hello World</title> 05.</head> 06.<body> 07.<h1> 08.<bean:write name="HelloWorldActionForm" property="message" /> 09.</h1> 10.</body>

11.</html>
Escriba el siguiente URL en el navegador "http://localhost:8080/Example1/index.jsp". Hay que ir, usted tiene su primer programa struts en marcha y funcionando.

Struts Login Application Using Action Form Tutorial


En este ejemplo vamos a ver cmo crear una aplicacin de inicio de sesin (login application) usando ActionForm Los siguientes archivos son necesarios para la aplicacin de inicio de sesin.

login.jsp success.jsp failure.jsp web.xml struts-config.xml LoginAction.java LoginForm.java ApplicationResource.properties

web.xml
La primera pgina que se llama en la solicitud de inicio de sesin es la pgina de login.jsp. Esta configuracin se debe hacer en web.xml como se muestra a continuacin.
view source print?

1.<welcome-file-list> 2.<welcome-file>login.jsp</welcome-file> 3.</welcome-file-list>

login.jsp
Utilizamos Struts etiquetas HTML para crear la pgina de acceso. El formulario tiene un campo de texto para obtener el nombre de usuario y un campo de contrasea para obtener la contrasea. El formulario tambin se presentar un botn, que cuando se hace clic llama a login action. Etiqueta <html:errors /> se utiliza para mostrar los mensajes de error al usuario.

view source print?

01.<%@taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> 02.<html> 03.<head>

04.<title>Login Page</title> 05.</head> 06.<body> 07.<div style="color:red"> 08.<html:errors /> 09.</div> 10.<html:form action="/Login" > 11.User Name :<html:text name="LoginForm" property="userName" /> 12.Password :<html:password name="LoginForm" property="password" /> 13.<html:submit value="Login" /> 14.</html:form> 15.</body> 16.</html>

El usuario introduce el nombre de usuario y contrasea y hace clic en el botn de inicio de sesin. El login action es invocado.

struts-config.xml
El mtodo de validacin en LoginForm class se llama cuando se enva el formulario. Si se encuentra algn error entonces el control se devuelve de nuevo a la pgina de entrada donde los errores se muestran al usuario. La pgina de entrada est configurado en la etiqueta action del archivo strut-config. Etiqueta <html:errors /> se utiliza para mostrar los errores en la pgina jsp.
view source print?

01.<struts-config> 02.<form-beans> 03.<form-bean name="LoginForm" type="com.vaannila.LoginForm"/> 04.</form-beans> 05. 06.<action-mappings> 07.<action input="/login.jsp" name="LoginForm" path="/Login"scope="se ssion" type="com.vaannila.LoginAction"> 08.<forward name="success" path="/success.jsp" /> 09.<forward name="failure" path="/failure.jsp" /> 10.</action> 11.</action-mappings> 12.</struts-config>
Aqu el action es "/ Login", la pgina de entrada es "login.jsp" y el correspondiente action class es LoginAction.java. Ahora el mtodo validate en la clase LoginForm ser invocada.

LoginForm.java
Dentro del mtodo de validacin, se comprueba si el nombre de usuario y la contrasea se introduce. Si no el mensaje de error correspondiente se mostrar al usuario. Los mensajes de error se configuran en el archivo ApplicationResource.properties.

view source print?

01.public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { 02.ActionErrors errors = new ActionErrors(); 03.if (userName == null || userName.length() < 1) { 04.errors.add("userName", new ActionMessage("error.userName.required" )); 05.} 06.if (password == null || password.length() < 1) { 07.errors.add("password", new ActionMessage("error.password.required" )); 08.} 09.return errors; 10.}

ApplicationResource.properties
El archivo ApplicationResource.properties contiene los mensajes de error. La clave "error.userName.required" se utiliza en la funcin de validate para aadir un nuevo error. Dado que los mensajes de error se configura en un archivo de propiedades independiente que se puede cambiar en cualquier momento sin realizar ningn cambio en los archivos de Java o las pginas JSP.

view source print?

1.error.userName.required = User Name is required. 2.error.password.required = Password is required.


Si tanto el nombre de usuario o la contrasea no se introduce entonces el mensaje de error correspondiente se aadir a los ActionErrors. Si se encuentra algn error entonces el control se devuelve de nuevo a la entrada de la pgina jsp, donde los mensajes de error se muestran usando la etiqueta <html:errors />. El mtodo de validacin se utiliza para realizar las validaciones del lado

del cliente. Cuando los datos de entrada son vlidos el mtodo execute en la clase LoginAction es invocado.

LoginAction.java
El mtodo de ejecucin contiene la lgica de negocio de la aplicacin. Aqu primero que typecast (encasillar) el objeto ActionForm para LoginForm, de manera que podemos acceder a las variables de formulario utilizando el mtodos getter y setter. Si el nombre de usuario y la contrasea es la misma que entonces redirigir al usuario a la pgina de xito caso contrario avanzar a la pgina de error.
view source print?

01.public class LoginAction extends org.apache.struts.action.Action { 02. 03.private final static String SUCCESS = "success"; 04.private final static String FAILURE = "failure"; 05. 06.public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throwsException { 07.LoginForm loginForm = (LoginForm) form; 08.if (loginForm.getUserName().equals(loginForm.getPassword())) { 09.return mapping.findForward(SUCCESS); 10.} else { 11.return mapping.findForward(FAILURE); 12.} 13.} 14.}

Permite introducir el nombre de usuario y contrasea como "Eswar". Puesto que el nombre de usuario y la contrasea es la misma el mtodo execute devuelve un ActionForward "xito". El resultado correspondiente asociado con el nombre de "xito" se mostrar al usuario. Esta configuracin se realiza en struts-config.xml.

view source print?

1.<action-mappings> 2.<action input="/login.jsp" name="LoginForm" path="/Login"scope="ses sion" type="com.vaannila.LoginAction"> 3.<forward name="success" path="/success.jsp" /> 4.<forward name="failure" path="/failure.jsp" /> 5.</action>

6.</action-mappings>
As que de acuerdo a la configuracin struts-config.xml el usuario ser enviado a la pgina success.jsp.

Si el nombre de usuario y la contrasea no coincide con el usuario ser redirigido a la pgina fracaso. Vamos a tratar entrar con "Joe" como nombre de usuario y "Eswar" como contrasea, la pgina siguiente se muestra al usuario.

Usted puede descargar el cdigo fuente del ejemplo de aplicacin Struts sesin haciendo clic en el enlace de descarga.

Struts DispatchAction Tutorial


DispatchAction proporciona un mecanismo para agrupar un conjunto de funciones relacionadas en una sola accin, lo que elimina la necesidad de crear acciones separadas para cada funcin. En este ejemplo vamos a ver la forma de agrupar un conjunto de acciones de usuario relacionados como usuario aadir, actualizar y eliminar usuario del usuario en una sola accin denominada useraction. El useraction clase extiende org.apache.struts.actions.DispatchAction. Esta clase no proporciona una implementacin del mtodo execute () como normalmente lo hace la clase Action. El DispatchAction utiliza el mtodo de ejecucin para gestionar la delegacin de la solicitud a los mtodos individuales basadas en el parmetro de la peticin entrante. Por ejemplo, si el parmetro de entrada es "method = add", entonces el mtodo add ser invocada. Estos mtodos deben tener la firma similar a la del mtodo de ejecucin.

view source print?

01.public class UserAction extends DispatchAction { 02. 03.private final static String SUCCESS = "success"; 04. 05.public ActionForward add(ActionMapping mapping, ActionForm form, 06.HttpServletRequest request, HttpServletResponse response) 07.throws Exception { 08.UserForm userForm = (UserForm) form; 09.userForm.setMessage("Inside add user method."); 10.return mapping.findForward(SUCCESS); 11.} 12. 13.public ActionForward update(ActionMapping mapping, ActionForm form, 14.HttpServletRequest request, HttpServletResponse response) 15.throws Exception { 16.UserForm userForm = (UserForm) form; 17.userForm.setMessage("Inside update user method."); 18.return mapping.findForward(SUCCESS); 19.} 20. 21.public ActionForward delete(ActionMapping mapping, ActionForm form, 22.HttpServletRequest request, HttpServletResponse response) 23.throws Exception { 24.UserForm userForm = (UserForm) form; 25.userForm.setMessage("Inside delete user method."); 26.return mapping.findForward(SUCCESS);

27.} 28.}
Si se observa la firma de agregar, actualizar y eliminar los mtodos son similares al mtodo de ejecucin, excepto el nombre. El siguiente paso es crear un action mapping para este controlador de acciones. El nombre de parmetro de la peticin es especificado utilizando el atributo parameter. Aqu el nombre del parmetro de la peticin es method.
view source print?

1.<action-mappings> 2.<action input="/index.jsp" parameter="method" name="UserForm"path=" /UserAction" scope="session" type="com.vaannila.UserAction"> 3.<forward name="success" path="/index.jsp" /> 4.</action> 5.</action-mappings>

Ahora vamos a ver cmo invocar un DispatchAction de jsp. Tenemos un sencillo formulario con tres botones para agregar, actualizar y eliminar un usuario. Cuando se hace clic en cada botn un mtodo diferente en la clase useraction se invoca.

view source print?

01.<html> 02.<head> 03.<script type="text/javascript"> 04.function submitForm() 05.{ 06.document.forms[0].action = "UserAction.do?method=add" 07.document.forms[0].submit(); 08.} 09.</script> 10.</head> 11.<body> 12.<html:form action="UserAction" > 13.<table> 14.<tr> 15.<td> 16.<bean:write name="UserForm" property="message" /> 17.</td> 18.</tr> 19.<tr> 20.<td> 21.<html:submit value="Add" onclick="submitForm()" /> 22.</td> 23.</tr>

24.<tr> 25.<td> 26.<html:submit property="method" value="update" /> 27.</td> 28.</tr> 29.<tr> 30.<td> 31.<html:submit property="method" >delete</html:submit> 32.</td> 33.</tr> 34.</table> 35.</html:form> 36.</body> 37.</html>

Ahora considere la actualizacin y el botn de eliminar. El nombre del parmetro de solicitud especificado en el controlador de la accin es el " method ". As que esto debe ser especificado como el nombre de la propiedad para el botn de envo. El nombre del mtodo que se invoca y el valor del botn debe ser el mismo. As que cuando se pulsa un botn el correspondiente mtodo en el UserAction ser llamado.. El botn Eliminar muestra una forma alternativa para especificar el valor del botn. Aqu, el principal obstculo es el nombre del mtodo y el nombre del botn debe ser el mismo. As que no podemos tener un botn de actualizacin como esta "Actualizacin". A fin de evitar esto se puede llamar a una funcin de JavaScript al hacer clic con el botn. Especifique la accin y enviar el formulario de javascript. De esta manera se puede tener un nombre diferente botn y el nombre del mtodo. Al hacer clic con el botn Agregar el valor de accin se establece en "UserAction.do? method=add" y enviar el formulario de javascript.

Al ejecutar el ejemplo muestra la pgina siguiente se muestra al usuario.

Despus de hacer clic en el botn aadir la siguiente pgina se muestra.

Usted puede descargar el cdigo fuente del ejemplo DispatchAction haciendo clic en el enlace de descarga.

Вам также может понравиться