280 likes | 486 Views
PLUG-IN. CURSO STRUTS 2. En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados por defecto en el framework , así como su utilidad. La información que se estudiará en este apartado es: Plug-in
E N D
PLUG-IN CURSO STRUTS 2 • En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados por defecto en el framework , así como su utilidad. • La información que se estudiará en este apartado es: • Plug-in • Configuración de un Plug-in • Lista de Plug-ins integrados en Struts 2 • Lista de Plug-ins de terceros • Construir un plug-in personalizado
PLUG-IN CURSO STRUTS 2 • PLUG-IN • El framework Struts 2 ha sido diseño para ampliar su funcionalidad mediante plug-ins, permitiendo la reutilización de código de una forma elegante y sencilla. • Contenido de un plug-in • Un plug-in de Struts 2, esencialmente es una librería JAR que puede contener: • clases Java, que implementen nueva funcionalidad: Actions, Interceptors, Conversores de Tipos, Validators, Results,… • taglibs • plantillas FreeMarker o Velocity • recursos estáticos HTML, imágenes, CSS, JavaScript, … • y siempre debe estar el archivo de configuración struts-plugin.xml en el directorio raíz del JAR • Instalación • Para utilizar un plug-in es tan sencillo como copiar la librería JAR del plug-in en el directorio /WEB-INF/lib. PLUG-IN Un complemento (o plug-in en inglés) es una aplicación que se relaciona con otra para aportarle una función nueva y generalmente muy especifica. Esta aplicación adicional es ejecutada por la aplicación principal e interactúan por medio de la API. En la programación actual se utilizan como una forma de expandir programas de forma modular, de manera que se puedan añadir nuevas funcionalidades sin afectar a las ya existentes ni complicar el desarrollo del programa principal.
PLUG-IN CURSO STRUTS 2 • CONFIGURACIÓN DE UN PLUG-IN • Un plug-in del framework Struts 2 es un archivo JAR donde, a parte del contenido que aporta nueva funcionalidad, debe existir el archivo struts-plugin.xml. • struts-plugin.xml • El archivo struts-plugin.xml sigue el mismo esquema (DTD) que el archivo struts.xml, permitiendo definir preferencias propias de la configuración de la aplicación • Orden carga Configuración • Struts 2 carga los archivos de configuración en el siguiente orden: • 1. El archivo struts-default.xml incluido en el archivo struts2-core.jar. • 2. Todos los archivos struts-plugin.xml incluidos en las librerías de plug-ins. • 3. El archivo struts.xml. • Esto significa que un plug-in, puede sobrescribir los valores de la configuración por defecto (struts-default.xml). • Contenido • En el archivo de configuración struts-plugin.xml se pueden distribuir cualquier tipo de componente de Struts 2: • packages • results • interceptors • actions • exception-mappings Struts 2 no carga los plug-ins en ningún orden determinado, por este motivo los plug-ins no deberían tener dependencias con otros, sólo debería tener dependencia con las clases de Struts2-core.
PLUG-IN CURSO STRUTS 2 • LISTA PLUG-INS INTEGRADOS EN STRUTS 2 • Struts 2 cuenta con varios plug-ins los cuales son utilizados normalmente en el desarrollo de aplicaciones Web Java utilizando con el framework. • Los plug-ins integrados en el framework, concretamente en la versión 2.1.6 son: • Codebehind plug-in • Config-browser plug-in • Convention plug-in • Dojo plug-in • DWR plug-in • Jasperreports plug-in • Javatemplates plug-in • Jfreechart plug-in • JSF plug-in • Junit plug-in • Plexus plug-in • Portlet plug-in • Rest plug-in • Sitegraph plug-in • Sitemesh plug-in • Spring plug-in • Struts1 plug-in • Testng plug-in • Tiles plug-in
PLUG-IN CURSO STRUTS 2 LISTA PLUG-INS INTEGRADOS EN STRUTS 2 Codebehind plug-in El plug-in Codebehind reduce la configuración de los Actions introduciendo un nuevo controlador: PageController, el cual simplifica los desarrollos con Struts 2 no siendo necesario archivos de configuración,, sólo hay que respetar una serie de convenios. Además del nuevo controlador, el plug-in tiene también empaquetado las clases responsables de las Anotaciones de los Actions (@Namespace, @ParentPackage, @Result y @Results). Uso Configuración Instalación ADVERTENCIA: este plug-in se ha declarado obsoleto (deprecated) desde la versión 2.1 de Struts 2, agrupando todas sus funcionalidades en el nuevo plug-in Convention. Para utilizar el plug-in sólo hay que copiar el JAR en la aplicación. El plug-in permite personalizar su configuración con los siguientes parámetros, que se deben definir mediante elementos <constant> en el archivo struts.xml: El plug-in Codebehind se instala copiando el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, no es necesario ningún otro archivo.
PLUG-IN CURSO STRUTS 2 • LISTA PLUG-INS INTEGRADOS EN STRUTS 2 • Config-browser plug-in • El plug-in Config Browser es una herramienta que permite ver la configuración de la aplicación en tiempo de ejecución. Es muy útil cuando la aplicación se encuentra en fase de desarrollo, permitiendo mostrar todos los problemas de configuración: • El plug-in dispone de las siguientes características: • • Muestra la configuración de la aplicación en tiempo de ejecución • • Muestra todas las URL accesibles por Actions • Uso • Configuración • Instalación Para utilizar el plug-in Config Browser sólo hay que copiar el JAR del plug-in en el directorio /WEB-INF/lib e introducir la URI, /config-browser/index.action, en el navegador para mostrar la configuración. Ejemplo: http://localhost:8080/struts2sample/config-browser/index.action Este plug-in no permite modificar su configuración. El plug-in Config Browser se instala copiando el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, no es necesario ningún otro archivo.
PLUG-IN CURSO STRUTS 2 • LISTA PLUG-INS INTEGRADOS EN STRUTS 2 • Convention plug-in • El plug-in Convention reemplaza los plug-ins Codebehind y Zero Config, proporcionando las siguientes funcionalidades: • • Convenio de asignación de los Actions en función del nombre de los paquetes Java. • • Convenio de localización de los Results. • • Convenio de nombre de Clase a nombre URL. • • URL compatibles estándar SEO (Search Engine Optimization), para facilitar el posicionamiento en buscadores (p.e. /my-action en lugar de /MyAction). • • Anotaciones para los Actions, Interceptors, Namespace, Results y ExceptionMapping. • • Gestor de Action y Result por defecto (p.e. /usuarios buscará en el paquete ejercicio.capitulo4.actions.Usuario y ejercicio.capitulo4.actions.Index) • Uso • Configuración • Instalación Para utilizar el plug-in sólo hay que copiar el JAR en la aplicación. • El plug-in Convention dispone de numerosos parámetros que permite personalizar su configuración, estos se deben definir mediante elementos <constant> en el archivo struts.xml. Sus parámetros de configuración son: • • struts.convention.action.disableJarScanning • • struts.convention.action.packages • • struts.convention.result.path • • struts.convention.result.flatLayout • • struts.convention.action.suffix • • struts.convention.action.disableScanning • • struts.convention.action.mapAllMatches • • struts.convention.action.checkImplementsAction • • struts.convention.default.parent.package • • struts.convention.action.name.lowercase • • struts.convention.action.name.separator • • struts.convention.package.locators • • struts.convention.package.locators.disable • • struts.convention.exclude.packages • • struts.convention.package.locators.basePackage • • struts.convention.relative.result.types • • struts.convention.redirect.to.slash El plug-in Convention se instala copiando el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, no es necesario ningún otro archivo.
PLUG-IN CURSO STRUTS 2 LISTA PLUG-INS INTEGRADOS EN STRUTS 2 Dojo plug-in El plug-in Dojo permite integración con el framework Javascript Dojo, definiendo una nueva taglib que permite el uso de técnicas AJAX para mostrar información en contadores definidos por los nuevos tags. Uso Configuración Instalación Para utilizar el plug-in sólo hay que copiar el JAR en la aplicación, y en aquellos JSP que se desee utilizar . <%@ taglib prefix="sx" uri="/struts-dojo-tags" %> Este plug-in no permite modificar su configuración. El plug-in Dojo se instala copiando el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, no es necesario ningún otro archivo.
PLUG-IN CURSO STRUTS 2 LISTA PLUG-INS INTEGRADOS EN STRUTS 2 DWR plug-in DWR es un framework open source Java para gestionar y facilitar el tratamiento de peticiones AJAX. El plug-in DWR permite integración con el framework AJAX DWR (Direct Web Remoting). Este plug-in permite al framework DWR ejecutar Actions de Struts 2 y devuelve cualquier tipo de error de validación. Uso Configuración Instalación Para poder utilizar la validación de los Actions con el framework DWR, es necesario modificar la configuración de DWR: <dwr> <allow> <create creator="new" javascript="validator" class="org.apache.struts2.validators.DWRValidator"/> <convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/> </allow> </dwr> Este plug-in no permite modificar su configuración. El plug-in DWR se instala copiando el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, y el propio JAR del framework DWR.
PLUG-IN CURSO STRUTS 2 LISTA PLUG-INS INTEGRADOS EN STRUTS 2 Jasperreports plug-in JasperReports es un framework open source Java de reporting que permite exportar el contenidos de interfaz en formato PDF, HTML, XLS, XML, CSV y RTF. El plug-in JasperReports permite crear reportes de calidad desde los Actions como resultados. Uso Configuración Instalación El plug-in dispone de un nuevo package Action, jasperreports-default, que tiene configurado un nuevo Result “jasper”, el cual permite mostrar reportes JasperReports como resultados. Los parámetros de configuración del nuevo Result “jasper” son: Un ejemplo de uso del plug-in JasperReports sería: <package name=”capitulo4” extends=”jasperreports-default”> <action name="..."> <result name="success" type="jasper"> <param name="location">foo.jasper</param> <param name="dataSource">fuenteDatos</param> <param name="format">RTF</param> </result> </action> </package> Este plug-in no permite modificar su configuración. El plug-in JasperReports se instala copiando el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, y el propio JAR del framework JasperReports.
PLUG-IN CURSO STRUTS 2 LISTA PLUG-INS INTEGRADOS EN STRUTS 2 Javatemplates plug-in El plug-in JavaTemplates contiene una implementación en código Java de los tags del theme “simple”, los tags de Struts 2 utilizan tecnología FreeMarker para visualizarse. Utilizando este plug-in junto al theme “simple” se consigue una mejora de rendimiento al visualizarse las páginas. Los tags implementados por el plug-in que disponen de un mejor rendimiento son: a, actionerror, actionmessage, checkbox, div, fielderror, file, form, head, hidden, label, password, select, reset, submit, text, textarea y token. Uso Configuración Instalación Para utilizar el plug-in es necesario copiar el JAR en la aplicación y modificar la configuración del archivo struts.xml: <constant name="struts.ui.templateSuffix" value="java" /> <constant name="struts.ui.theme" value="simple" /> Este plug-in no permite modificar su configuración. El plug-in JavaTemplate se instala copiando el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, no es necesario ningún otro archivo.
PLUG-IN CURSO STRUTS 2 LISTA PLUG-INS INTEGRADOS EN STRUTS 2 Jfreechart plug-in JFreeChart es una librería open source Java que permite crear tablas y gráficos en las aplicaciones. El plug-in JFreeChart permite que los Actions devuelvan tablas y gráficos generados por el framework JFreeChart. Uso Configuración Instalación Este plug-in implementa un package Struts2, jfreechart-default, el cual cuenta con nuevo Result, “chart”, el cual gestiona la visualización de los gráficos. A continuación se muestra un ejemplo de configuración de un Action, utilizando el plug-in Jfreechart para representar un gráfico: <package name="/capitulo4" extends="jfreechart-default"> <action name="generaGrafico" class="ejemplo.capitulo4.GeneraGraficoAction"> <result name="success" type="chart"> <param name="width">400</param> <param name="height">300</param> </result> </action> </package> El result ChartResult del plug-in obtiene los datos del gráfico del método getChart() del Action: public class GeneraGraficoAction extends ActionSupport { private JFreeChart chart; public String execute() { //generando el gráfico return super.SUCCESS; } public JFreeChart getChart() { return chart; } } Este plug-in no permite modificar su configuración. El plug-in JFreeChart se instala copiando el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, y el propio JAR de la librería JFreeChart.
PLUG-IN CURSO STRUTS 2 LISTA PLUG-INS INTEGRADOS EN STRUTS 2 JSF plug-in JavaServer Faces JSF es la especificación definida por Sun para definir el comportamiento y ciclo de vida de componentes que permiten desarrollos de aplicaciones Web. Existen distintas distribuciones del API JSF en función de su constructor: MyFaces, Icefaces, … El plug-in JSF permite soportar componentes JavaServer Faces (JSF) sin configuración adicional en una aplicación Web con Struts 2. Este plug-in combina el común Action-based aproximación a la página lógica y navegación, permitiendo soporte para componentes JSF. Uso Configuración Instalación • Para simular el ciclo de vida de JSF, el plug-in dispone de un Interceptor y un Result que se debe gestionar en la configuración de los Actions. Para utilizar una página con componentes JSF es necesario: • 1. Añadir el Interceptor stack jsfStack a la definición del Action. También está disponible el package jsf-default para simplificar el proceso. • 2. Añadir un Result de tipo “jsf” asociado al nombre success. • Un ejemplo de configuración de navegación del plug-in JSF para utilizar componentes JSF en la vista sería: • <package name="capitulo4-1-jsf" extends="jsf-default"> • <action name="..." class="ejercicio.capitulo4.TestJSFAction"> • <result name="success" type="jsf" /> • <result name="index" type="redirectAction">index</result> • </action> • </package> • <package name="capitulo4-2-jsf" extends="jsf-default"> • <action name="..." class="ejercicio.capitulo4.TestJSFAction"> • <interceptor-ref name="basicStack"/> • <interceptor-ref name="jsfStack"/> • <result name="success" type="jsf" /> • <result name="index" type="redirectAction">index</result> • </action> • </package> Este plug-in no permite modificar su configuración. El plug-in JSF se instala copiando el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, y la distribución de la especificación JSF elegida.
PLUG-IN CURSO STRUTS 2 LISTA PLUG-INS INTEGRADOS EN STRUTS 2 Junit plug-in JUnit es una librería open source Java que facilita el desarrollo de pruebas unitarias. El plug-in JUnit permite integrar el framework de pruebas unitarias JUnit. Uso Configuración Instalación El plug-in dispone una clase base StrutsTestCase que pueden heredar las clases de realicen test a los componentes Struts 2. Además esta clase permite soporte para la integración de la factoría de objetos del framework Spring. public class TestAction extends StrutsTestCase { // código testing } Este plug-in no permite modificar su configuración. Normalmente este plug-in solo se instala en entornos en desarrollo para realizar pruebas, para ello sólo hay que copiar el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, y definir en el classpath de las clases de test el propio JAR de la librería JUnit.
PLUG-IN CURSO STRUTS 2 LISTA PLUG-INS INTEGRADOS EN STRUTS 2 Plexus plug-in Plexus es un framework Java que permite inyección de dependencias (DI) y diversas características en las aplicaciones que lo utilicen. El plug-in Plexus integra el framework Plexus para la inyección de los Actions, Interceptors y Results en una aplicación con Struts 2. Este plug-in dispone de una implementación ObjectFactory el cual crear las clases Actions, Interceptors y Results como objetos Plexus. Uso Configuración Instalación Para utilizar la inyección de objetos del framework Plexus, para Actions, Interceptors y Results, es necesario definir en el atributo class de la configuración de los Actions el identificador del objeto Plexus: <action name="myAction" class="myPlexusId"> <result>myAction.jsp</result> </action> El plug-in Plexus requiere configurar la factoría de creación de objetos de Struts 2 (struts.properties): struts.objectFactory=plexus El plug-in Plexus se instala copiando el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, y el propio JAR del framework Plexus.
PLUG-IN CURSO STRUTS 2 LISTA PLUG-INS INTEGRADOS EN STRUTS 2 Portlet plug-in Los portlets son componentes modulares de interfaz de usuario, gestionadas y visualizadas en un portal web. Los portlets producen fragmentos de código de marcado que se agregan en una página de un portal El plug-in Portlet se utiliza para desarrollar JSR168 portles usando Struts 2. Uso Configuración Instalación • Para utilizar el plug-in Portlet sobre una aplicación Struts 2 es necesario realizar distintos cambio:, es necesario utilizar la clase portlet. • 1. Modificar el archivo de configuración Portlet, portlet.xml, definiendo la siguiente clase portlet org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher: • <portlet-app • version="1.0" • xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" • xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" • xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd • http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" • id="..."> • <portlet id="..."> • .. • <portlet-class> • org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher • </portlet-class> • ... • </portlet> • </portlet-app> • 2. Los packages de la configuración de los Actions deben extender del package del plug-in, struts-porlet-default, para poder utilizar la tecnología Porlet: • <struts> • <package name="..." extends="struts-portlet-default" namespace="/edit"> • <action name="index" class="ejercicio.capitulo4.TestPortletAction"> • <result type="redirectAction"> • <param name="actionName">index</param> • <param name="portletMode">view</param> • </result> • <result name="input">/jsp/edit/index.jsp</result> • </action> • </package> • </struts> • 3. Aquellos Actions que se utilicen para gestionar las peticiones recibidas de un portlet Actions debe ser heredar de la clase DefaultActionSupport: • package ejercico.capitulo4; • import org.apache.struts2.dispatcher.DefaultActionSupport; • public class TestPortletAction extends DefaultActionSupport { • .... • public String execute() throws Exception { • return SUCCESS; • } • } • 4. Las URL de los formularios y links del interfaz no deben tener la extension.action al definir a que Action apuntan: • <%@ taglib prefix="s" uri="/struts-tags" %> • ... • <s:form action="index"> • ... • </s:form> • ... • <s:url action="index" id="indexURL"/> • <a href="<s:property value="%{indexURL}"/>">Edit</a> • ... Este plug-in no permite modificar su configuración. El plug-in Portlet se instala copiando el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, y la distribución de la especificación Portlet seleccionada
PLUG-IN CURSO STRUTS 2 • LISTA PLUG-INS INTEGRADOS EN STRUTS 2 • Rest plug-in • El plug-in REST simplifica los recursos REST-style para que puedan utilizar clientes tanto humanos, como máquinas. La meta es conseguir que las URL sigan el estilo Ruby on Rails REST y activar el desarrollo de recursos XML-free. • • Las características del plug-in REST son: • • Implementación completa del estilo de URL de Ruby on Rails REST. • • Soporte desarrollo XML-free, sin necesidad de Anotaciones. • • Servicio de serialización y deserialización para datos XML y JSON. • • Gestión de errores automáticos. • • Configuración de tipos seguros en la respuesta HTTP. • • Soporte automático de peticiones HTTP GET condiciones. • Uso • Configuración • Instalación Es recomendable, aunque opcional, utilizar el sufijo “Controller” para el nombre de los Actions REST para distinguirlos de los Actions de Struts 2. ContentTypeHandler Se puede definir un ContentTypeHandler personalizado en la configuración del framework Struts 2, struts.xml, para poder gestionar aquellas extensiones que no están disponibles por los plug-in REST. <bean name="myYaml" type="org.apache.struts2.rest.handler.ContentTypeHandler" class="com.mycompany.MyYamlContentHandler" /> También se pueden sobrescribir el comportamiento de los gestores de extensiones por defecto del framework REST. Por ejemplo, en la siguiente definición de bean en la configuración de Struts 2, define una nueva clase que se encarga de gestionar el comportamiento de las extensiones XML. <bean name="myXml" type="org.apache.struts2.rest.handler.ContentTypeHandler" class="com.mycompany.MyXmlContentHandler" /> Por último, hay que configurar el plug-in REST para indicarle que gestor gestiona las peticiones para cada determinada petición: struts.rest.handlerOverride.xml=myXml struts.rest.handlerOverride.yaml= myYaml struts.xml En la configuración de los Actions de Struts 2 es necesario definir que la clase que gestión el Action Mapper es REST: <constant name="struts.mapper.class" value="rest" /> Además de este parámetro, como el plug-in REST depende del plug-in Convention es necesario configurarlo: <constant name="struts.convention.action.suffix" value="Controller"/> <constant name="struts.convention.action.mapAllMatches" value="true"/> <constant name="struts.convention.default.parent.package" value="rest-default"/> Los siguientes parámetros de la configuración del plug-in se pueden definir Para realizar la instalación del plug-in REST, sólo es necesario copiar su JAR en el directorio WEB.INF/lib de la aplicación y el plug-in Convention, del que depende para su correcto funcionamiento.
PLUG-IN CURSO STRUTS 2 • LISTA PLUG-INS INTEGRADOS EN STRUTS 2 • Sitegraph plug-in • El plug-in SiteGraph genera diagramas gráficos, representando el flujo de la aplicación Web. El plug-in SiteGraph trabajar transformando archivos de configuración, clases Action y archive Vista (JSP; Velocity, FreeMarker), para mostrar un mapa visual. • El plug-in SiteGraph genera una vista gráfica de la aplicación, pero se deben respetar un formato para que funcione correctamente. Los requisitos son: • • El tag JSP debe utilizar el namespace “s”, es decir tags con el siguiente formato <s:xxx/>. • • Al utilizar los tags form y action, deben apuntar directamente el nombre del Action, sin definir la extensión; es decir <s:form action=”foo”/> esta OK, pero <s:form action=”foo.action”/> es incorrecto. • Uso • Configuración • Instalación Para utilizar el framework SiteGraph sobre una aplicación Web con Struts 2 hay que ejecutar el siguiente comando: java -cp ... -jar struts2-sitegraph-plugin-x.x.x.jar -config CONFIG_DIR -views VIEWS_DIRS -output OUTPUT [-ns NAMESPACE] A continuación se muestra ejemplo de gráfico generado por el framework SiteGraph: Este plug-in no permite modificar su configuración. El plug-in SiteGraph se instala copiando el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, y el package GraphViz para que funcione correctamente.
PLUG-IN CURSO STRUTS 2 LISTA PLUG-INS INTEGRADOS EN STRUTS 2 Sitemesh plug-in SiteMesh es un framework de decoración y diseño de interfaces Web, que facilita la creación de aplicaciones Web que necesiten utilizar un diseño, navegación y apariencia constantes. El plug-in SiteMesh permite utilizar plantillas SiteMesh para acceder a recursos del framework. El framework SiteMesh, almacena todos los valores del Value Stack como atributos de la petición, esto significa que si se desea mostrar datos del Stack, se puede utilizar las taglibs de Struts 2. Uso Configuración Instalación Para utilizar el plug-in SiteMesh es necesario modificar la configuración de los Servlet Listener del archivo web.xml, añadiendo dos nuevos Servlet Listeners para permitir que el framework SiteMesh gestione las peticiones. La configuración del archivo web.xml debe quedar de la siguiente forma, es necesario respectar el orden <filter> <filter-name>struts-cleanup</filter-name> <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class> </filter> <filter> <filter-name>sitemesh</filter-name> <filter-class>org.apache.struts2.sitemesh.FreeMarkerPageFilter</filter-class> </filter> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts-cleanup</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> Este plug-in no permite modificar su configuración. El plug-in SiteMesh se instala copiando el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, y el propio JAR del framework SiteMesh.
PLUG-IN CURSO STRUTS 2 • LISTA PLUG-INS INTEGRADOS EN STRUTS 2 • Spring plug-in • Spring es framework Web que proporciona un sistema centralizado y automatizado para asignar (wiring) Objetos en la aplicación, utilizando la técnica de Inyección de Dependencias. • El plug-in Spring funciona sobrescribiendo la ObjectFactory de Struts 2 para utilizar el núcleo del framework Spring para inyectar objetos. Cuando un objeto es creado, utiliza el atributo class en la configuración de Struts 2 el cual debe coincidir con el atributo id de la configuración de Spring. Si no se encuentra, entonces se instancia la clase de la forma habitual. • Las características del plug-in Spring son: • • Permitir al framework Spring gestionar la creación de Actions, Interceptors y Results. • • Los objetos creados por Struts 2 son gestionados por el sistema autowired de Spring, después de la creación. • • Dispone dos nuevos Interceptors que auto asigna Actions, si no se utiliza el Spring ObjectFactory. • Uso • Configuración • Instalación Para delegar en el framework Spring la creación de Actions, Interceptors y Results de Struts 2, es necesario modificar los parámetros de configuración en el archivo en el archivo struts.properties: struts.objectFactory = org.apache.struts2.spring.StrutsSpringObjectFactory O en el archivo struts.xml, utilizando el elemento <constant>: <struts> <constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" /> ... </struts> El framework Spring tiene activado por defecto su sistema autowiring (auto-asignación) por nombre, el cual se puede cambiar en la configuración en los siguientes métodos: name, type, auto y constructor. Por defecto, Struts 2utilizará Spring para la creación de todos sus objetos, pero si no puede ser instanciados por el framework Spring, entonces Struts 2 se encargará de la creación de los objetos. Para configurar el framework Spring para que gestione la creación atributos dentro de los Actions, Interceptors y Results, mediante inyección de dependencias, es necesario registrar en el archivo web.xml su Servlet Listener, ContextLoaderListener, así como definir la ubicación de los archivos XML que almacenan la configuración de Spring: <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/spring/applicationContext-*.xml, classpath*:applicationContext-*.xml </param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> Una vez completada la configuración del plug-in Spring en una aplicación Struts 2, el framework Spring será el responsable de la creación de los objetos tanto del propio framework Struts 2, como de los atributos de las clases. Por ejemplo, disponemos la siguiente configuración de Spring en el archivo applicationContext.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans default-autowire="name"> <bean id="actionLogin" class="ejercicio.capitulo4.LoginAction" singleton="false"/> <bean id="logicaLogin" class="ejercicio.capitulo4.logic.LoginServiceImpl" singleton="false"/> ... </beans> Para invocar a los beans definidos para Spring en el archivo struts.xml, sólo es necesario hacer referencia a su id: <struts> <package name="/login" extends="struts-default"> <action name="login" class="actionLogin"> <result>/jsp/Login.jsp</result> </action> </package> </struts> Y dentro de la clase Action, LoginAction, Spring gestionará la creación del atributo logicaLogin automáticamente, dado que hemos definido en la configuración autowire=”name”. public class LoginAction extends ActionSupport { private String username; private String password; //métodos getter y setter private ILoginService logicaLogin; public void setLogicaLogin(ILoginService logicaLogin) { this.logicaLogin = logicaLogin; } public String execute() { if (this.logicaLogin.login(username, password)) { return SUCCESS; } else { return ERROR; } } } El plug-in Spring permite configurar los siguientes parámetros: El plug-in Spring se instala copiando el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, y la propia distribución del framework Spring.
PLUG-IN CURSO STRUTS 2 • LISTA PLUG-INS INTEGRADOS EN STRUTS 2 • Struts1 plug-in • El plug-in Struts 1 permite utilizar Actions y ActionForms de Struts 1 en aplicaciones Web con el framework Struts 2, pudiendo utilizar la validación de los ActionForms de Struts 1. • Este plug-in provee una clase Action genérica de Struts 2 que encapsula un Action Struts 1, org.apache.struts2.s1.Struts1Action. La clase encapsulada dispone mecanismos de llamadas para a los métodos clásicos de los Actions y ActionForms de Struts 1. • El plug-in también tiene nuevos Interceptors para simular la lógica de Struts 1: • • “scopeModelDriven”, es la clase org.apache.struts2.s1.ActionFormValidatorInterceptor, la cual integra la validación de los ActionForms en el flujo de trabajo de Struts 2. • • “actionForm-validation”, referencia a la clase org.apache.struts2.s1.ActionFormResetInterceptor, que invoca al método reset() de los ActionsForms. • Uso • Configuración • Instalación Para utilizar un Action y ActionForm de Struts 1 en una aplicación Struts 2, hay que crear una configuración normal de un package de Struts 2, pero debe extender del package struts1-default, el cual contiene nuevos Interceptors para trabajar con Actions de Struts 1. El atributo class de la configuración del Action debe apuntar al wrapper del plug-in Struts 1 a Struts 2, Struts1Action: <package name="capitulo4" extends="struts1-default"> <action name="actionStruts1" class="org.apache.struts2.s1.Struts1Action"> <param name="className">ejercicio.capitulo4.struts1.MiAction</param> <result>myAction.jsp</result> </action> </package> En aquellos casos en los que Action de Struts 1 requiere de la creación de un ActionForm para obtener los valores de la petición, es necesario configurar los Interceptors scopedModelDriven, actionForm-validation y struts1Stack, para inyectar el ActionForm en el Action. <package name="capitulo4" extends="struts1-default"> <action name="myFormAction" class="org.apache.struts2.s1.Struts1Action"> <param name="className">ejercicio.capitulo4.struts1.MiAction</param> <interceptor-ref name="scopedModelDriven"> <param name="className">ejercicio.capitulo4.struts1.MiActionForm</param> <param name="name">datosForm</param> <param name="scope">session</param> </interceptor-ref> <interceptor-ref name="actionForm-validation"> <param name="pathnames"> /org/apache/struts/validator/validator-rules.xml, /WEB-INF/validation.xml</param> </interceptor-ref> <interceptor-ref name="struts1Stack"/> <result>myAction.jsp</result> </action> </package> Este plug-in no permite modificar su configuración. El plug-in Struts 1 se instala copiando el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, y el propio JAR del framework Struts 1.
PLUG-IN CURSO STRUTS 2 • LISTA PLUG-INS INTEGRADOS EN STRUTS 2 • Testng plug-in • TestNG es una librería open source Java que facilita el desarrollo de pruebas unitarias sobre clases Java. • El plug-in TestNG permite integración con el framework de pruebas unitarias TestNG. Las características del plug-in son: • • Clase base test que inicia una instancia completa de Struts 2. • • Permite testear como se carga la configuración y los componentes utilizados. • Uso • Configuración • Instalación Este plug-in dispone de una clase base StrutsTestCase que permite extender las clases de test para trabajar con componentes Struts 2. public class TestNGAction extends StrutsTestCase { // testing code } Este plug-in no permite modificar su configuración. Normalmente este plug-in solo se instala en entornos en desarrollo para realizar pruebas, para ello sólo hay que copiar el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, y definir en el classpath de la clases de Test el propio JAR de la librería TestNG.
PLUG-IN CURSO STRUTS 2 LISTA PLUG-INS INTEGRADOS EN STRUTS 2 Tiles plug-in Tiles es un framework que facilita la creación de interfaces Web con un aspecto similar, actuando como un decorador para lo cual utiliza un diseño de plantillas. El plug-in Tiles permite integración con el framework Tiles para permitir a los Actions utilizar páginas Tiles, las cuales pueden utilizar tecnología JSP, FreeMarker o Velocity. Uso Configuración Instalación • Para poder utilizar el plug-in Tiles es necesario realizar los siguientes cambios en la configuración de la aplicación: • • Registrar el Servlet Listener de Tiles en el archivo web.xml, puede ser cualquier el listener estándar de Tiles org.apache.tiles.listener.TilesListener, o la versión de Struts 2 org.apache.struts2.tiles.TilesListener. Y también el dato de ubicación de los archivos de configuración Tiles, • <context-param> • <param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name> • <param-value> • /tiles/myTiles1.xml, • /tiles/myTiles2.xml, • /tiles/myTiles3.xml • </param-value> • </context-param> • <listener> • <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class> • </listener> • • Todos los packages de la configuración de los Actions que utilicen el soporte de Tiles deben extender del package tiles-default o se debe registrar el Result de Tiles, TilesResult. • //registro del nuevo tipo Result “tiles” • <result-types> • <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/> • </result-types> • //o bien, los packages de los Actions deben extender de “tiles-default” • <package name="..." extends="tiles-default"> • ... • </package> • • Configurar los Actions para utilizar el nuevo Result tiles: • <package name="..." extends="tiles-default"> • <action name="testTiles" class="ejercicio.capitulo4.TestTilesAction" > • <result name="success" type="tiles">idTiles</result> • </action> • </package> • El plug-in Tiles hereda la configuración del framework Tiles: • • org.apache.tiles.factory.TilesContainerFactory • • org.apache.tiles.factory.TilesContainerFactory.MUTABLE • • org.apache.tiles.context.TilesContextFactory • • org.apache.tiles.definition.DefinitionsFactory • • org.apache.tiles.preparer.PreparerFactory • • org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG • • org.apache.tiles.context.ChainedTilesContextFactory.FACTORY_CLASS_NAMES • • org.apache.tiles.definition.digester.DigesterDefinitionsReader.PARSER_VALIDATE • • org.apache.tiles.definition.DefinitionsReader • • org.apache.tiles.locale.LocaleResolver • • org.apache.tiles.impl.KeyedDefinitionsFactoryTilesContainer.KeyExtractor • • org.apache.tiles.factory.KeyedDefinitionsFactoryTilesContainerFactory.KEYS • • org.apache.tiles.DEFINITIONS_CONFIG@${key} El plug-in Tiles se instala copiando el JAR del plug-in en el directorio /WEB-INF/lib de la aplicación, y el propio JAR del framework Tiles.
PLUG-IN CURSO STRUTS 2 LISTA PLUG-INS DE TERCEROS Además de los propios plug-ins incluidos en la distribución en el framework, la comunidad de Struts 2 dispone de un repositorio Web donde compartir los plug-ins open source que construyan, para que el resto de la comunidad de desarrolladores de Struts 2 puedan utilizarlos. Algunos de los plug-ins disponibles en el repositorio son: La ruta del repositorio de plug-ins Struts 2 es http://cwiki.apache.org/S2PLUGINS/home.html. • • Advanced Fileupload Plug-In, .permite utilizar parámetros de configuración avanzada de la librería Commons FielUpload utilizada por el framework Struts 2 para permitir subir archivos. • • Another JSON Result Type (struts2jsonresult), Result que permite trabajar con datos JSON. • • Connext Graph Plug-In, permite utilizar el framework Open Flash Chart para mostrar gráficos en la aplicación. • • DataVision Plug-In, permite soporte para el framework package open source de reporting Data DataVision. • • EJB3 JBoss Plug-In, permite que beans de sesión EJB3 se puedan inyectar en los Actions de Struts 2 bajo un servidor JBoss. • • EJB3 Plug-In, permite que beans de sesión EJB3 se puedan inyectar en los Actions de Struts 2. • • Embedded JSP Plug-In, permite utilizar JSP que se encuentre en el classpath desde archivos JAR. • • ExtraTags Plug-In, añade un nuevo conjunto de tags adicionales al grupo de Tags UI. • • Full Hibernate Plug-In, dispone integración con el framework Hibernate Validator, Hibernate Core Sessions y Transactions, permitiendo la gestión de la configuración en la aplicación Web. • • Grails Plug-In, permite que aplicaciones Grails se ejecuten en Struts 2. • • Groovy Plug-In, soporte para desarrollar los Actions e Interceptors utilizando el lenguaje Groovy. • • Guice Plug-In, integra el framework Guice para la gestión de inyecciones de los Actions, Interceptors y Results. • • GWT Plug-In, integración con el framework Google Web Toolkit (GWT) para poder utilizarse en los Actions. • • HDIV Plug-In, integración del framework HDIV (HTTP Data Integrity Validator) con Struts 2 añadiendo funcionalidades de seguridad. • • Hibernate Session Plug-In, facilita el uso del patrón de diseño "open session in view" desde una aplicación Web con Hibernate. • • Image Plug-In, distintos plug-ins que permiten trabajar con imágenes (thumbnails, almacenamiento remoto, validator). • • JFW Plug-In, ofrece nuevas características a Struts 2, como pool de conexiones y gestión logging. • • jQuery Plug-In, integración del framework JavaScript jQuery para utilizar tecnología AJAX y Widgets. • • JRuby Plug-In, permite soporte a los Actions para que sean desarrollados utilizando el lenguaje JRuby. • • JSCalendar Plug-In, nueva tag para mostrar un calendario. • • JSON Plug-In, añade un nuevo Result “json” para serializar los datos de los Actions a formato JSON. • • LightBoxJS Plug-In, facilita el uso del script LightBox. • • OSGi Plug-In, soporte para iniciar instancias del framework Apache Felix dentro de la aplicación Web, y rastree los paquetes instalados en la configuración de Struts 2. • • OVal Plug-In, integración con el framework Oval, implementa validaciones a cualquier clase de objeto Java. • • Rome RSS-Atom Plug-In, facilita que los resultados se muestren siguiendo el formato Rome SyndFeed (RSS). • • Scope Plug-In, implementa del framework JBoss Seam la gestión del ámbito biyection y gestión de conversaciones. • • Spring MVC Plug-In, permite que Controladores e Interceptors del framework Spring MVC se ejecuten en Struts 2. • • Spring Webflow Plug-In, integración de Spring Webflow (SWF) con Struts 2. • • Struts 1 Plug-In, permite utilizar Actions y ActionForms desarrollados para Struts 1 sean utilizados en una aplicación con el framework Struts 2. • • Table Tags Plug-In, nuevos tags para mostrar tablas de datos. • • Unified EL Plug-In, permite utilizar Unified EL como el lenguaje de expresiones en Struts 2. • • WebWork2 Plug-In, permite utilizar Actions y Configuración desarrollados para WebWork2 sean utilizados en una aplicación con Struts 2. • • YUI Plug-In, integración con el framework JavaScript Yahoo! User Interface Library (YUI), pudiendo utilizar sus tags.
PLUG-IN CURSO STRUTS 2 • CONSTRUIR UN PLUG-IN PERSONALIZADO • Apache Struts 2 dispone una sencilla arquitectura de plug-ins, para permitir que los desarrolladores mejoren la funcionalidad del framework con simplemente copiar el JAR del plug-in en el classpath de la aplicación. • El hecho de que los plug-ins se empaqueten en archivos JAR, facilita la distribución y compartido con otros. • Contenido de un plug-in • En un archivo JAR plug-in de Struts 2 debe contener al menos: • Archivo Configuración struts-plugin.xml • A parte del archivo de configuración, opcionalmente se definene: • Clases Java que gestionen el contenido del plug-in • Plantillas FreeMarker • Recursos estáticos • Configuración • En el archivo struts-plugin.xml se pueden definir: • Nuevos packages con la configuración de Results, Interceptors y/o Actions • Sobrescribir los valores de las constantes de la aplicación • Introducir nuevos puntos de extensión para que las implementen las clases de la aplicación (Actions, Validators, Convertidor de Tipos, Interceptors,…). Recursos estáticos En un plug-in también se pueden añadir recursos estáticos (CSS, JavaScript,…), estos se deben crear bajo el directorio /static dentro del JAR. Para invocarlos desde la vista se debe utilizar el path “/static” para referenciarlo. Ejemplo El siguiente fragmento de código JSP se referencia al CSS, main.css, incluso dentro de un plug-in. <@s:url value="/static/main.css" var="css" /> <link rel="stylesheet" type="text/css" href="%{#css}" />
PLUG-IN CURSO STRUTS 2 CONSTRUIR UN PLUG-IN PERSONALIZADO Ejemplo Plug-In Personalizado: CaptchaPlugin Los pasos a seguir para la construcción del CaptchaPlugin son: 2. Creamos la estructura de directorios para a continuación crear el JAR, mediante el comando: jar -cvf captchaplugin.jar * 3. Copiamos el archivo captchaplugin.jar en el directorio /WEB-INF/lib de la aplicación. Para poder trabajar con la nueva funcionalidad que ofrece el captchaplugin, definiremos un Action donde se utiliza el nuevo Result definido en el plug-in: <package name="capitulo4" extends="captcha-default"> <action name="inicio"> <result>/jsp/Login.jsp</result> </action> <action name="login" class="ejercicio.capitulo4.Login"> <result name="success">/jsp/Menu.jsp</result> <result name="input">/jsp/Login.jsp</result> <param name="cookieName">captcha_cookie</param> </action> <action name="CaptchaImage"> <result type="captcha"> <param name="cookieName">captcha_cookie</param> <param name="wordLength">6</param> </result> </action> </package> Como el package extiende del package captcha-default se importa la configuración del nuevo Result “captcha”, pudiendo utilizarse para el Action CaptchaImage. El JSP, login.jsp, hace uso del Action, CaptchaImage, para mostrar una imagen captcha en el formulario de login de la aplicación: <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Login con CAPTCHA</title> </head> <body> <h3>LOGIN</h3> <s:actionerror/> <s:form action="Login"> <s:textfield name="usuario" label="Usuario"/> <s:password name="password" label="Password"/> <tr> <td> <img src="CaptchaImage.action"/> </td> <td> <s:textfield theme="simple" name="captcha" value=""/> </td> </tr> <s:submit value="Login"/> </s:form> </body> </html> 1. Crear el archivo struts-plugin.xml, donde se define la configuración del plug-in: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="captcha-default" extends="struts-default"> <result-types> <result-type name="captcha" class="ejercicio.capitulo4.CaptchaResult" /> </result-types> </package> </struts>
PLUG-IN CURSO STRUTS 2 RECUERDA QUE… A lo largo del presente apartado hemos visto la integración de componentes en Struts 2 mediante plug-ins: • ¿Qué es un Plug-in? • Un complemento (o plug-in en inglés) es una aplicación que se relaciona con otra para aportarle una función nueva y generalmente muy especifica. Esta aplicación adicional es ejecutada por la aplicación principal e interactúan por medio de la API. • El framework Struts 2 ha sido diseño para ampliar su funcionalidad mediante plug-ins. • Contenido • Un plug-in de Struts 2, esencialmente es una librería JAR que puede contener: • Actions, Interceptors, Conversores de Tipos, Validators o Results • Taglibs, plantillas FreeMarker o plantillas Velocity • Recursos estáticos HTML, imágenes, CSS, JavaScript,... • Configuración • Es obligatorio que exista el archivo struts-plugin.xml en el directorio raíz del JAR del plug-in. Este archivo sigue el mismo esquema (DTD) que el archivo struts.xml, permitiendo definir preferencias propias de la configuración. • Instalación • Sólo es necesario copiar la librería JAR del plug-in en el directorio /WEB-INF/lib de la aplicación. • Construir plug-ins personalizados • Apache Struts 2 dispone una sencilla arquitectura de plug-ins para ampliar la funcionalidad de Struts 2. • Desararrollar un plug-in de Struts 2 es sencillamente empaquetar en un JAR todas las clases y recursos que aportan funcionalidad a la aplicación. • Contenido • En un archivo JAR plug-in de Struts 2 puede contener: • struts-plugin.xml (obligatorio), donde se pueden definir elementos exactamente igual que en el archivo struts.xml • Clases Java que implementes componentes de Struts 2: Actions, Interceptors, Results, Conversor de Tipos, ... • Taglibs, plantillas FreeMarker o plantillas Velocity • Recursos estáticos HTML, imágenes, CSS, JavaScript,... Definición Listado Desarrollo • Listado de plug-ins integrados en Struts 2 • Los plug-ins integrados en Struts 2 son: • Codebehindplug-in • Config-browser plug-in • Conventionplug-in • Dojoplug-in • DWRplug-in • Jasperreportsplug-in • Javatemplatesplug-in • Jfreechartplug-in • JSF plug-in • Junitplug-in • Plexusplug-in • Portlet plug-in • Restplug-in • Sitegraphplug-in • Sitemeshplug-in • Spring plug-in • Struts1 plug-in • Testngplug-in • Tiles plug-in