Java struts2 - 03 componentes de la aplicacion

49
Componentes de Struts2 Elaborado por: Gary Briceño

Transcript of Java struts2 - 03 componentes de la aplicacion

Componentes de Struts2

Elaborado por:Gary Briceño

FilterDispatcher

• Es el corazón de Struts2 • Punto de entrada al framework• Lanza las peticiones del framework

• Responsabilidades:• Ejecuta los Actions, que son los manejadores de las peticiones• Inicia la ejecución de la cadena de Interceptors• Limpia el ActionContext para evitar fuga de memoria

Proceso de peticiones

• El proceso de peticiones se realiza mediante:• Interceptors• Actions• Results

Interceptors

• Clases que implementan el patrón Interceptor.• Permite que se ejecuten funcionalidades comunes a todos los Actions, pero se

ejecutan fuera del Action.• Ejemplo:

• Validación de datos, conversión de tipos, población de datos

• Realizan tareas antes y después de la ejecución de un Action, y puede evitar la ejecución de un Action.

• Si alguna funcionalidad no se encuentra, podemos crear nuestros propios interceptors.

Interceptores

Interceptor Nombre Descripción

Alias alias Permite que los parámetros tengan distintos nombres entre peticiones

Chaining chaining Permite que las propiedades del Action ejecutado previamente, estén disponibles en el Action actual.

Checkbox checkbox Ayuda en el manejo de checkboxes agregando un parámetro con el valor “false” para checkboxes que no están marcados

ConversionError conversionError Coloca información de los errores convirtiendo cadenas a los tipos de parámetros adecuados para los campos de Action.

Create Session createSession Crea de forma automática una sesión HTTP si es que aún no existe una

Execute and Wait execAndWait Envía al usuario a una página de espera intermedia mientras el Action se ejecuta en background.

File Upload fileUpload Hace que la carga de archivos sea más fácil de realizar

Stacks

• Se puede aplicar más de un Interceptor a un Action.• Struts permite la creación de stacks o pilas de interceptores• Los interceptores se aplican en el orden en el cual aparecen en el stack.

• Se pueden formar pilas de interceptores en base a otras pilas de interceptores.

• Se aplica una pila de Interceptores por defecto a los Actions

StacksNombre del Stack Interceptor incluido Descripción

basicStack exception, servletConfig, prepare, checkbox, multiselect, actionMappingParams, params, conversionError

Los interceptores que se espera se utilicen en todos los casos, hasta los más básicos

validationWorkflowStack

basicStack, validation, workflow Agrega validación y flujo de trabajo a las características del stack básico

fileUploadStack fileUpload, basicStack Agrega funcionalidad de carga de archivos a las características de stack básico

paramsPrepareParamsStack

alias, i18n, checkbox, multiselect, params, servletConfig, prepare, chain, modelDriven, fileUpload, staticParams, actionMappingParams, params, conversionError, validation, workflow

Proporciona un stack completo

defaultStack alias, servletConfig, i18n, prepare, chain, debugging, scopedModelDriven, modelDriven, fileUpload, checkbox, multiselect, staticParams, actionMappingParams, params, conversionError, validation, workflow

Es la pila que se aplica por default a todos los Actions de la aplicación.

Actions

• Son clases encargadas para servir la lógica de una petición.• Las URL son mapeadas a una acción específica

• Los Actions no requieren implementar una interfaz o extender una clase• Requisitos: debe tener un método que devuelva un String o un objeto tipo

Result.• El nombre por defecto de este método es “execute”.

Actions

• Pueden ser• Objetos Java simples ( POJOs )• Clases que implementan com.opensymphony.xwork2.Action • Heredar de com.opensymphony.xwork2.ActionSupport

Interfaz Action

La clase ActionSupport implementa la interface Action y contiene una implementación del método execute() que regresa el valor de “SUCCESS”. Así mismo implementa

Results

• Una vez procesado el requerimiento del usuario, se devuelve la respuesta mediante un Result.• Contiene:• Tipo de result, que indica como debe ser tratado el resultado: Un JSP, redirigir

a otra página o un flujo de bytes.

• El tipo de Result por defecto es el dispatcher.

• Un Action puede tener más de un Result asociado.

OGNL

Object Graph Navigation Language

• Permite leer valores de objetos Java y ejecutar métodos, a fin de visualizar los resultados en páginas JSP mediante las etiquetas de Struts.• Permite una conversión automática de tipos desde texto HTTP a

objetos Java• Struts utiliza una versión propia de OGNL

OGNL

• Utiliza un contexto estándar de nombres para evaluar las expresiones• El objeto de más alto nivel es un Map, denominado mapa de contexto

o contexto.• Maneja siempre un objeto raíz, que actúa por default para las

llamadas. • Al utilizar una expresión, las propiedades del objeto raíz pueden ser

referenciadas sin ninguna marca especial. • La referencia a objetos se realiza mediante #

Ejemplo

• Se tiene los objetos “foo” y “bar” y “foo” es el objeto raíz.

#foo.blah // retorna foo.getBlah()#bar.blah // retorna bar.getBlah()blah // regresa foo.getBlah(), por que foo es la raíz

• Se pueden tener varios objetos en el Contexto, pero sólo se puede acceder a miembros del objeto raíz en forma directa.• Al hacer referencia a blah, OGNL buscará el método getBlah().

ValueStack

• OGNL estándar sólo tiene una raíz, pero Struts2 tiene un ValueStack, que permite simular varias raíces.• Cada objeto del ValueStack se comporta como raíz del mapa de

contexto.

Struts2 y OGNL

• El framework establece un contexto como un objeto del tipo ActionContext• ActionContext es el contexto en el cual se ejecuta el Action• El contexto es un contenedor de objetos que el Action requiere para su

ejecución:• session, parameters, locale, etc

• El ValueStack es el objeto raíz.• Conjunto de muchos objetos

Struts2 y el ValueStack

• El ValueStack es el que permite acceder directamente a las propiedades de los objetos• Se puede acceder al objeto y luego a la propiedad, o• Se puede acceder directamente a la propiedad

• El OGNL de Struts2 tiene un “PropertyAccessor” que buscara en todos los objetos del stack

Ejemplo de ValueStack

Struts2_Sample_02_ValueStack

Cuando Struts2 ejecuta un Action como consecuencia de una petición, este Action es colocado en la cima del ValueStack

Objetos del ActionContext

Valores fuera de la raíz

• Para llegar a los valores fuera de la raíz utilizamos el carácter #

• Por ejemplo:• <s:property value="#session.datoSesion" />

• Revisar:• datosSession.action

Validaciones

Mediante XML

• Se debe crear un archivo para cada clase que será validada

• El archivo debe estar colocado en la misma carpeta del Action• En este archivo se debe indicar cuales campos serán validados y que

validaciones se aplicarán

Validaciones de Struts2

Ejemplo de Validator

Struts2_Sample_03_Validator

Validaciones propias

• Struts proporciona la interfaz Validatable, la cual tiene un solo método validate.

• ActionSupport implementa esta interfaz, por lo cual el método se debe sobre escribir• Si existe un error en un campo, se tiene addFieldError

• Recibe dos parámetros: nombre de campo y descripción del erro• Si existe un error no relacionado a un campo se tiene addActionError

• Recibe un parámetro: descripción del error

Struts y el SCOPE

Scopes de objetos web

• Se denomina scopes o alcance al tiempo de vida de un objeto.• Application

• Tiempo de vida completo de la aplicación• Session

• Múltiples peticiones para un mismo usuario• Response

• Asociado a una petición

Formas de Accesos

• Implementar una interface del tipo Aware• Uso del objeto ActionContext• Uso del objeto ServletActionContext

Objetos de Servlet

• Se puede acceder a los objetos HttpServletRequest y ServletContext mediante• Una interface Aware• El objeto ServletActionContext

Manejo de Scopes

• Struts 2 tiene las siguientes interfaces• ApplicationAware• SessionAware• RequestAware

Interfaces

Constantes

• success• Indica que se efectuó el proceso en forma correcta

• error• Indica que se presento un error en el proceso

• input• Indica que algún campo del formulario es incorrecto.

• login• El recurso sólo esta disponible para usuarios registrados

• none• Indica a struts2 que no debe enviar al usuario a ningún lugar

Tipos de Resultado

• dispatcher• Es el resultado por default, envía como resultado una nueva vista

• redirect• Indica al navegador que debe redirigirse a una nueva página. • Puede estar en nuestra aplicación o un sitio externo• Creara una nueva petición para ese recurso

• redirectAction• Redirige la petición a otro Action de la aplicación.• Se crea una nueva petición

• chain• Al terminar la ejecución del Action se llama a otro Action• Se utiliza la misma petición para el segundo Action• Ejecuta el Action de manera completa, con todo el stack

Tipos de Resultado

• stream• Permite enviar un archivo binario de vuelta al usuario

• plaintext• Envía el contenido del recurso como un texto plano

• httpheader• Permite establecer el código de la cabecera HTTP• Se puede utilizar para enviar un error al cliente (status 500), un recurso no

encontrado (status 404)

Tipos de Resultado

• xstl• Se utiliza cuando el resultado genera un XML, el cual con estilos genera la

vista para el cliente

• freemarker• Para integrar con FreeMarker

• velocity• Para integrar con Velocity

• tiles• Para integrar con Tiles

Interceptores

Pila básica: basicStack

• exception• servletConfig• prepare• checkbox• params• conversionError

defaultStack

• exception• alias• servletConfig• prepare• i18n• chain• debugging• profiling

• scopedModelDriven• modelDriven• fileUpload• checkbox• staticParams• conversionError• validation• workflow

fileUpload

• Interceptor que permite la carga de archivos

• Esta implementado por la clase:• org.apache.struts2.interceptor.FileUploadInterceptor• Recibe dos parámetros:

• maximumSize• allowedTypes

Interceptores

Forma corta

Agregando interceptores

Agregando Interceptores a un stack

• Se pueden agregar interceptores a un stack y luego definirlo como default

• Utilizamos la etiqueta <interceptors>• Dentro de esta etiqueta se pueden agregar interceptores nuevos

Definición de Interceptors

Uso del interceptor definido

Modificación del Interceptor

Modificación