Download Apache Jakarta Struts

Document related concepts
no text concepts found
Transcript
Jakarta Struts
version 1.3.5
Juan Manuel Zorrilla Gamarra
Mario Titto Acostupa.
Contenido


Patrón de diseño MVC
La framework Apache Struts



Instalación
Flujo de control en Struts
 Procesamiento de peticiones
 Control de errores
 Manejo de Formularios
Librerías de etiquetas de Struts
Modelos de desarrollo de
aplicaciones web en Java




Los servlets son buenos ejecutando lógica de negocio, pero
no son tan buenos presentando información
JSPs son muy buenos presentando pero pésimos
introduciendo lógica programática en ellos
La combinación Servlet/JSPs es lo más común hoy en día en
el desarrollo de aplicaciones web
Dos arquitecturas:


Model-1: JSPs para presentación y control y JavaBeans para la
lógica
Model-2: Model-View-Controller = JavaBeans-JSPs-Servlets

MVC es tan común que se han desarrollado varias
infraestructuras en torno a este patrón de diseño:




Apache Struts
Java Server Faces
Spring
Etc…
Arquitectura Model 1
Arquitectura Model 2
Modelo MVC 0
Modelo MVC I

El Controlador (Controller)



Servlet central recibe peticiones, procesa URL
recibida y delega procesamiento a JavaBeans
Servlet guarda resultado de procesamiento
realizado por JavaBeans en el contexto de la
petición, la sesión o la aplicación
Servlet transfiere control a un JSP que lleva a
cabo la presentación de resultados
Modelo MVC II
El Modelo (Model)

JavaBeans (o EJBs para aplicaciones más
escalables) desempeña el rol de modelo:



Algunos beans ejecutan lógica
Otros guardan datos
Normalmente:

1.
2.
Servlet controlador invoca un método en bean
lógico y éste devuelve un bean de datos
Autor de JSP tiene acceso a bean de datos
Modelo MVC III

La Vista (View)



Rol ejecutado por JSPs
Servlet Controlador transfiere control al JSP
después de haber guardado en un contexto el
resultado en forma de un bean de datos
JSP usa jsp:useBean y jsp:getProperty
para recuperar datos y formatear respuesta en
HTML o XML
Modelo MVC IV

En resumen:



Los beans o EJBs ejecutan la lógica de
negocio y guardan los resultados
Los JSPs proveen la información formateada
Los servlets coordinan/controlan la ejecución
de los beans y los JSPs
Frameworks


Las frameworks pueden ser vistas como
implementaciones de patrones de diseño que
facilitan la reutilización de diseño y código
Dado que MVC ha sido utilizado en muchas
aplicaciones web, el desarrollo de frameworks
que den soporte a áreas comunes en todas las
aplicaciones MVC es necesario


Apache Struts es una de estas frameworks
Aplicaciones basadas en Struts consistirán de:


Código Java
Deployment descriptors que configuran la framework
para el uso de nuestra aplicación
Apache Jakarta Struts


Implementación del modelo 2/patrón de
diseño MVC que facilita la creación de
aplicaciones web en Java
Creada por Craig McClanahan y donada a la
Apache Software Foundation en el 2000
(pertenece a Apache Jakarta)
¿Qué proporciona Struts?


Un servlet (ActionServlet) que actúa como controlador MVC
totalmente configurable
Clases base que son extendidas para implementar la lógica de la
aplicación web:








Struts Action
Struts ActionForm
Un rico conjunto de etiquetas personalizadas JSP que cooperan
con el controlador para su uso en la capa view de MVC
Varias opciones para la validación de entrada de usuario en
formularios HTML: ActionForm o Validator Framework
Mecanismos para el manejo y reporte de errores
Soporte para la internacionalización (i18n) a través de ficheros de
recursos y Java Locales
Soporte para fuentes de datos
Y más …..
Instalando Apache Struts I


Instalar Apache Tomcat 4.x o superior se recomienda un Tomcat 5.5
Bajar la última versión de Apache Struts de:
http://struts.apache.org/download.cgi



Actualmente en la versión 1.3.5 (recientemente ha salido la version 2.0)
Lo mejor es tomar la aplicación struts-blank.war como punto de
partida.
Para esto lo mejor es importar el archivo .war en eclipse que incluye un
asistente para dicha tarea.
Actions en Struts


Se crea una acción extendiendo la clase
org.apache.struts.action.Action
El ActionServlet ejecuta acciones invocando el método
execute() tu clase Action


Dentro del método execute() tienes acceso a:






El método execute() contiene código para manipular el modelo
Cabeceras y parámetros de peticiones HTTP
Atributos/beans guardados en los contextos
application/session/request scope
Struts ActionForm asociados con la acción (opcional)
El ActionMapping associado a esta acción (opcional)
El objeto httpResponse
El método execute() devuelve un objeto ActionForward que
indica al ActionServlet a dónde transferir el control a continuación
Form Beans

Un ActionForm es un JavaBean con propiedades que corresponden a los
controles de un formulario HTML. Los parámetros son mapeados a
propiedades del bean.







Proveen un mecanismo de buffer/validate/convert que necesitamos para asegurarnos
que el usuario introduce los datos esperados
Actúa como puente entre el navegador y el objeto de negocio
El programador define un form bean extendiendo la clase
org.apache.struts.action.ActionForm (o de forma declarativa usando
org.apache.struts.action.DynaActionForm)
Hay que definir cada una de las propiedades en la clase y escribir los
getters/setters correspondientes, siguiendo las reglas de JavaBeans
Después de escribir el código del form bean, es necesario asociarlo con una o
más acciones a través del fichero de configuración de Struts strutsconfig.xml
Cada vez que se llama a la acción , el ActionServlet poblará las
propiedades con los valores de los parámetros recibidos en el formulario
HTML
Las propiedades no sólo pueden ser escalares sino que también pueden ser
colecciones de valores
¿Por qué se necesitan Forms
Beans?


¿Por qué no simplemente se accede a los parámetros de una
petición, en vez de usar un form bean como intermediario?
Razones:

Los Form beans pueden ser validados antes de que una acción sea
invocada


Si un form bean falla en la validación puede hacer que Struts envíe al
usuario de vuelta a la vista (JSP) desde la que se realizó el POST en
primer lugar, junto con un mensaje de error


Si la propiedad validate de un elemento Action en el fichero
struts-config.xml contiene el valor true (por defecto), el método
validate será invocado
Es importante asignar a la propiedad input del elemento action en
struts-config.xml una referencia a la vista que entregó el
formulario
Los form beans pueden ser usados por múltiples acciones o incluso
una aplicación completa

Si se configura al ActionController para que guarde un form bean
en el contexto de sesión se permitirá el uso del form bean en todas las
peticiones web que llegan a la aplicación
Dynamic Action Forms


Son ActionForms creados de manera declarativa en struts-config.xml
Una o varias propiedades dinámicas pueden ser pasadas a una instancia de
org.apache.struts.action.DynaActionForm
<form-bean name=“checkoutForm”
type=“org.apache.struts.action.DynaActionForm”>
<form-property name=“firstName”
type=“java.lang.String”/>
<form-property name=“lastName”
type=“java.lang.String”/>
<form-property name=“age” type=“java.lang.Integer”
initial=“18”/>
</form-bean>
Recursos de String/Manejo de
Errores

Recursos de String



Todos los strings usados en mensajes en JSPs tanto de datos de aplicación
como de errores puedes ser colocados en un ficheros de recursos
(ApplicationResources.properties)
Struts proporciona etiquetas personalizadas JSP tags para acceder a estos
recursos
<bean:message key="prompt.goodguess.heading"/>
Manejo de errores

Se recomienda que el manejo de errores se lleve a cabo dentro del método
execute() y el control se transfiera a la vista apropiada
errors.add("passphrase",new
ActionError("error.passphrase.required"));


Struts proporciona un mecanismo separado para permitir la implementación de
un manejador global de excepciones
Struts proporciona etiquetas JSP que ayudan en la visualización de los errores
en tu JSP:
<html:errors property=“passphrase”/>
Struts Tag Libraries



Documentadas en
http://www.onjava.com/lpt/a/4034
La framework Struts proporciona un conjunto de 6
librerías de etiquetas, que asisten en la tarea de la
creación de la vista de MVC para evitar incluir
código Java en los JSPs:
 Bean Tags
 HTML Tags
 Logic Tags
Las funcionalidad de las etiquetas definidas en las
librerías Bean y Logic es también provista por las
librerías core y fmt de JSTL
 Se recomienda el uso de las librerías en JSTL
HTML Tags


Estas etiquetas son principalmente usadas para:
 Crear formularios de entrada de datos y
 Otras utilidades para visualizar interfaces basados en HTML.
Algunas de las acciones más útiles son:
 base  genera un elemento HTML <base>
 errors  condicionalmente visualiza un conjunto acumulado
de mensajes de error
 form  define un formulario de entrada
 text  visualiza un campo de entrada de tipo texto
 messages  condicionalmente visualiza un conjunto de
mensajes acumulados
 submit  visualiza un botón de entrega
 Etc.
Logic Tags


Usadas para:
 Iterar sobre colecciones
 Generación condicional de salida, y
 Flujo de aplicación
Algunas de las acciones más útiles son:
 present  genera el contenido de marcado dentro de esta
etiqueta si el valor indicado es encontrado en esta petición
 notPresent  lo opuesto a present
 iterate  repite el contenido anidado dentro de esta etiqueta
al iterar sobre una colección
 forward  transfiere control a la página especificada por la
entrada ActionForward.
 Etc.
Bean Tags

Usadas pricipalmente para:



Escribir por pantalla los valores de los request en
los jsp.
Definir atributos en el contexto de la pagina en
tiempo de compilación.
Algunas de las mas usadas son:


Define: define un atributo en el contexto de la
petición en tiempo de compilación.
Write: muestra por pantalla un valor de un objeto
que se encuentre en el contexto de la petición.
Problemas con Struts…




buena cantidad de sobrecarga en el aprendizaje y el
mantenimiento (puede no ser adecuado para
proyectos pequeños).
Propiedades dinámicas del lado del cliente y la
integración de validación aún en las obras.
Algunos dolores de cabeza de integración en
entornos no-Tomcat.
Nueva clase de problemas de seguridad a tener en
cuenta (con una población de beans automática)
Todavía bastante joven.
Fin