clase 09_2 - struts 2

Upload: leo-salgado

Post on 05-Apr-2018

223 views

Category:

Documents


0 download

TRANSCRIPT

  • 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.