You are on page 1of 7

Biblioteca de Etiquetas en Java

Autor: Hugo Flores


hpfloresj@gmail.com
http://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
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
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/>

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>
<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 then
be 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 to


see 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:

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

You might also like