Download - Clase 09_2 - Struts 2
-
8/2/2019 Clase 09_2 - Struts 2
1/46
STRUTS 2.0http://struts.apache.org
3:58
-
8/2/2019 Clase 09_2 - Struts 2
2/46
Temario
Concepto y caractersticas
Arquitectura
Ejemplo de funcionamiento: HolaMundo Archivo struts.xml
Aplicacin login
3:58
-
8/2/2019 Clase 09_2 - Struts 2
3/46
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
-
8/2/2019 Clase 09_2 - Struts 2
4/46
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 percepcinfinal del usuario.
Por ltimo el Controlador que es responsable de
los aspectos navegacionales y de coordinacin.
3:58
-
8/2/2019 Clase 09_2 - Struts 2
5/46
Struts caractersticas
Cualquier clase java con un mtodo execute
puede actuar como un Action. As no se hace
necesario implementar ningn interfaz. Ademsse introduce la Inversin de control en la gestin
de los actions.
3:58
-
8/2/2019 Clase 09_2 - Struts 2
6/46
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
-
8/2/2019 Clase 09_2 - Struts 2
7/46
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
-
8/2/2019 Clase 09_2 - Struts 2
8/46
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
-
8/2/2019 Clase 09_2 - Struts 2
9/46
Struts caractersticas
Se introducen anotaciones como alternativas aXMl y properties
Arranque rpido
Parametrizacin del controlador: a nivel de action
Soporte de AJAX
3:58
-
8/2/2019 Clase 09_2 - Struts 2
10/46
Struts Arquitectura
3:58
-
8/2/2019 Clase 09_2 - Struts 2
11/46
Struts Arquitectura
1. Un usario enva una peticin: Un usuario realizala peticin de un recurso dentro del servidor.
2. El elemento FilterDispatcher determina laaccin que deber responder: El frameworkdispone de los elementos requeridos para que eldispatcher sea capaz de determinar qu actiones el responsable de recibir la peticin yprocesarla. Para ello se apoya en el frameworkpara la publicacin del recurso y para su
ejecucin
3:58
-
8/2/2019 Clase 09_2 - Struts 2
12/46
Struts Arquitectura3. Se aplican los interceptores definidos: Existen
diferentes interceptores que se pueden
configurar para que ejecuten diferentesfuncionalidades como workflows, validaciones,upload de ficheros, etc
4. Se ejecuta el Action: Tras la ejecucin de los
diferentes interceptores el mtodo especficodel Action es ejecutado, realizndose aquellasoperaciones y acciones que se hayan definido. Elaction termina devolviendo un result el cual se
utiliza para determinar la pgina a devolver.
3:58
-
8/2/2019 Clase 09_2 - Struts 2
13/46
Struts Arquitectura5. 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 seprocede a devolver la peticin al cliente. De esta
forma es posible aadir lgica externa a los servidorestambin en la devolucin.
7. Se muestra el resultado al cliente final: Finalmente elcontrol es devuelto al cliente quien podr visualizar el
resultado en su navegador
3:58
-
8/2/2019 Clase 09_2 - Struts 2
14/46
Struts Arquitectura
3:58
-
8/2/2019 Clase 09_2 - Struts 2
15/46
Flujo de Control en Struts I
-
8/2/2019 Clase 09_2 - Struts 2
16/46
Flujo de Control en Struts II
-
8/2/2019 Clase 09_2 - Struts 2
17/46
Flujo de control en Struts
La claseorg.apache.struts.action.ActionServlet es el eje de Struts. Dada una peticinde entrada HTTP:
Crea un objeto ActionForm donde guarda yvalida los parmetros de entrada
Decide que objeto Action se debe invocar yle pasa el objeto ActionForm creado
Transfiere control a la siguiente etapa deprocesamiento de la peticin (tpicamente unJSP).
-
8/2/2019 Clase 09_2 - Struts 2
18/46
Flujo de control en Struts
El fichero de configuracin web.xml contienelos url mappings para enviar las peticiones dellegada al ActionServlet, mientras que el
fichero de configuracin de Struts struts-config.xml contiene los mappings aacciones.
-
8/2/2019 Clase 09_2 - Struts 2
19/46
Hola mundo: Vista
La primera pgina a crear helloWord.jsp:
Struts 2 Hello World Application!
Current date and time is:
3:58
-
8/2/2019 Clase 09_2 - Struts 2
20/46
Hola mundo: Vista
La lnea:
Incluye una librera de tags struts-tags quepermite referenciarla utilizando el prefijo s:
Es especfica y se ofrece con Struts2 en la
distribucin
3:58
-
8/2/2019 Clase 09_2 - Struts 2
21/46
Hola mundo: Vista
Los tags y
llaman a
los mtodos getMessage() y getCurrentTime()
respectivamente del action Struts2HelloWorldaction class y los introducir en la pgina.
Como podemos ver la inclusin depropiedades se hace utilizando etiquetas de la
librera struts-tag
3:58
-
8/2/2019 Clase 09_2 - Struts 2
22/46
Hola mundo: se crea el action de la aplicacin
3:58
-
8/2/2019 Clase 09_2 - Struts 2
23/46
Fichero struts.xml para la
configuracin de la aplicacin
3:58
-
8/2/2019 Clase 09_2 - Struts 2
24/46
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 medianteesa 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
http://localhost/struts2tutorial/HelloWorld.actionhttp://localhost/struts2tutorial/HelloWorld.actionhttp://localhost/struts2tutorial/HelloWorld.actionhttp://localhost/struts2tutorial/HelloWorld.action -
8/2/2019 Clase 09_2 - Struts 2
25/46
Cmo funciona?
2. El framework busca el action HelloWorldutilizando el fichero struts.xml. Al encontrar una
definicin de action que corresponde con el
patrn de la url, crea una instancia de la clasecorrespondiente que aparece en el attribute
class.
Realiza la llamada al mtodo execute del objeto,
que en este caso es del tipo Struts2HelloWorld.
3:58
-
8/2/2019 Clase 09_2 - Struts 2
26/46
Cmo funciona?
3. A continuacin el mtodo execute fija el mensajey devuelve SUCCESS
4. El framework determina qu pgina se carga enel caso de que SUCCESS sea devuelto. Para elloidentifica que si se devuelve SUCCESS buscar en elxml la entidad de la etiqueta action llamada result
que no tenga ningn name. En nuestro caso, elservidor carga la pgina HelloWorld.jsp y devuelvela salida.
3:58
-
8/2/2019 Clase 09_2 - Struts 2
27/46
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
-
8/2/2019 Clase 09_2 - Struts 2
28/46
Cmo funciona?
El mecanismo que emplea para determinar lasalida depende del nmero de entidades que tenga la entidad en el struts.xml.
De forma general SUCCESS identifica la salida queno tiene name; error identifica como salida elcontenido de la etiqueta eINPUT a la que tiene como formato . sta ltima ser empleada por elframework de validacin para determina a dondetiene que redirigir.
3:59
-
8/2/2019 Clase 09_2 - Struts 2
29/46
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
-
8/2/2019 Clase 09_2 - Struts 2
30/46
Archivo struts.xml
Al cargar struts.xml, la aplicacin web crea unanica instancia de configuracin.
Esto no significa que exista slo un nico fichero
de xml de configuracin ya que podemos creartantos xml como queramos para definir losobjetos de struts, Todos se leernpara crear laconfiguracin.
Un efecto de esto ltimo es que un error encualquiera de ellos provoca que no sea capaz decargar la web application.
3:59
-
8/2/2019 Clase 09_2 - Struts 2
31/46
Archivo struts.xml
El tag es la raz del fichero el
cual puede contener los siguientes
tags:paquetes,
includes,
beans y
constants.
3:59
-
8/2/2019 Clase 09_2 - Struts 2
32/46
Archivo struts.xml
El tag agrupa
action,
result, tipo de result,
interceptores, y
pilas de interceptores o namespaces.
3:59
Archivo struts xml
-
8/2/2019 Clase 09_2 - Struts 2
33/46
Archivo struts.xml
Atributos tag
1. name: debe identificar de manera nica un paquete y esobligatorio.
2. extends: identifica el nombre del paquete del que se heredartoda la informacin de configuracin, incluyendo laconfiguracin de los action. De esta manera, toda la
configuracin del paquete extendido estar disponible en unnuevo paquete, bajo un nuevo nombre.
3. namespace: provee un mapa de las URL al paquete. Porejemplo, para dos paquetes distintos, con nombres pack1 ypack2, 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 esuna agrupacin de configuraciones y actions que no sernaccesibles va el nombre del paquete. Es importante asegurarsede que se est extendiendo del paquete correcto para que suconfiguracin est disponible.
3:59
-
8/2/2019 Clase 09_2 - Struts 2
34/46
Archivo struts.xml
El tag 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 queser includo.
Los ficheros que se incluyen presentan la misma
estructura que struts.xml.
3:59
-
8/2/2019 Clase 09_2 - Struts 2
35/46
Archivo struts.xml
El tag 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 mismaestructura de struts.xml.
3:59
A hi t t l
-
8/2/2019 Clase 09_2 - Struts 2
36/46
Archivo struts.xmlEl tag define beans globales en las aplicaciones yrequiere del atributo class que es la clase que lo implementa.
Sus atributos son:1. class: Es el nico atributo requerido e identifica a la claseque implementa el Bean.
2. type: Intefaz que implementa el Bean. No es requerido.
3. name: nombre del bean para que podamos recuperarlo enpginas.
4. scope: mbito del bean, que puede ser default, singleton,
request, session o thread.
3:59
Archivo strut xml
-
8/2/2019 Clase 09_2 - Struts 2
37/46
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
-
8/2/2019 Clase 09_2 - Struts 2
38/46
Aplicacin login.jsp
3:59
-
8/2/2019 Clase 09_2 - Struts 2
39/46
Archivo login.jsp Para tratar los mensajes de error utilizamos los tags
y . Estos tags pintan la listade errores utilizando el fichero struts.properties utilizandolas listas de errores y de validaciones.
El cdigo genera el formulario html de la aplicacin que como
podemos ver apunta al action doLogin utilizando el mtodoPOST.
Los cdigos y generan los campos para introducir elnombre y la contrasea.
El botn de submit se genera con el cdigo .
3:59
-
8/2/2019 Clase 09_2 - Struts 2
40/46
Aplicacin loginSuccess.jsp
3:59
-
8/2/2019 Clase 09_2 - Struts 2
41/46
Archivo login.java (POJO)
3:59
-
8/2/2019 Clase 09_2 - Struts 2
42/46
Archivo login.java (POJO)
Se definen los atributos UserName y Passwordcon sus correspondientes Get y Set.
Se define la lgica de negocio, que en estecaso consiste en validar el usuario y lapassword, como vemos est en el mtodoexecute. Vemos que se devuelve SUCCESScuando la combinacin es correcta y ERRORen caso contrario.
3:59
-
8/2/2019 Clase 09_2 - Struts 2
43/46
Archivo login.java (POJO)
Se hace la validacin del usuario y password, enel caso de que la combinacin no sea correctavemos que se devuelve ERROR, pero antes se haaadido la siguiente lnea:
addActionError(Invalid user name !");
El mtodo addActionError aade a la lista errors
la lnea que aparece. Dicha lista es utilizada por laetiqueta , que mostrar el textode error en la pantalla.
3:59
-
8/2/2019 Clase 09_2 - Struts 2
44/46
Archivo struts.xml
El cdigo a aadir en el struts.xml es :
/pages/login.jsp
/pages/login.jsp
/pages/login.jsp
/pages/loginsuccess.jsp
3:59
-
8/2/2019 Clase 09_2 - Struts 2
45/46
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
-
8/2/2019 Clase 09_2 - Struts 2
46/46
Archivo struts.xml
Y el action doLogin, implementa la clasesample.Login. Este action tiene tres posiblesdestinos dependiendo de la lgica de negocio y de
la lgica de navegacin. En el caso que nos ataetenemos:
1. Si se devuelve SUCCESS loginsuccess.jsp
2. Si se devuelve ERROR login.jsp
3. Si se devuelve input o un error login.jsp.