Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Struts Tiles
Struts Tiles
Tiles
Tiles en Struts
Este articulo es una traducción del original de Prakash Malani publicado en javaworld.com. La
traducción esta realizada por Pedro del Gallego Vida.
Introducción
Para explorar las soluciones mas poderosas y flexibles, investigaremos la integracion entre Tiles y
Struts.Struts es un framework open source para desarrolar aplicaciones web usando el famoso
modelo MVC (modelo-vista-controlador), el modelo 2 de los patrones de arquitectura. Struts viene
con un conjunto amplio de etiquetas reutilizables, el cual es perfeccionado por la libreria de
etiquetas de Tiles.
Criterio de evaluación.
Evaluaremos cada una de las soluciones basándonos en los siguientes criterios, los criterios no son
mutuamnete excluyentes.Para una situación específica y una aplicación en particula deberemos
elegier enter los pros y los contras de cada soución con respecto a estos factores.
Número de páginas.
La solución debe esforzarse por reducir el numero de páginas the HTML y JSP.El numero de
páginas incrementa la complejidad de desarrollo, de administración y mantenimiento de la
aplicación de una manera drástica.
Repetición de código.
Casi siempre repetir es malo. Cuanto mas código repetido mas díficil es la tarea de desarrollar y
mantener la aplicación.Un siple cambio puede desencadenar una serie de cambios en cascada en
muchas páginas diferentes con consecuencias imprevisibles.Una manera prática de lograr
reusabilidad es eliminando código repetido.
1
http://www.javahispano.com
Acoplamiento
Complejidad
Soluciones
Evaluaremos varias soluciones usando ejemplos basicos de JSP con componentes de vista comunes,
como cabecera y piede pagina.Presentaremos estas soluciones segun el orden de complejidad, y
despues las analizaremos segun cada uno de las criterios de de evaluación
Solución 1
<html>
<body>
Header
<p>
a's body...
<p>
Footer
<p>
</body>
</html>
y el siguiente b.jsp
<html>
<body>
Header
2
Struts. Tiles
<p>
b's body...
<p>
Footer
<p>
</body>
</html>
Solución 2
<html>
<body>
a's body...
<p>
</body>
</html>
<html>
<body>
b's body...
<p>
</body>
</html>
Note como componentes comunes, como la cabecera y el pie de página, son divididos usando el
mecanismo JSP include
3
http://www.javahispano.com
Header
<p>
Header
<p>
Solución 3.
considere a.jsp:
<html>
<body>
a's body...
<p>
</body>
</html>
y b.jsp:
<html>
<body>
b's body...
<p>
4
Struts. Tiles
</body>
</html>
La solución 3 usa el mecanismo insert de Tiles, usando esto incluinos el componente de vista en el
sitio correspondiente.En todo los aspectos esta solución es identica a la solución 2, con sus ventajas
y sus desventajas.
<html>
<body>
</body>
</html>
<html>
<body>
</body>
</html>
Esta solución separa el nucleo del cuerpo en su página individual aBody.jsp y bBody.jsp
a's body...
<p>
5
http://www.javahispano.com
b's body...
<p>
Esto limita el cambio del cuerpo a su página y ademas permite reutilizarlo en otras
partes.Eliminando la repetición y la duplicidad.Como las otras soluciones, cada pagina crea todavía
su propio layout. Por tanto aqui tampco tiene una política sobre los layout o esquemas.
Solución 5 Plantillas
Usando la característica de crear plantillas podemos definir los Layouts como plantillas.Dede estos
layouts, podemos insertar marcadores de lugar en vez del actual componente de vista usando la
etiqueta de Tiles insert.Así para todos los componentes esta página define un layout reutilizable.
<html>
<body>
</body>
</html>
Otras paginas de contenido, como a.jsp y b.jsp ussaran el layout anterior para situar los
componentes de vistas.En las paginas actuales insertamos los componentes usando la etiqueta Tiles
insert, Usuando la etiquea Tiles put, podemos especificarel componente de vista actual para todos
los marcadores de lugar.
Considere a.jsp:
Considere b.jsp:
6
Struts. Tiles
La mayor ventaja de esta solución es que encapsula el comportamiento del layout, reduce
drasticamente el acoplamiento del entre los componentes. Sin embarfo incrementa la complejidad
introduciendo otra página para el layout.Entender y implementar el mecanismo de de las plantillas
tambíen puede ser díficil al principio.
La página de layout anterior layout.jsp contiene código HTML y JSP para organizar los
componentes.La páginas a.jsp y b.jsp no contiene código HTML ninguno; estas solo contienen
etiquetas Tiles para insertar los componentes necesarios.No seria agradable especificar todos las
páginas de contenido en un solo archivo XML de configuración?
<component-definitions>
</component-definitions>
La solución 6 elimina todas las páginas de contenido a.jsp, b.jasp... poniendo sus definiciones en un
archivo XML. Pero si no existe un recurso llamado a.jsp, como podemos solicitarlo? Y mas
importante como podemos acceder al archivo XML tileDefinitions.xml.La integracion entre Strust y
Tiles lo permite. Ademas la configuración uniforme de parametros de Struts, nos permitira
especificar el archivo de configuración como otro parametro en el web.XML, como mostramos
abajo. Especificando el parametro definition-config posibilita a Struts encontrar y conocer acerca de
la definición Tiles.
<!--
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
-->
7
http://www.javahispano.com
<servlet-class>
org.apache.struts.tiles.ActionComponentServlet
</servlet-class>
<init-param>
<param-name>definitions-config</param-name>
<param-value>
/WEB-INF/tileDefinitions.xml
</param-value>
</init-param>
...
<!-- Mapeado Estandard del Action Servlet -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
...
</servlet>
ahora definimos una acción Struts, la cual devuelve una definición especifica del archivo de
configuración con el valor éxito
package com.malani.struts.action;
import org.apache.struts.action.*;
import javax.servlet.http.*;
No podemos invocar un definición directamente desde el navegador, pero puedes invocar una desde
Struts, como si esta fuese un recurso actual.Definimos las acciones struts en el archivo struts-
config.xmlcomo vemos abajo.
Ahora invocamos la acción Struts solicitando a.do y b.do respectivamente para devolvernos el
recurso deseado.
8
Struts. Tiles
En el aarchivo de configuración que todas las definiciones de las páginas son parecidas. Estas
definen tres componentes , cabecera cueropo y pie de página, de las cuales dos de ellas (la cabecera
y el pie de página) son siempre iguales. Una poderosa caracteristica de Tiles es la herencia entre
definiciones. Por tantopodemos crear una definición base y dejoar que las demas hereden de esta.La
definición base solo debe suministrar la características. La definición hija solo debe definir sus
componentes unicos.Enseñaremos el siguiente codigo para observar como se usa la herencia en el
archivo de configuración XML.
<component-definitions>
</component-definitions>
Resumen de soluciones
La siguiente tabla resume las distintas soluciones y sus caracteristicas respecto a cada uno de los
criterios de evaluación, existen mas criterios como la extensibilidad, la mantenibilidad o el
rendimiento.
2: include ** ** * ** *
3: insert ** ** * ** *
4: separar *** ** ** ** **
9
http://www.javahispano.com
Observamos que el grado de complejidad va creciendo segun avanzamos en las soluciones, al igual
que el control del layout, sin embargo tanto la repeticioón de código como el acoplamiento
desciende.
La mejor solución depende de las necesidades del proyecto y sus reqerimientos y de tus habilidades
y conocimientos en el desarrollo y mantenimiento de aplicaciones web. La solución basica es
demasiado simple.No es recomendable porque va en contra de los principios de las buenas practicas
de la ingeniería del software, Si ya estamos usando Struts entonces podremos aprvecharnos de la
infuencia del la integración de Tiles y Struts, para crear una poderosa solución.
Resumen
En este articulo, hemos examinado varias soluciones para organizar componentes de vista en
HTML y JSP. Hemos explorado la unión entre Tiles y Struts. Estas estrategias y soluciones pueden
ayudarnos a hacer un tomar decisiones arquitectonicas con respecto a nuestras aplicaciones Web.
Pedro del Gallego Vida, Akuma, estudiante de Ingeniería Superior en Informática en Madrid, centra su interés
profesional en la POO, la programación declarativa/lógica, la inteligencia articfial y la teoría del conocimiento.
Actualmente se deja el tiempo intentando desarrollar un framework para la simulación de redes neuronales y
memorias Hopfield.
Para cualquier duda o comentario: akipelli_ARROBA_hotmail.com
10