/jsp/{1}.jsp Invocación de métodos dinámicamente Mediante la anotación bang, "!", permite invocar a métodos dinámicamente. La URI /Usuario!login.action invocará al método login() del Action. CURSO STRUTS 2 RESUMEN Problemas Doble Submit en Formularios Struts 2 dispone de herramientas para prevenir los errores de “doble submits” en los formularios Web, utilizando para ello la técnica del token único. Para activar el sistema que evita problemas duplicación de envíos es necesario una combinación dos componentes del framework: Configurar Interceptor token o tokenSession para la petición del formulario Definir el tag dentro del formulario Web. TÉCNICAS AVANZADAS Algunas de las técnicas avanzadas estudiados durante el presente módulo son: Navegación Excepciones Doble Submit File Upload Struts 2 facilita la tarea de subir archivos a la aplicación, utilizando para ello el Interceptor fileUpload. Las condiciones que se deben cumplir para poder subir archivos desde un formulario Web a la aplicación son: Definir la encriptación el formulario Web como "multipart/form-data": ... Configuración los atributos Action para capturar el datos del archivo subido: stream datos, nombre archivo y el tipo de contenido (contentType), cada uno de ellos debe seguir el siguiente patrón de nombre: [nombreAtributo]File, [nombreAtributo]FileName y [nombreAtributo]ContentType. public class FileUploadAction extends ActionSupport { private uploadFile; private uploadFileName; private uploadContentType; //para el caso de varios archivos subidos, se puede recoger en un array o List private uploadFile[]; private uploadFileName[]; private uploadContentType[]; } Medidor de Progreso Struts 2 cuenta con el Interceptor execAndWait, para facilitar la tarea de emular una barra de progreso en la interfaz del usuario mientras se ejecuta en el servidor la lógica de negocio pesada. Para activarlo sólo es necesario definir el interceptor execAndWait para la ejecución de un Action /jsp/wait.jsp /jsp/success.jsp File Upload File Download Medidor Progreso File Download Struts 2 cuenta con herramientas para facilitar la descarga de archivos desde la aplicación, permitiendo configurarlo mediante directivas XML, o bien, utilizando mecanismos de programación. Para poder descargar el contenido de un archivo, hay que seguir los siguientes pasos: Utilizar el tipo de Result "stream" para la ejecución del Action, y establecer sus valores de configuración. image/jpeg attachment;filename=“${nombre}.jpg" false Definir en el interfaz un enlace o entrada para invocar al Action que envía el stream de descarga. Descarga archivo"> /jsp/{1}.jsp Invocación de métodos dinámicamente Mediante la anotación bang, "!", permite invocar a métodos dinámicamente. La URI /Usuario!login.action invocará al método login() del Action. CURSO STRUTS 2 RESUMEN Problemas Doble Submit en Formularios Struts 2 dispone de herramientas para prevenir los errores de “doble submits” en los formularios Web, utilizando para ello la técnica del token único. Para activar el sistema que evita problemas duplicación de envíos es necesario una combinación dos componentes del framework: Configurar Interceptor token o tokenSession para la petición del formulario Definir el tag dentro del formulario Web. TÉCNICAS AVANZADAS Algunas de las técnicas avanzadas estudiados durante el presente módulo son: Navegación Excepciones Doble Submit File Upload Struts 2 facilita la tarea de subir archivos a la aplicación, utilizando para ello el Interceptor fileUpload. Las condiciones que se deben cumplir para poder subir archivos desde un formulario Web a la aplicación son: Definir la encriptación el formulario Web como "multipart/form-data": ... Configuración los atributos Action para capturar el datos del archivo subido: stream datos, nombre archivo y el tipo de contenido (contentType), cada uno de ellos debe seguir el siguiente patrón de nombre: [nombreAtributo]File, [nombreAtributo]FileName y [nombreAtributo]ContentType. public class FileUploadAction extends ActionSupport { private uploadFile; private uploadFileName; private uploadContentType; //para el caso de varios archivos subidos, se puede recoger en un array o List private uploadFile[]; private uploadFileName[]; private uploadContentType[]; } Medidor de Progreso Struts 2 cuenta con el Interceptor execAndWait, para facilitar la tarea de emular una barra de progreso en la interfaz del usuario mientras se ejecuta en el servidor la lógica de negocio pesada. Para activarlo sólo es necesario definir el interceptor execAndWait para la ejecución de un Action /jsp/wait.jsp /jsp/success.jsp File Upload File Download Medidor Progreso File Download Struts 2 cuenta con herramientas para facilitar la descarga de archivos desde la aplicación, permitiendo configurarlo mediante directivas XML, o bien, utilizando mecanismos de programación. Para poder descargar el contenido de un archivo, hay que seguir los siguientes pasos: Utilizar el tipo de Result "stream" para la ejecución del Action, y establecer sus valores de configuración. image/jpeg attachment;filename=“${nombre}.jpg" false Definir en el interfaz un enlace o entrada para invocar al Action que envía el stream de descarga. Descarga archivo">

La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

CURSO STRUTS 2 RESUMEN Resumen de lo visto en este quinto módulo: CONCEPTOS AVANZADOS del framework Struts 2: Debes tener los conceptos muy claros sobre:

Presentaciones similares


Presentación del tema: "CURSO STRUTS 2 RESUMEN Resumen de lo visto en este quinto módulo: CONCEPTOS AVANZADOS del framework Struts 2: Debes tener los conceptos muy claros sobre:"— Transcripción de la presentación:

1 CURSO STRUTS 2 RESUMEN Resumen de lo visto en este quinto módulo: CONCEPTOS AVANZADOS del framework Struts 2: Debes tener los conceptos muy claros sobre: Técnicas avanzadas AJAX Anotaciones Buenas prácticas

2 CURSO STRUTS 2 RESUMEN TÉCNICAS AVANZADAS Exception Mapping
Struts 2 permite capturar cualquier tipo de excepción utilizando los elementos de configuración <exception-mapping> y/o <global-exception-mapping>. El interceptor Exception gestiona las excepciones producidas, además almacena en el ValueStack el valor de la excepción: exception y exceptionStack <s:property value=“exception.message”/> <s:property value=“exceptionStack”/> Ejemplo <package ...> <global-results> <result name=“error”>/jsp/Error.jsp</result> <result name=“sqlError”>/jsp/SQLError.jsp</result> </global-results> <global-exception-mappings> <exception-mapping exception=“java.sql.SQLException” result=“sqlError”/> <exception-mapping exception=“java.lang.Exception” result=“error”/> </global-exception-mappings> <action ...> <result>/jsp/Menu.jsp</result> </action> </package> Comodines Mapping Mediante el comodín "*" es posible reducir la configuración de los Actions. Los valores del comodín se obtienen mediante las sintaxis {1}, {2},...{n}; {0} representa la URL. Ejemplo <package name=“comodinMapping” namespace=“/comodin” extends=“struts-default”> <action name=“*_*” class=“ejercicio.capitulo5.{1}” method=“{2}”> <result>/jsp/{1}.jsp</result> </action> </package> Invocación de métodos dinámicamente Mediante la anotación bang, "!", permite invocar a métodos dinámicamente. La URI /Usuario!login.action invocará al método login() del Action. CURSO STRUTS 2 RESUMEN Problemas Doble Submit en Formularios Struts 2 dispone de herramientas para prevenir los errores de “doble submits” en los formularios Web, utilizando para ello la técnica del token único. Para activar el sistema que evita problemas duplicación de envíos es necesario una combinación dos componentes del framework: Configurar Interceptor token o tokenSession para la petición del formulario <package …> <interceptor-ref name="defaultStack"/> <interceptor-ref name=“token"/> <action..></action> </package> Definir el tag <s:token/> dentro del formulario Web. <s:form …> <s:token/> </s:form> TÉCNICAS AVANZADAS Algunas de las técnicas avanzadas estudiados durante el presente módulo son: Navegación Excepciones Doble Submit File Upload Struts 2 facilita la tarea de subir archivos a la aplicación, utilizando para ello el Interceptor fileUpload. Las condiciones que se deben cumplir para poder subir archivos desde un formulario Web a la aplicación son: Definir la encriptación el formulario Web como "multipart/form-data": <s:form action=“multipleUpload” enctype=“multipart/form-data”> <s:file name=“upload” label=“File Upload”/> ... <s:submit /> </s:form> Configuración los atributos Action para capturar el datos del archivo subido: stream datos, nombre archivo y el tipo de contenido (contentType), cada uno de ellos debe seguir el siguiente patrón de nombre: [nombreAtributo]File, [nombreAtributo]FileName y [nombreAtributo]ContentType. public class FileUploadAction extends ActionSupport { private uploadFile; private uploadFileName; private uploadContentType; //para el caso de varios archivos subidos, se puede recoger en un array o List private uploadFile[]; private uploadFileName[]; private uploadContentType[]; } Medidor de Progreso Struts 2 cuenta con el Interceptor execAndWait, para facilitar la tarea de emular una barra de progreso en la interfaz del usuario mientras se ejecuta en el servidor la lógica de negocio pesada. Para activarlo sólo es necesario definir el interceptor execAndWait para la ejecución de un Action <action ...> <interceptor-ref name="completeStack"/> <interceptor-ref name="execAndWait"/> <result name="wait">/jsp/wait.jsp</result> <result name="success">/jsp/success.jsp</result> </action> File Upload File Download Medidor Progreso File Download Struts 2 cuenta con herramientas para facilitar la descarga de archivos desde la aplicación, permitiendo configurarlo mediante directivas XML, o bien, utilizando mecanismos de programación. Para poder descargar el contenido de un archivo, hay que seguir los siguientes pasos: Utilizar el tipo de Result "stream" para la ejecución del Action, y establecer sus valores de configuración. <action name="..." class="..."> <result name="success" type="stream"> <param name="contentType">image/jpeg</param> <param name="contentDisposition">attachment;filename=“${nombre}.jpg"</param> <param name="allowCaching">false</param> </result> </action> Definir en el interfaz un enlace o entrada para invocar al Action que envía el stream de descarga. <s:a href=“/fileDownload.action”>Descarga archivo</s:a>

3 CURSO STRUTS 2 RESUMEN AJAX Plug-in AJAX Results Plug-in AJAX
¿Qué es AJAX? AJAX, acrónimo de Asynchronous JavaScript And XML (JavaScript asíncrono y XML), es una técnica de desarrollo web para crear aplicaciones interactivas o RIA (Rich Internet Applications), que permite realizar comunicaciones asíncronas con el servidor en segundo plano, de esta forma, es posible realizar cambios sobre las páginas sin necesidad de recargarlas completamente, lo que significa aumentar la interactividad, velocidad y usabilidad en las aplicaciones Web. Results Existen distintos tipos de Results que permite gestionar respuestas AJAX: stream, almacenando aquellos valores a enviar al navegador en un inputStream, para mostrarlos en la Vista. public class ListaProvinciasAjaxAction extends ActionSupport { private InputStream inputStream; public String execute() throws Exception { Provincia provincias[] = logicaPronvica.getListaProvincias(comunidad); inputStream = new StringBufferInputStream(provincias.toString()); return SUCCESS; } .... dispatcher, redirigir la salida a un recurso: JSP, Velocity o FreeMarker, que no implemente una página HTML completa sino simplemente desarrolle al estructura HTML que se desee mostrar en la Vista. taglib prexif=”s” uri=”/struts-tags”%> <table> <s:iterator value="provincias"> <tr><td><s:property value="nombre"/></td><td> </s:iterator> </table> plug-in, como puede ser el plug-in JSON, permite devolver una respuesta AJAX en formato JSON de los valores de los atributos del Action. <package name=”ajax” namespace=”/ajax” extends=”json-default”> <action name="lista-provincias" class="ejericio.capitulo5.ListaProvinciasAjaxAction"> <result type=”json”> <param name="includeProperties"> ^entries\[\d+\]\.provincias </param> </result> </action> </package> CURSO STRUTS 2 RESUMEN Plug-in AJAX Mediante el uso de plug-in Struts 2 dispone de sistemas para gestionar peticiones y respuestas AJAX. Existen distintos tipos de plug-in: - plug-in Result AJAX, gestionan las respuestas mediante Results, como pueden ser: plug-in JSON o plug-in Another JSON Result Type. <package name="ajax" namespace=”/ajax” extends="struts-default"> <result-types> <result-type name="json" default="true" class="code.google.struts2jsonresult.JSONResult"> <param name="prettyPrint">true</param> </result-type> </result-types> <action name="lista-provincias" class="ejericio.capitulo5.ListaProvinciasAjaxAction"> <result> <param name="target">listaProvincias</param> <param name="patterns"> -*.class, -gradeArticle</param> </result> </action> </package> - plug-in taglibs AJAX, añaden nuevas librerías de tags para utilizarlas en los JSPs, algunos de estos son: plug-in Dojo, plug-in jQuery, plug-in YUI, plug-in Ajax Parts, ... taglib prefix="s" uri="/struts-tags"%> taglib prefix="sj" uri="/struts-jquery-tags"%> <html> <head> <sj:head/> </head> <body> <div id="div1">Div 1</div> <s:url id="ajaxTest" value="/AjaxTest.action"/> <sj:a id="link1" href="%{ajaxTest}" target="div1"> Update Content </sj:a> </body> </html> - plug-in AJAX integran con otros frameworks AJAX, pudiendo disponer desde nuevos tipos Results a nuevas taglibs, algunos de ellos son: plug-in AJAX File Upload, plug-in GWT, plug-in DWR, plug-in LightBoxJs,... <dwr> <allow> <create creator="new" javascript="validator" class="org.apache.struts2.validators.DWRValidator"/> <convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/> </allow> </dwr> AJAX Durante el presente módulo hemos visto cómo Struts 2 ofrece soluciones AJAX, debemos tener claro los siguientes conceptos: ¿Qué es AJAX? Soluciones AJAX en Struts 2 Results Plug-in AJAX Plug-in Dojo Plug-in Dojo El plug-in Dojo es el sistema por defecto AJAX, adoptado por Struts 2. Este plug-in integrar el framework JavaScript Dojo en las apliaciones Struts 2 mediante unas nuevas taglibs AJAX. Los pasos necesarios para utilizarlo son: Copiar la librería struts2-dojo-plugin-VERSION.jar en el directorio /WEB-INF/lib de la aplicación Web. Añadir al principio de los JSPs la siguiente directiva para poder utilizar los tags de Struts2-Dojo plug-in: taglib prefix=“sx” uri=“/struts-dojo-tags” %> Definir el tag head en cada JSP que utilice las tags AJAX. <sx:head/> Los tags que se encuentran en el Struts2-Dojo plug-in son los siguientes. head div a submit bind datetimepicker tabbedpanel textarea autocompleter tree treenode

4 CURSO STRUTS 2 RESUMEN ANOTACIONES ¿Qué son las Anotaciones? Action
Una Anotación Java es una forma de añadir metadatos al código fuente que están disponibles para la aplicación en tiempo de ejecución, se suele utilizar como una a la tecnología XML. Las Anotaciones se pueden añadirse a los elementos de programa tales como clases, métodos, campos, parámetros, variables locales, y paquetes. Tipos de Anotaciones Action Las Anotaciones Action definen la configuración del propio Action donde están definidas. Existen dos versiones distintas de Anotaciones Action, en función del plug-in que se utilice: Plug-in Codebehind, dispone de Anotaciones básicas a nivel de clase, permitiendo sólo mapear un URL para una clase Action. @Namespace @ParentPackage @Result @Results Ejemplo @Results({ @Result(name=“OK”, value=“/jsp/Menu.jsp”, type=“ServletDispatcherResult.class”), @Result(name=“FALLO”, value=“/jsp/Error.jsp”, type=“ServletDispatcherResult.class”) }) public class Login extends ActionSupport { ... } Plug-in Convention, evolución del plug-in Codebehind, permite dar una solución completa a la configuración de los Actions sin utilizar ningún archivo de configuración XML. @Action @Actions @ExceptionMapping @ExceptionMappings @InterceptorRef @InterceptorRefs @Namespaces @ResultPath public class TestAnnotation extends ActionSupport { @Actions({ @Action(“/uno/url”), @Action(value=“/dos/url”, params={“login-obligatorio”,”false”}), @Action(“/tres/url”), public String execute() { return SUCCESS; Tipos de Anotaciones Validación Campos El framework Validation de Struts 2, heredado de XWork, cuenta con Anotaciones para todas sus validaciones, lo que nos permite utilizarlo directamente en los Action para definir las reglas de validación de los campos. Para utilizar cualquiera de las Anotaciones de Validation es necesario definir al nivel de clase la el resto de Anotaciones trabajan a nivel método. Lista de Anotaciones Validation @Validation Annotation @ConversionErrorFieldValidator Annotation @DateRangeFieldValidator Annotation @DoubleRangeFieldValidator Annotation @ Validator Annotation @ExpressionValidator Annotation @FieldExpressionValidator Annotation @IntRangeFieldValidator Annotation @RegexFieldValidator Annotation @RequiredFieldValidator Annotation @RequiredStringValidator Annotation @StringLengthFieldValidator Annotation @UrlValidator Annotation @VisitorFieldValidator Annotation @CustomValidator Annotation @Validations Annotation Ejemplo @Validation public class AnnotationValidatorAction extends ActionSupport { ... @DoubleRangeFieldValidator(message = “El porcentaje está fuera de rango “, key = “porcentaje.error.rango”, shortCircuit = true, minInclusive = “0.0”, maxInclusive = “100.0”) public void setPorcentaje(Double porcentaje) { this.porcentaje = porcentaje; } @ConversionErrorFieldValidator(message = “El formato del sueldo no es válido”, key = “sueldo.validator”, shortCircuit = true) public void setSueldo(Double sueldo) { this.sueldo = sueldo; CURSO STRUTS 2 RESUMEN ANOTACIONES Las Anotaciones en Struts 2 simplifican el proceso de configuración de aplicaciones Web Java con Struts 2. Debemos recordar los siguientes conceptos de las Anotaciones en Struts 2: ¿Qué son las Anotaciones? Tipos de Anotaciones en Struts 2 Action Interceptor Workflow Conversión Validación Tipos de Anotaciones Workflow El Interceptor Workflow dispone de una Anotación propia para gestionar el flujo de navegación en caso de error de validación. <action ...> <interceptor-ref name="annotationWorkflow"/> ... </action> La lista de las Anotaciones de tipo Workflow son: @InputConfig Annotation Ejemplo public class AnnotationWorkflowAction extends ActionSupport { @InputConfig(methodName="input") public String execute() { return SUCCESS; } public String input() { return INPUT; Tipos de Anotaciones Interceptor Las Anotaciones Interceptor se invocan gracias al Interceptor AnnotationWorkflow, el cual se encarga de lanzar aquellos métodos de los Action que tengan definida una Anotación de tipo Interceptor. <action ...> <interceptor-ref name=“annotationWorkflow”/> ... </action> Las Anotaciones de tipo Interceptor son: @After Annotation @Before Annotation @BeforeResult Annotation Ejemplo public class InterceptorAnnotationAction extends ActionSupport { @Before public void isAutorizado() throws ValidationException { } @After public void isValid() throws ValidationException { Tipos de Anotaciones Conversión de Tipos Utilizando las Anotaciones de Conversión de Tipos se evita el uso de los archivos de configuración de conversión de tipos, ClassName-conversion.properties. Para utilizar cualquiera de las Anotaciones de Conversión de Tipos es necesario definir al nivel de clase la el resto de Anotaciones trabajan a nivel de atributo y método. Lista de Anotaciones de Conversión de Tipos @Conversion Annotation @CreateIfNull Annotation @Element Annotation @Key Annotation @KeyProperty Annotation @TypeConversion Annotation Ejemplo @Conversion public class AnnotationConversionAction extends ActionSupport { @Element(value = ejercicio.capitulo5.Usuario ) private List<Usuario> listaUsuarios; private Map<String, Usuario> mapUsuarios; ... }

5 CURSO STRUTS 2 RESUMEN BUENAS PRÁCTICAS Seguridad en Struts 2
La seguridad en las aplicaciones Web es uno de los puntos críticos más importantes. Existen dos formas de gestionar la seguridad: utilizando directivas de configuración en el archivo descriptor de despliegue, web.xml: <web-app> ... <security-constraint> <web-resource-collection> <web-resource-name>Área Manager</web-resource-name> <url-pattern>/manager/*.action</url-pattern> </web-resource-collection> <auth-constraint> <role-name>manager</role-name> </auth-constraint> </security-constraint> <security-role> <role-name>admin</role-name> </security-role> </web-app> configurando el Interceptor roles de Struts 2: <package name=“capitulo5-secure” extends=“struts-default”> <action name=“Usuario”> <interceptor-ref name=“completeStack”/> <interceptor-ref name=“roles”> <param name=“allowedRoles”>admin,manager</param> </interceptor-ref> <result>/jsp/Usuario.jsp</result> </action> </package> mediante programación en código Java: public class SecurityAction extends ActionSupport { public void validate() { if (!isUserRegister()) { .... } Profiling en Struts 2 Struts 2 dispone de dos Interceptor como herramienta de profiling, que permite identificar los cuellos de botella de la aplicación. El Interceptor Timer, registra el tiempo que tarda en ejecutarse cada petición. <package name="timer"> <action name="test-timer"> <interceptor-ref name="timer"/> <interceptor-ref name="completeStack"/> <result name="success">/jsp/test_timer.jsp</result> </action> </package> El Interceptor Profile, registra el tiempo que tarda en ejecutarse cada petición, así como cada componente que interviene en la petición: Interceptors, Actions y Results, gracias a la clase UtilTimerStack. <package name="profile"> <interceptor-ref name="profile"/> <result name="success">/jsp/profile.jsp</result> CURSO STRUTS 2 RESUMEN Debuggin en Struts 2 Struts 2 cuenta con dos componentes que facilitan la tarea de debugging: El tag debug taglib prefix=“s” uri=“/struts-tags” %> <s:debug/> El Interceptor debugging, para invocar al Interceptor es necesario añadir el parámetro debug=xml o debug=console en la URL que invoca a un Action. <debug> <parameters/> <context> <attr/> <report.conversion.errors>false</report.conversion.errors> <struts.actionMapping> <class>class org.apache.struts2.dispatcher.mapper.ActionMapping</class> <name>DebuggingTest</name> <namespace>/</namespace> </struts.actionMapping> </context> <request/> <session/> <valueStack> <value> <actionErrors/> <actionMessages/> ... </valueStack> </debug> BUENAS PRÁCTICAS Debes recordar distintas técnicas que se pueden aplicar al framework Struts 2 para mejorar su funcionamiento. Seguridad Testing en Struts 2 Las características de Struts 2 que facilitan la realización de test en sus componentes, Actions, Interceptors, ConversionTypes, ValidationTypes,… son Evita la dependencia del código del API Servlet. Minimizar la dependencia del código con el framework mediante el uso de interfaces. Los test se pueden realizar test de manera individual, o invocando el conjunto completo de componentes que se invocan en una petición: Actions, Interceptors, … Mediante el framework JUnit se pueden realizar distintos tipos de test de los componentes del framework: public class JUnitActionTest extends TestCase { public void test() { .... } public class TestNGActionTest extends BaseStrutsTestCase { Debug Profile Test Rendimiento Mejoras Rendimiento Desactivar el sistema de loggin y devMode Utilizar Java Templates Utilizar las cabeceras HTTP correctas Modificar la configuración de FreeMarker Activar el cache de los templates de FreeMarker Copiar todos los templates que se sobrescriban al directorio theme No crear la sesión HTTP si no es necesario Utilizar los tags de FreeMarker mejor que los tags JSP No utilizar Interceptors si no son necesarios Copiar los contenidos estáticos de Struts 2 si se utiliza el theme AJAX


Descargar ppt "CURSO STRUTS 2 RESUMEN Resumen de lo visto en este quinto módulo: CONCEPTOS AVANZADOS del framework Struts 2: Debes tener los conceptos muy claros sobre:"

Presentaciones similares


Anuncios Google