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

STRUTS 2.

0
3:58

http://struts.apache.org

Temario
Concepto y caractersticas Arquitectura Ejemplo de funcionamiento: HolaMundo Archivo struts.xml Aplicacin login

3:58

Struts concepto
Framework de desarrollo Java Apache Struts, basado en el patrn MVC Modelo: equivale a las acciones
Vista: equivale a los resultados. Controlador: Se implementa mediante el filtro FilterDispatcher
3:58

Struts concepto
En resumen encontramos al modelo que gestiona la lgica de negocios y el acceso a datos.
La vista que es el responsable de la percepcin final del usuario. Por ltimo el Controlador que es responsable de los aspectos navegacionales y de coordinacin.

3:58

Struts caractersticas
Cualquier clase java con un mtodo execute puede actuar como un Action. As no se hace necesario implementar ningn interfaz. Adems se introduce la Inversin de control en la gestin de los actions.

3:58

Struts caractersticas
Gestor de excepciones, permite controlar los errores que se puedan producir. Interceptores, clases que especifican el ciclo de vida de una peticin, validaciones, workflow, etc.
Gestor de configuracin, lee el archivo de configuracin struts.xml
3:58

Struts caractersticas
Diseo simplificado: uso de interfaces en vez de clases abstractas. Las actions se convierten en POJO que son clases que cuentan con getter y setter para poder recibir valores desde pginas, y cuentan con algunos mtodos en los cules pondremos la lgica de negocio.
3:58

Struts caractersticas
Desaparecen los ActionForms: se ven reemplazados por simples Java Beans que son usados para leer las propiedades directamente.
Fcil seleccin de opciones por defecto Mejoras en tag

3:58

Struts caractersticas
Se introducen anotaciones como alternativas a XMl y properties Arranque rpido
Parametrizacin del controlador: a nivel de action Soporte de AJAX
3:58

Struts Arquitectura

3:58

Struts Arquitectura
1. Un usario enva una peticin: Un usuario realiza la peticin de un recurso dentro del servidor.

2. El elemento FilterDispatcher determina la accin que deber responder: El framework dispone de los elementos requeridos para que el dispatcher sea capaz de determinar qu action es el responsable de recibir la peticin y procesarla. Para ello se apoya en el framework para la publicacin del recurso y para su ejecucin

3:58

Struts Arquitectura
3. Se aplican los interceptores definidos: Existen diferentes interceptores que se pueden configurar para que ejecuten diferentes funcionalidades como workflows, validaciones, upload de ficheros, etc

4. Se ejecuta el Action: Tras la ejecucin de los diferentes interceptores el mtodo especfico del Action es ejecutado, realizndose aquellas operaciones y acciones que se hayan definido. El action termina devolviendo un result el cual se utiliza para determinar la pgina a devolver.

3:58

Struts Arquitectura
5. Se renderiza la salida: Tras la ejecucin del action se determina cul es la pgina que se devuelve y se ejecutan el forward a dicha pgina. 6. Se devuelve la peticin: Para realizar la devolucin se ejecutan los interceptores que correspondan y se procede a devolver la peticin al cliente. De esta forma es posible aadir lgica externa a los servidores tambin en la devolucin. 7. Se muestra el resultado al cliente final: Finalmente el control es devuelto al cliente quien podr visualizar el resultado en su navegador

3:58

Struts Arquitectura

3:58

Flujo de Control en Struts I

Flujo de Control en Struts II

Flujo de control en Struts


La clase org.apache.struts.action.ActionS ervlet es el eje de Struts. Dada una peticin de entrada HTTP: Crea un objeto ActionForm donde guarda y valida los parmetros de entrada Decide que objeto Action se debe invocar y le pasa el objeto ActionForm creado Transfiere control a la siguiente etapa de procesamiento de la peticin (tpicamente un JSP).

Flujo de control en Struts


El fichero de configuracin web.xml contiene los url mappings para enviar las peticiones de llegada al ActionServlet, mientras que el fichero de configuracin de Struts strutsconfig.xml contiene los mappings a acciones.

Hola mundo: Vista


La primera pgina a crear helloWord.jsp:

<%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Struts 2 Hello World Application!</title> </head> <body> <h2><s:property value="message" /></h2> <p>Current date and time is: <b> <s:property value="currentTime" /></b> </body> </html>
3:58

Hola mundo: Vista


La lnea:

<%@ taglib prefix="s" uri="/struts-tags" %>


Incluye una librera de tags struts-tags que permite referenciarla utilizando el prefijo s: Es especfica y se ofrece con Struts2 en la distribucin

3:58

Hola mundo: Vista


Los tags <s:property value="message" /> y <s:property value="currentTime" /> llaman a los mtodos getMessage() y getCurrentTime() respectivamente del action Struts2HelloWorld action class y los introducir en la pgina.
Como podemos ver la inclusin de propiedades se hace utilizando etiquetas de la librera struts-tag
3:58

Hola mundo: se crea el action de la aplicacin

3:58

Fichero struts.xml para la configuracin de la aplicacin

3:58

Cmo funciona?
Para poder probar la aplicacin tenemos que llamar a la siguiente ruta: http://localhost/struts2tutorial/HelloWorld.action. El navegador enva una peticin al servidor web mediante esa direccin y se producen los siguientes pasos en el servidor:

1. El servidor intenta buscar el recurso "HelloWorld.action". Struts 2 configura el web.xml de tal forma que enva las peticiones al filtro org.apache.struts2.dispatcher.FilterDispatcher.

3:58

Cmo funciona?
2. El framework busca el action HelloWorld utilizando el fichero struts.xml. Al encontrar una definicin de action que corresponde con el patrn de la url, crea una instancia de la clase correspondiente que aparece en el attribute class.
Realiza la llamada al mtodo execute del objeto, que en este caso es del tipo Struts2HelloWorld.
3:58

Cmo funciona?
3. A continuacin el mtodo execute fija el mensaje y devuelve SUCCESS
4. El framework determina qu pgina se carga en el caso de que SUCCESS sea devuelto. Para ello identifica que si se devuelve SUCCESS buscar en el xml la entidad de la etiqueta action llamada result que no tenga ningn name. En nuestro caso, el servidor carga la pgina HelloWorld.jsp y devuelve la salida.
3:58

Cmo funciona?
En Struts2, los actions en el mtodo execute pueden devolver SUCCESS, ERROR o INPUT de forma estndar.
Tambin pueden devolver cualquier cadena de caracteres que queramos ya que el mtodo execute devuelve un String.

3:58

Cmo funciona?
El mecanismo que emplea para determinar la salida depende del nmero de entidades <result> que tenga la entidad <action> en el struts.xml. De forma general SUCCESS identifica la salida que no tiene name; error identifica como salida el contenido de la etiqueta <result name=error> e INPUT a la que tiene como formato <result name=input>. sta ltima ser empleada por el framework de validacin para determina a donde tiene que redirigir.
3:59

Archivo struts.xml
El framework Struts 2 utiliza un fichero de configuracin (struts.xml) para inicializar sus recursos, entre los cuales encontramos:
Interceptores que puedan procesar antes o despus una peticin. Actions que llamen a la lgica de negocio y accede a los datos del cdigo. Results que puedan preparar vistas usando JavaServer y plantillas FreeMaker.
3:59

Archivo struts.xml
Al cargar struts.xml, la aplicacin web crea una nica instancia de configuracin.
Esto no significa que exista slo un nico fichero de xml de configuracin ya que podemos crear tantos xml como queramos para definir los objetos de struts, Todos se leernpara crear la configuracin. Un efecto de esto ltimo es que un error en cualquiera de ellos provoca que no sea capaz de cargar la web application.
3:59

Archivo struts.xml
El tag <struts> es la raz del fichero el cual puede contener los siguientes tags:
paquetes, includes, beans y constants.
3:59

Archivo struts.xml
El tag <package> agrupa
action, result, tipo de result, interceptores, y pilas de interceptores o namespaces.

3:59

Archivo struts.xml Atributos tag <package>


1. name: debe identificar de manera nica un paquete y es obligatorio. 2. extends: identifica el nombre del paquete del que se heredar toda la informacin de configuracin, incluyendo la configuracin de los action. De esta manera, toda la configuracin del paquete extendido estar disponible en un nuevo paquete, bajo un nuevo nombre. 3. namespace: provee un mapa de las URL al paquete. Por ejemplo, para dos paquetes distintos, con nombres pack1 y pack2, la URL tiene el aspecto /webApp/pack1/my.action y /webAppl/pack2/my.action. 4. abstract: si el valor de este atributo es true, el paquete es una agrupacin de configuraciones y actions que no sern accesibles va el nombre del paquete. Es importante asegurarse de que se est extendiendo del paquete correcto para que su configuracin est disponible.
3:59

Archivo struts.xml
El tag <include /> se usa para modularizar una aplicacin de Struts2 que necesite incluir otro fichero de configuracin. Slo contiene un atributo, file, con el nombre del fichero que ser includo.
Los ficheros que se incluyen presentan la misma estructura que struts.xml.
3:59

Archivo struts.xml
El tag <include /> se usa para modularizar una aplicacin de Struts2 para incluir otro archivo de configuracin con atributo file con el nombre del archivo que ser incluido con la misma estructura de struts.xml.

3:59

Archivo struts.xml
El tag <bean> define beans globales en las aplicaciones y requiere del atributo class que es la clase que lo implementa. Sus atributos son: 1. class: Es el nico atributo requerido e identifica a la clase que implementa el Bean. 2. type: Intefaz que implementa el Bean. No es requerido. 3. name: nombre del bean para que podamos recuperarlo en pginas.

4. scope: mbito del bean, que puede ser default, singleton, request, session o thread.

3:59

Archivo strut.xml
El tag Constant define constantes que tienen dos funciones: 1. Representar datos como el tamao de archivos a subir.
2. Especificar el Bean que debera ser elegido, de entre las implementaciones que existen.

3:59

Aplicacin login.jsp

3:59

Archivo login.jsp
Para tratar los mensajes de error utilizamos los tags <s:actionerror /> y <s:fielderror />. Estos tags pintan la lista de errores utilizando el fichero struts.properties utilizando las listas de errores y de validaciones. El cdigo <sform action=doLogin method=POST> genera el formulario html de la aplicacin que como podemos ver apunta al action doLogin utilizando el mtodo POST. Los cdigos <s:textfield name=username label=Login name/> y <s:password name=password label=Password /> generan los campos para introducir el nombre y la contrasea. El botn de submit se genera con el cdigo <s:submit value=Login align=center />.
3:59

Aplicacin loginSuccess.jsp

3:59

Archivo login.java (POJO)

3:59

Archivo login.java (POJO)


Se definen los atributos UserName y Password con sus correspondientes Get y Set. Se define la lgica de negocio, que en este caso consiste en validar el usuario y la password, como vemos est en el mtodo execute. Vemos que se devuelve SUCCESS cuando la combinacin es correcta y ERROR en caso contrario.
3:59

Archivo login.java (POJO)


Se hace la validacin del usuario y password, en el caso de que la combinacin no sea correcta vemos que se devuelve ERROR, pero antes se ha aadido la siguiente lnea:
addActionError(Invalid user name !"); El mtodo addActionError aade a la lista errors la lnea que aparece. Dicha lista es utilizada por la etiqueta <s:actionerror />, que mostrar el texto de error en la pantalla.
3:59

Archivo struts.xml
El cdigo a aadir en el struts.xml es : <action name="showLogin"> <result>/pages/login.jsp</result> </action> <action name="doLogin" class="sample.Login"> <result name="input">/pages/login.jsp</result> <result name="error">/pages/login.jsp</result> <result>/pages/loginsuccess.jsp</result> </action>
3:59

Archivo struts.xml
Se han definidos dos action: showLogin que redirige a la pgina login.jsp cuando se hace la peticin http://localhost/struts2tutorial/showLogin.action.
Cuando un action no tiene clase se utiliza una clase del core de Struts2 que redirige al result SUCCESS (el que no tiene name).

3:59

Archivo struts.xml
Y el action doLogin, implementa la clase sample.Login. Este action tiene tres posibles destinos dependiendo de la lgica de negocio y de la lgica de navegacin. En el caso que nos atae tenemos: 1. Si se devuelve SUCCESS loginsuccess.jsp 2. Si se devuelve ERROR login.jsp 3. Si se devuelve input o un error login.jsp.
3:59