27
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-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

Embed Size (px)

Citation preview

Page 1: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO 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

Page 2: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO 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-inUn 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ónPara utilizar un plug-in es tan sencillo como copiar la librería JAR del plug-in en el directorio /WEB-INF/lib.

PLUG-INUn 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.

Page 3: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO 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.xmlEl 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ónStruts 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).

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

Page 4: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO 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

Page 5: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

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:

PLUG-INCURSO 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

ParámetroTipo Dato Valor

DefectoDescripción

struts.codebehind.defaultPackage ruta paquete codebehind-default

El paquete por defecto para crear Action mappings

struts.configuration.classpath.disableActionScanning Boolean false Indica si rastrea el classpath buscando Actions

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

Page 6: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

Config-browser plug-inEl 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.

Page 7: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

Convention plug-inEl 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

Page 8: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

Dojo plug-inEl 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.

Page 9: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

DWR plug-inDWR 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.

Page 10: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

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>

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

Jasperreports plug-inJasperReports 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

Parámetro Tipo Dato Valor Defecto Descripción

location String La ubicación del reporte jasper compilado

dataSource* String Expresión EL para obtener los datos del ValueStack

parse Boolean true Indica si se debe analizar el parámetro location

format String PDF El formato de generación del reporte. Los valores válidos son PDF, CSV, RTF, XLS, XML y HTML

contentDisposition String inline Asigna el Content-Disposition a la cabecera HTTP de la respuesta.

documentName String Nombre del documento para generar la cabecera HTTP.

delimiter String , Carácter delimitador cuando se utilizan los reportes CSV.

imageServletUrl String Valor de la URL que puede devolver reportes de imágenes

reportParameters String Expresión OGNL utilizada para obtener un Map de parámetros del reporte del ValueStack.

exportParameters String Expresión OGNL utilizada para obtener un de parámetros JR exporter del ValueStack.

connection* String Conexión JDBC para obtener los datos del reporte en lugar del parámetro dataSource.

Page 11: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

Javatemplates plug-inEl 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.

Page 12: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

Jfreechart plug-inJFreeChart 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áficoreturn super.SUCCESS;

}

public JFreeChart getChart() {return chart;

}}

Page 13: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

JSF plug-inJavaServer 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>

Page 14: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

Junit plug-inJUnit 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.

Page 15: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

Plexus plug-inPlexus 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.

Page 16: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

Portlet plug-inLos 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 portalEl 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-appversion="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>

...

Page 17: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

Rest plug-inEl 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.ContentTypeHandlerSe 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=myXmlstruts.rest.handlerOverride.yaml= myYaml

struts.xmlEn 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"/>

Page 18: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

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:

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

Sitegraph plug-inEl 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

Page 19: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

Sitemesh plug-inSiteMesh 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>

Page 20: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

Spring plug-inSpring 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.StrutsSpringObjectFactoryO 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;}

}}

Page 21: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

Struts1 plug-inEl 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>

Page 22: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

Testng plug-inTestNG 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.

Page 23: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

LISTA PLUG-INS INTEGRADOS EN STRUTS 2

Tiles plug-inTiles 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>

Page 24: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO 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.

Page 25: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO 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-inEn 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ónEn 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áticosEn 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.

EjemploEl 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}" />

Page 26: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

CONSTRUIR UN PLUG-IN PERSONALIZADO

Ejemplo Plug-In Personalizado: CaptchaPluginLos pasos a seguir para la construcción del CaptchaPlugin son:

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>

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>

Page 27: PLUG-INCURSO STRUTS 2 En el siguiente apartado se mostrará como integrar componentes (plug-in) en Struts 2, mostrando información sobre los plug-in integrados

PLUG-INCURSO STRUTS 2

RECUERDA QUE…

A lo largo del presente apartado hemos visto la integración de componentes en Struts 2 mediante plug-ins:

Definición DesarrolloListado