Java struts2 - 03 componentes de la aplicacion
Transcript of Java struts2 - 03 componentes de la aplicacion
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.
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
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
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 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
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
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
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
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