Академический Документы
Профессиональный Документы
Культура Документы
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.
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.
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.}
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.
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>
Usted puede descargar el cdigo fuente de este ejemplo, haga clic en el enlace de descarga.
web.xml
web.xml se utiliza para configurar las propiedades del contenedor de servlets de la aplicacin hello world.
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.
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?
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.
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.
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.
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.
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.
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.
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.
Usted puede descargar el cdigo fuente del ejemplo DispatchAction haciendo clic en el enlace de descarga.