Copyright (c) 2004 Hernán Darío Fernández. Se permite la copia, distribución y/o
modificación de este documento bajo los términos de la GNU Free Documentation
License, Versión 1.1 o cualquier otra versión publicada por la Free Software Foundation
Control de Cambios
Fecha Versión Autor Descripción del Cambio
21-08-2004 0.1 H Fernández Versión Inicial
22-09-2004 1.0 H Fernández Terminada
Índice
1 Introducción ............................................................................................................ 4
2 ¿Que es Struts?........................................................................................................ 4
3 El patrón Modelo – Vista – Controlador................................................................. 5
4 Struts, una implementacion del patron MVC ......................................................... 6
4.1 Introducción .................................................................................................... 6
4.2 Funcionamiento en aplicaciones WEB ........................................................... 6
5 Vista ........................................................................................................................ 8
5.1 Introducción .................................................................................................... 8
5.2 Tags................................................................................................................. 8
5.3 Internacionalización...................................................................................... 10
6 Controlador ........................................................................................................... 12
6.1 Introducción .................................................................................................. 12
6.2 La clase Action ............................................................................................. 12
6.3 El archivo struts-config.xml.......................................................................... 12
7 Modelo .................................................................................................................. 14
7.1 Introducción .................................................................................................. 14
7.2 Action Forms ................................................................................................ 14
8 Aplicación de Ejemplo en WSAD 5.1 .................................................................. 16
9 Conclusión ............................................................................................................ 37
10 Bibliografía ....................................................................................................... 37
1 Introducción
Pero escribir infinitas sentencias println() para enviar HTML al navegador era
problemático. La respuesta fueron las JavaServer Pages, que nos dejaron escribir
servlets dentro de ellas. Ahora los desarrolladores podían mezclar fácilmente
HTML con código Java, y tener todas las ventajas de los servlets.
Algunos desarrolladores se dieron cuenta que las JavaServer Pages y los servlets
se podrían usar juntos para desplegar aplicaciones web. Los servlets podrían
ayudar con el control de flujo, y las JPSs podrían enfocarse en escribir HTML.
Usar JSP y servlets juntos se ha dado ha conocer como el Modelo 2 (cuando usar
sólo JSPs era el Modelo 1).
2 ¿Que es Struts?
1
Un framework es la extensión de un lenguaje mediante una o más jerarquías de clases que implementan
una funcionalidad y que (opcionalmente) pueden ser extendidas.
3 El patrón Modelo – Vista – Controlador
• Controlador
• Modelo
• Vistas.
Invocación de métodos
Eventos
4 Struts, una implementacion del patron MVC
4.1 Introducción
Anteriormente dijimos que Struts implementa el patrón MVC por ende nos debe
proveer o dar accesibilidad a un Controlador, al Modelo y la Vista.
El controlador ya se encuentra implementado por Struts, aunque si fuera necesario
se puede heredar y ampliar o modificar, y el workflow de la aplicación se puede
programar desde un archivo XML
Las acciones que se ejecutarán sobre el modelo de objetos de negocio se
implementan basándose en clases predefinidas por el framework .
La generación de interfaz se soporta mediante un conjunto de Tags predefinidos
por Struts cuyo objetivo es evitar el uso de Scriplets (los trozos de código Java
entre "<%" y "%>"), lo cual genera ventajas de mantenibilidad.
Logísticamente, separa claramente el desarrollo de interfaz del workflow y lógica
de negocio permitiendo desarrollar ambas en paralelo o con personal
especializado.
También es evidente que potencia la reutilización, soporte de múltiples interfaces
de usuario (Html, sHtml, Wml, Desktop applications, etc.) y de múltiples idiomas,
localismos, etc.
Este gráfico nos provee una visión más detallada del funcionamiento de Struts
5 Vista
5.1 Introducción
5.2 Tags
A continuación veamos un detalle de los tags mas utilizados al construir paginas
JSP usadas en Strus
Genera el tag <base>. Este tag debe ser usado dentro del tag
<html:base>
<head>.
Boton
<html:button>
Genera el tag <input type="button">. Este tag debe ser usado
dentro de un <form>.
Cancelar
Credit Debit
<html:radio>
Genera un radio button (<input type="radio">).
Reset
<html:reset>
Genera <input type="reset">.
alpha
<html:select> beta
gamma
<html:options> delta
epsilon
<html:option>
<html:select> Genera <select>.
Submit
<html:submit>
Genera <input type="submit"> para enviar los datos
ingresados.
Nombre
<html:text> Email
Genera el tag <input type="text">.
Esto es un texto cualquiera
<html:textarea>
5.3 Internacionalización
..
login.titulo=Laboratorio I+D - IBM WebSphere
login.labelusuario=Usuario :
login.labelpassword=Password :
...
2. Para cada idioma alternativo se creará un archivo nuevo que se llame igual
pero que termine en "_xx.properties" siendo xx el código ISO de idioma (ej:
ApplicationResources_en.properties).
<servlet>
<servlet-name>action</servlet-name>
...
<init-param>
<param-name>application</param-name>
<param-value>com.empresa.aplicacion.ApplicationResources</param-value>
</init-param>
...
4. Por ultimo utilizaremos el Tag <bean:message key="clave.subclave"/>
donde clave y subclave corresponden al texto por el que se reemplazará según el
idioma del usuario. Ejemplo:
...
<H1><bean:message key="login.titulo"/></H1>
...
6 Controlador
6.1 Introducción
Dentro del archivo <struts-config>, hay dos elementos importantes que son
usados para describir nuestras acciones:
<form-beans>
Esta sección contiene nuestras definiciones de beans.
Usamos un elemento <form-bean> por cada bean de formulario, que tiene
los siguientes atributos importantes:
o name: Un identificador único para este bean, que será usado para
referenciarlo en los correspondientes mapeos de acciones.
Normalmente, es también el nombre del atributo de solicitud o
sesión bajo el que se almacena este bean de formulario.
<action-mappings>
Esta sección contiene nuestras definiciones de acciones. Usamos un
elemento <action> por cada una de nuestras acciones que queramos
definir. Cada elemento action requiere que se definan los siguientes
atributos:
path: El path a la clase action en relación al contexto de la
aplicación.
7.1 Introducción
Una de las tareas que durante el desarrollo de una aplicación insume mucho
trabajo (aunque en realidad no lo merezcan) es la interacción con formularios, ya
sea para editar u obtener nueva información. Las comprobaciones, la gestión de
errores, el volver a presentarle el mismo form al usuario con los valores que puso
y los mensajes de error y un largo etcétera están soportadas por Struts a fines de
hacernos la vida un poco más fácil.
La idea es la siguiente: todo el trabajo de comprobaciones y generación de
mensajes de error se implementa en los ActionForm y todo el trabajo de
generación de interfaz en la/s JSP.
Struts ofrece una facilidad adicional para validar los campos de entrada que ha
recibido. Para utilizar esta característica, sobreesribimos el siguiente método en
nuestra clase ActionForm:
public ActionErrors
validate(ActionMapping mapping,
HttpServletRequest request);
Veamos como construir un simple login de una aplicación WEB utilizando Struts
con el IDE WebSphere Studio Application Development .
Primero seleccionemos un Nuevo Proyecto WEB Dinamico y presionamos
Siguiente
Ahora vamos a agregar la pantalla JSP de Login, seleccionamos WEB -> Pagina JSP
Le ponemos el nombre login.jsp y en el modelo seleccionamos Struts
<P><BR>
<html:form action="login.do">
<h5><html:errors/></h5>
<BR><bean:message key="login.labelusuario"/>
<html:text property="usuario" size="16" maxlength="18"/>
<BR><bean:message key="login.labelpassword"/>
<html:password property="password" size="16" maxlength="18"/>
<BR>
<html:submit value="OK">
<BR>
</html:submit>
</html:form>
El asistente de ActionForms nos indica que hay dos campos con tags de ingreso de datos
como html:text o html:password.
Este paso añade el Form Bean al archivo struts-config.xml
Una vez creado el formulario, vamos a crear una clase Action que le pondremos de
nombre LoginAction
Este paso asocia el Action con el ActionForm y lo añade al archivo struts-config.xml
return errors;
}
Retornamos una clase ActionErrors con los errors que detectamos para que Struts
muestre los mismos en la pagina JSP que contenga el tag <html:errors/>
Ahora vamos a crear la clase que va a validar efectivamente que el usuario y password
sean correctos, en la practica esta clase puede validar el usuario contra la BD, un servidor
LDAP, etc,etc,etc. A los efectos de este tutorial esta clase solo va a validar con valores
fijos.
// Constructor
public UserBusinessDelegate()
{
}
return usuarioValido;
}
}
Solamente escribimos un metodo validarUsuario verifica que el usuario sea “juan” y su
password “perez”
Ahora vamos a modificar la clase LoginAction para agregar el codigo que toma los datos
del formulario y valida el usuario.
El código que agregamos fue el siguiente
LoginForm loginForm = (LoginForm) form;
String usuario = loginForm.getUsuario();
String password = loginForm.getPassword();
try {
UserBusinessDelegate userBD = new UserBusinessDelegate();
if (!userBD.validarUsuario(usuario, password))
{
errors.add(ActionErrors.GLOBAL_ERROR,
new ActionError("errores.usuarioinvalido"));
}
} catch (Exception e) {
errors.add(ActionErrors.GLOBAL_ERROR,
new ActionError("errores.errordesconocido"));
}
if (!errors.isEmpty()) {
saveErrors(request, errors);
forward = mapping.findForward("fail");
} else {
forward = mapping.findForward("success");
}
return (forward);
Tomamos los datos del formulario con los metodos getUsuario y getPassword
Luego instanciamos la clase UserBusinessDelegate y ejecutamos el metodo
validarUsuario(Usuario,Password).
Si el usuario es correcto, enviamos un forward a “success”, no lo es enviamos un forward
a “fail”.
Tanto “success” como ”fail” tienen que estar definidos en el archivo struts-config.xml
Para confirgurar esto, hacemos doble clic sobre el archivo struts-config.xml
Veremos esta pantalla de acciones
En la solapa reenvios locales definimos “success” y lo direccionamos a la pagina
loginOK.jsp
La pantalla de salida sera “LoginError.jsp”, la que nos direcciona Struts ante un “fail”.
En cambio si ingresamos el usuario y password OK, la pantalla de salida sera
“LoginOK.jsp”, la que nos direcciona Struts ante un “success”.
9 Conclusión
10 Bibliografía
Sitios de Internet :
Struts, an open-source MVC implementation –
http://www-106.ibm.com/developerworks/websphere/techjournal/0302_fung/fung.html
Libros :
Struts Kick Start (James Turner, Kevin Bedell) - Sams Publishing