Biblioteca de Etiquetas en Java

10

Click here to load reader

description

Biblioteca de Etiquetas en Java

Transcript of Biblioteca de Etiquetas en Java

Page 1: Biblioteca de Etiquetas en Java

Biblioteca de Etiquetas en JavaAutor: Hugo Flores

[email protected]://hpfloresj.blogspot.com

Fecha: 29-12-2008

Estamos acostumbrados a escribir código Java embebido en los JSP, llamados normalmente

scriptles, pero cuando nuestro proyecto vemos que es de gran escala, el mantenimiento de nuestra

aplicación se ve comprometida por la gran cantidad de líneas, algunas de ellas nos hacen perder la pista

de donde a ocurrido un error, es de indicar que las etiquetas como JavaBeans son limitadas y no tienen

ningún control sobre las páginas JSP, por ejemplo no tienen acceso a los objetos request y response.

Para limpiar un poco nuestro trabajo es donde aparecen las bibliotecas de etiquetas, que son un conjunto

de ficheros que nos proporcionan funcionalidades específicas. Veamos un ejemplo de lo que estamos

hablando:

<%@page import="java.util.*" %><%@page import="java.sql.*" %>

<html> <head> <title>JSP Page</title> </head> <body> <% String url = "jdbc.odbc.countrydb", user = "", pasw = ""; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection( url, user, pasw ); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("select * from countries"); while( rs.next() ){ String result = rs.getString("name"); %> <%= result %> <br> <% } rs.close(); }catch( SQLException sqle ){ sqle.printStackTrace(); } %> </body></html>

Código Nº 1: Sentencias Scriptles

Ahora comparemos el siguiente código:

<%@taglib uri="getCountriesTag" prefix="countryTag" %><html> <countryTag:getCountries /></html>

Código Nº 2: Sentencias Tags

Page 2: Biblioteca de Etiquetas en Java

Existen tres partes importantes para comprender una biblioteca de etiquetas:

Clases manipuladoras de etiquetas

Proporciona funcionalidad de las etiquetas

Descriptor de biblioteca de etiquetas (TLD)

Fichero XML que describe las etiquetas y las hace coincidir con las clases manipuladoras.

La directriz tablib

Directriz situada en la parte superior del JSP que permite utilizar una biblioteca en particular.

Manipuladores de etiquetas

Un manipulador de etiquetas no es más que una clase especial que contiene el código necesario para

ejecutar las etiquetas, en otras palabras la funcionalidad de la etiqueta se encuentra en el manipulador de

etiquetas.

Existe un manipulador de etiquetas para cada etiqueta a medida.

El motor JSP necesita saber que manipulador de etiquetas corresponde a unas etiquetas y que

métodos llamar, todo esto se encuentra en el fichero TLD.

TLD

Es un documento XML que contiene información sobre una o más etiquetas a medida.

Se guarda por lo general con extensión .tld en el directorio WEB-INF.

La directriz Taglib

Para poder utilizar una biblioteca de etiquetas se debe de declarar la etiqueta tablib:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

uri: identifica la biblioteca, ayuda a documentar el origen de uso, el sistema no intenta

acceder a la URL, pero opcionalmente puede apuntar a una ruta a un fichero TLD, el sistema

intenta cargarlo.

El motor JSP busca el uri y luego el descriptor de etiquetas para luego poder utilizarlo.

prefix: se utiliza para identificar una etiqueta en una página JSP como parte de una biblioteca

en particular.

Si tenemos una etiqueta con nombre miEtiqueta y un prefijo miPrefijo, la etiqueta se escribiría:

<miPrefijo:miEtiqueta />

Uso de la Biblioteca de Etiquetas Request

Page 3: Biblioteca de Etiquetas en Java

Esta biblioteca forma parte del proyecto Jakarta, utilizadas para acceder a la información sobre la petición

http.

Para empezar tenemos que descargar la última versión de esta biblioteca, para este ejemplo usaremos jakarta-taglibs-request-1.0.1.tar.gz: El archivo estará en formato compreso, descomprima en un lugar adecuado, y contiene los siguientes archivos:

taglibs-request.tld. Es el descriptor de despliegue de la biblioteca de etiquetas, generalmente

ubicado en /WEB-INF/ y referenciado mediante la etiqueta <taglib> en el descriptor /WEB-

INF/web.xml

taglibs-request.jar. El fichero JAR contiene todas las clases y recursos de asociaciones que

comprenden la biblioteca de etiquetas, este fichero generalmente es copiado al subdirectorio /WEB-

INF/lib

request-doc.war Contiene la documentación de la biblioteca

request-examples.war Contiene ejemplo de aplicación web.

Usando una biblioteca de etiquetas en su aplicación

Realice los siguientes pasos para utilizar uno o más etiquetas personalizadas:

1. copiar taglibs-request.tld al subdirectorio /WEB-INF de su aplicación web.

2. copiar taglibs-request.jar al subdirectorio /WEB-INF/lib de su aplicación web.

3. para cada biblioteca de etiquetas que piense en utilizar agregar <taglib> al descriptor de

despliegue /WEB-INF/web.xml, como ejemplo general:

caso general:<taglib>

<taglib-uri>http://jakarta.apache.org/taglibs/{library}</taglib-uri><taglib-location>/WEB-INF/{library}.tld</taglib-location>

</taglib>

caso específico: es el que usaremos.

<taglib><taglib-uri>http://jakarta.apache.org/taglibs/request-1.0</taglib-uri><taglib-location>/WEB-INF/taglibs-request.tld</taglib-location>

</taglib>

4. En la parte superior de su pagina JSP agregar una directiva <@ taglib> identificando la

URL de la biblioteca.

<%@ taglib uri="http://jakarta.apache.org/taglibs/request-1.0" prefix="req" %>

5. Para utilizar una etiqueta de la biblioteca simplemente incluir el prefijo e incluir el nombre del

atributo, en el ejemplo sea x el prefijo y magic la etiqueta

<x:magic/>

Page 4: Biblioteca de Etiquetas en Java

Si la etiqueta necesita atributos y texto en el cuerpo:

<x:magic id=”beanName” name=”xyz”>Algún texto que necesite…

<x:magic/>

Lo que haremos es lo siguiente:

a. crearemos una carpeta de nombre “etiquetas” en el sud-directorio de %CATALINA_HOME%\

webaspps de nuestro servidor Tomcat.

b. Copiar el fichero request-examples.war al directorio “etiquetas” y ejecutar el comando jar xvf

request-examples.war, con esto tendremos nuestro ejemplo preparado.

Si todo esta bien podremos ver la siguiente figura en nuestro navegador:

Figura 1: Ejemplo de TagLib Request

Esta página index.html contiene un formulario web con un conjunto de campos de entrada ocultos. De

manera que cuando se envíe el formulario es enviado con parámetros de petición, haciendo click en

SUBMIT.

index.html

<!doctype html public "-//w3c//dtd html 4.0 transitional//en"><html><head>

Page 5: Biblioteca de Etiquetas en Java

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head><body bgcolor="#FFFFFF">

<center><h1>Jakarta REQUEST Taglib Example</h1></center><br><p>This page includes a number of hidden input paramters that can thenbe seen when viewing the request.jsp example page.<br><br><form action="request.jsp" method="POST"><input type="hidden" name="test1" value="This is a test"><input type="hidden" name="test2" value="This is another test"><input type="hidden" name="test3" value="This is a third test"><input type="hidden" name="test3" value="Third test with multiple values"><input type="hidden" name="test4" value="AAbb">

Select the <input type="submit" name="submit" value="SUBMIT"> button tosee the output from the request.jsp example page.</form><br>See the source from the <a href="request.html">request.jsp</a> example page.</body></html>

Procesando la solicitud:

Figura 2: Procesamiento de la solicitud.

Funcionamiento:

Page 6: Biblioteca de Etiquetas en Java

Cuando se hace clic en submit se envía a un formulario a response.jsp, examinemos el código de

request.jsp:

Tenemos que observar primero la declaración de la librería:

<%@ taglib uri="http://jakarta.apache.org/taglibs/request-1.0" prefix="req" %>

El valor de uri le dice al contenedor JSP cual es el único identificador para la biblioteca, y el prefijo req le

dice también que las etiquetas que tengan dicho prefijo forman parte de la biblioteca.

Luego analicemos:

<req:parameters id="param"> <jsp:getProperty name="param" property="name"/> = <jsp:getProperty name="param" property="value"/></req:parameters>

Hay dos etiquetas que utilizamos en trazo, <req:parameters>, <jsp:getProperty>, deberiamos reconocer el

segundo, es una directiva propia de JSP.

Salida HTML:

GET or POST Parameters received with request:

test4 = AAbb

test3 = This is a third test

test2 = This is another test

test1 = This is a test

submit = SUBMIT

La primera etiqueta hace un bucle para todos los parámetros recibidos en la petición http, para cada

parámetro se obtiene el nombre y se muestra su valor.

Analicemos:

See if test1 parameter exists<req:existsParameter name="test1"> test1=<req:parameter name="test1"/></req:existsParameter><req:existsParameter name="test1" value="false"> Parameter test1 does not exist.</req:existsParameter>

Este codigo produce la salida:

See if test1 parameter exists

test1=This is a test

Esta etiqueta le permite tomar decisiones en la pagina JSP, sin tener que saber nada de Java, si el

parámetro existe o no, manda un mensaje en pantalla.

En el contenedor

Una vez declarada la biblioteca en el descriptor de despliegue web.xml, veamos un poco el fichero TLD:

Page 7: Biblioteca de Etiquetas en Java

<tag> <name>parameters</name> <tagclass>org.apache.taglibs.request.ParametersTag</tagclass> <teiclass>org.apache.taglibs.request.ParametersTEI</teiclass> <bodycontent>JSP</bodycontent> <attribute> <name>id</name> <required>yes</required> <rtexprvalue>no</rtexprvalue> </attribute> <attribute> <name>name</name> <required>no</required> <rtexprvalue>no</rtexprvalue> </attribute> </tag>

Como observamos se define la etiqueta, y luego la clase manipulador de etiquetas, las otras partes de la

definición describen el contenido de la etiqueta y sus atributos.

Hasta aquí hemos visto una introducción a los Tags Libraries. ;D