Está en la página 1de 12

JavaServer Pages Standard Tag Library (jstl)

Java server pages standard tag library (jstl) es un conjunto de libreras de etiquetas simples y estndares que encapsulan la funcionalidad principal que es usada comnmente para escribir paginas JSP. JSTL responde a la demanda de los programadores de un conjunto de acciones JSP personalizadas para manejar las tareas que necesitan casi todas las paginas JSP incluyendo procesamiento condicional, bucles, internacionalizaciones, acceso a base de datos y procesamiento a XML. Esto acelerara el desarrollo de las aplicaciones web y elimina la necesidad de los scripting. Primero responderemos a la pregunta siguiente Qu es jstl? (Cuyas siglas son JSP Standard Tag Library) es un conjunto de etiquetas organizadas en 5 grupos distintos, las cuales tienen como propsito fundamental evitar que el programador introduzca cdigo Java (scriptlets) en las pginas JSP. Por qu razn? Pues, bsicamente porque los scriptlets son una manera desorganizada de programar pginas JSP y adems, la simplicidad de las libreras que provee JSTL nos ayuda demasiado en la lgica de presentacin de la pgina JSP todo esto ofrece la programacin con JSTL tambin podramos decir que son ventajas de utilizar JSTL, ahora veremos las desventajas de JSTL. Las desventajas de JSTL: Los JSTL pueden agregar mayor sobrecarga en el servidor. Los scriptlets y las libreras de etiquetas son compilados a servlets, los cuales luego son ejecutados por el contenedor. El cdigo Java embebido en los scriptlets es bsicamente copiado en el servlet resultante. En cambio, las etiquetas JSTL, causan un poco ms de cdigo en el servlet. En la mayora de casos esta cantidad no es mensurable pero debe ser considerado. Los scriptlets son ms potentes que las etiquetas JSTL. Si desea hacer todo en un script JSP pues es muy probable que insertar todo el cdigo en Java en l. A pesar que las etiquetas JSTL proporciona un potente conjunto de libreras reutilizables, no puede hacer todo lo que el cdigo Java puede hacer. La librera JSTL est diseada para facilitar la codificacin en el lado de presentacin que es tpicamente encontrado en la capa de Vista si hablamos de la arquitectura ModeloVista-Controlador. Libreras JSTL Son cinco las libreras de etiquetas independientes, cada una contiene acciones personalizadas dirigidas a un rea funcional especfica. La siguiente tabla lista cada librera con su prefijo de etiqueta recomendado y la URI por defecto.

DESCRIPCION Core XML processing I18N Database Access Function

PREFIJO c x fmt sql fn

URI por defecto http://java.sun.com/jsp/jstl/core http://java.sun.com/jsp/jstl/xml http://java.sun.com/jsp/jstl/fmt http://java.sun.com/jsp/jstl/sql http://java.sun.com/jsp/jstl/functions

La librera CORE contiene acciones para las tareas rutinarias, como incluir o excluir una parte de una pgina dependiendo de una condicin en tiempo de ejecucin, hacer un bucle sobre una coleccin de tems, manipular URLs para seguimiento de sesiones, y la correcta interpretacin del recurso objetivo, as como acciones para importar contenido de otros recursos y re direccionar la respuesta de una URL diferente. La librera XML contiene acciones para procesamiento XML, incluido validar un documento XML y transformarlo usando XSLT. Tambin proporciona acciones para extraer parte de un documento XML validado, hacer bucles sobre un conjunto de nodos, y procesamientos condicional basado en valores nodos. La librera I18N contiene etiquetas que son empleados para dar formato especficos a elementos dentro de JSPs, estos formatos incluyen aquellos para fechas, monedas y nmeros, as como apoyo para formateo basado en el locale/i18n(lenguaje del usuario). La librera SQL contiene etiquetas para hacer una rpida y fcil integracin con bases de datos. Generalmente se le usa para hacer prototipos. Basados en los principios del patrn Model-View-Controller (MVC), el uso de estos Tags en JSPs resulta en una psima decisin de diseo, ya que se estara mezclando la capa de acceso a datos (DAO) con la vista de presentacin (JSP). La librera FUNCTION define un conjunto de funciones estndar y un mecanismo para aadir nuevas funciones al lenguaje de expresiones. El lenguaje de expresiones JSTL Adems de las libreras de etiquetas, JSTL define un lenguaje de expresiones, que facilita enormemente el tratamiento de informacin. JSP usa java para referenciar atributos dinmicos. Con JSTL ya no es necesario. Comparemos por ejemplo la lectura de un parmetro: Con JSP <%=request.getParameter("nombre)%> Con JSTL $(param.nombre)

En JSTL se evita el uso de java proporcionando un lenguaje de expresiones llamado EXPRESSION LANGUAGE (EL). EL no es un lenguaje de programacin en s mismo, su nico propsito es: Referenciar objetos y sus propiedades. Escribir expresiones simples. EL toma prestada de JavaScript la sintaxis para acceder a estructuras de datos tanto como propiedades de un objeto (con el operador.) como con elementos con nombres de un array (con el operador ["nombre"]). Las propiedades de los componentes JavaBeans y las entradas java.util.Map, que usan la clave como nombre de propiedad, pueden ser accedidas de esta forma. Aqu tenemos algunos ejemplos: ${myObj.myProperty}$ ${myObj["myProperty"]}$ ${myObj[varWithTheName]}$ Como se ve aqu, una expresin EL siempre debe estar encerrada entre los caracteres ${y} $. Las dos primeras expresiones acceden a una propiedad llamada myProperty en un objeto representado por una variable llamada myObj. La tercera expresin acceder a una propiedad con un nombre contenido en un variable, esta sintaxis se puede utilizar con cualquier expresin que evale el nombre de la propiedad. El operador de acceso a array tambin se usa para datos representados como una coleccin de elementos indexados, como un array Java o una java.util.List: ${myList[2]}$ ${myList[aVar + 1]}$ Adems de los operadores de propiedad y elemento array y los operadores aritmticos, relacionales, y lgicos, hay un operador especial para comprobar si un objeto est "vaco" o no puede ser usado en una expresin EL. La siguiente tabla lista todos los operadores: OPERADOR DESCRIPCION . Accede a una propiedad [] Accede a un elemento de un Array/lista () Agrupa una subexprecion + Suma Resta o negacin de un numero / o div Divisin % o mod Modulo (resto) == o eq Comprueba igualdad != o ne Comprueba negacin < o it Comprueba menor que

>o gt <= o le >= o gt && o and || o or ! o not Empty

Comprueba mayor que Comprueba menor o igual que Comprueba mayor o igual que Comprueba AND lgico Comprueba OR lgico Complemento binario booleano Comprueba un valor vaco (null, string vaco, o una colleccion vaca)

Lo que no encontraremos en EL son sentencias como asignaciones, if/else, o while. Para este tipo de funcionalidades en JSP se usan los elementos Action, y EL no est pensado para utilizarse como un lenguaje de programacin de propsito generar, slo un lenguaje de acceso a datos.
PALABRAS RESERVADAS Las siguientes palabras estn reservadas por EL y no pueden ser usadas como identificadores And Instanceof False Ge Eq Or Empty Null Gt Ne Not Div True Le It mod

Objetos Implcitos
Ciertos objetos son automticamente accesibles a cualquier etiqueta JSP. A travs de ellos es posible acceder a cualquier variable de los mbitos page, request, sesin, aplication a parmetros de HTTP, cookies, valores de cabeceras, contexto de la pgina, y parmetros de inicializacin del contexto. Todos excepto pageContext, estn implementados usando la clase java.util.Map OBJETOS IMPLICITOS CONTIENE PageScope Variables de mbito pagina requestScope Variables de mbito request sessionScope Variables de mbito sesin applicationScope Variables de mbito application Param Parmetros del request como cadenas paramValues Parmetros del request como arreglo de cadenas Header Cabeceras del request HTTP como cadenas headerValues Cabeceras del request HTTP como arreglos de cadena Cookie Valores de las cookies recibidas en el request initParam Parmetros de inicializacin de la aplicacin web pageContext El objeto pageContext de la pgina actual FUNCIONES DE EL Las funciones representan un modo de extender la funcionalidad del lenguaje de expresiones. Se usan dentro de cualquier expresin del lenguaje de expresiones, por ejemplo:

<c:set var=nombre value=Gustavo/> Mi nombre tiene ${fn:length(nombre)}letras. Existen 16 funciones de manipulacin de cadenas: Alternar una cadena entre maysculas/minsculas: toLowerCase, toUpperCase. Obtener una subcadena: substring, substringAfter, substringBefore. Eliminar el espacio en blanco en ambos extremos de una cadena: trim. Reemplazar caracteres en una cadena: replace. Comprobar si una cadena contiene a otra: indexOf, startsWiht, endsWiht,constains, containslgnoreCase. Convertir una cadena en array: Split. Convertir un array en cadena: join. Codificar los caracteres especiales del XML: escapeXml. Obtener la longitud de una cadena: length. La funcin length tambin puede aplicarse a instancias de java.util.Collection, caso en el cual, devolver el nmero de elementos de una coleccin. Todas las funciones EL interpretan las variables no definidas o definidas con valor igual a null, como cadenas vacas. Ahora veremos lo que son las etiquetas del CORE con sus respectivos ejemplos que utiliza JSTL. Para poder usar la librera Core en nuestra pgina JSP, debemos incluir la siguiente lnea. <%@taglib uri="http://java.sun.com/jstl/core" prefix="c" %> 1. Etiqueta: out <c:out> : Dicha etiqueta nos permite mostrar valores en nuestra pgina. Normalmente, para mostrar valores o mensajes en JSP, usamos por ejemplo: <%=Texto_del_mensaje%>, pero tambin puede hacerse con la etiqueta <c:out> Sintaxis: Sin cuerpo <c:out value="Esto es un mensaje" [escapeXml={true|false}] [default=valorpordefecto]/> Con cuerpo <c:out value="Esto es un mensaje" [escapeXml={true|false}]> Valor por defecto </c:out> A continuacin veremos la descripcin de sus atributos: ATRIBUTO DESCRIPCION REQUERIDO POR DEFECTO value Informacin a mostrar Si Ninguno default Informacin a mostrar por defecto No Cuerpo escapeXml True si debe convertir caracteres No True especiales a sus correspondientes entidades(por ejemplo, &gt; para<)

2. ETIQUETA SET <c:set> Nos permite crear una variable y establecer un valor para esta: <body> <!-- Creamos la variable texto con un valor String --> <c:set var="texto" value="valor_de_la_variable"/> <!-- Mostramos el valor de la variable texto --> El valor de la variable <b>texto</b> es : <c:out value="${texto}"/> </body> Obtenemos entonces: ATRIBUTO DESCRIPCION REQUERIDO POR DEFECTO Value Informacin a grabar No Cuerpo Target Nombre de un vean cuya propiedad No Ninguno ser modificada Property Propiedad a modificar No Ninguna Var Nombre de la variable en la que No Ninguna guardar Scope mbito de la variable en la que No Page grabar la informacin (page, request, sesin, o application) 3. ETIQUETA REMOVE <c:remove> Simplemente se utiliza para eliminar variables que hayamos definido: <body> <p> <!-- Creamos la variable texto con un valor String --> <c:set var="texto" value="valor_de_la_variable"/> <!-- Mostramos el valor de la variable texto --> El valor de la variable <b>texto</b> es : <c:out value="${texto}"/> </p> <p> <!-- removemos la variable texto --> <c:remove var="texto" scope="page"/> <!-- Mostramos nuevamente el valor --> El valor de la variable <b>texto</b> ahora es : <c:out value="${texto}" default="Es Nulo"/> </p> </body> ATRIBUTO DESCRIPCION REQUERIDO POR DEFECTO Var Nombre de la variable a quitar Si -----Scope Alcance de la variable a quitar No Todos lo mbitos

Cuando no se especifica alcance, la etiqueta busca en todos los alcances, yendo del ms especfico al ms general (page, request, sesin, application), hasta encontrar una variable con ese nombre. Si la variable no se encuentra, la etiqueta finaliza sin error. 4. ETIQUETA CATCH <c:catch> La accin catch permite a las paginas JSP manejar errores generados desde cualquier otra accin, y permite el manejo de errores para multiples acciones a la vez. En otras nos permite capturar excepciones. <body> <c:catch var="excepcion"> <%=3/0%> </c:catch> <c:if test="${excepcion != null }"> Ocurri una excepcin : <c:out value="${excepcion}"/> </c:if> </body> ATRIBUTO DESCRIPCIN REQUERIDO POR DEFECTO Var Variable para exponer informacin No Ninguno sobre el error Scope mbito de la variable No Page 5. ETIQUETA IF <c:if> Es lo mismo que la instruccin if de Java SE, evala una condicin: <body> <c:set var="a" value="20"/> <c:if test="${a > 100}"> La variable <b></b> es <b>mayor</b> que 100. </c:if> <c:if test="${a < 100 }"> La variable <b></b> es <b>menor</b> que 100. </c:if> </body> ATRIBUTO DESCRIPCION REQUERIDO POR DEFECTO Test Condicin a evaluar. Solo procesa el Si -----cuerpo si es true Var Nombre de la variable para el valor No Ninguno resultante de la evaluacin de la condicin. El tipo de la variable booleano. Scope mbito de la variable No Page En el resultado es posible colocar otras etiquetas, incluyendo otras etiquetas IF. Es til guardar el resultado de evaluar la condicin para evitar repetir los clculos.

6. etiquetas choose, when, otherwise <c: choose>, <c: when> y <c: otherwise> La etiqueta choose no tiene atributos, acepta como hijos uno o ms when y una etiqueta otherwise. Funciona parecido a la instruccin switch, es decir, nos permite establecer varias condiciones en un mismo bloque. <body> <c:set var="a" value="50"/> <c:choose> <c:when test="${a == 1}"> <b>a</b> es 1. </c:when> <c:when test="${a == 2 }"> <b>a</b> es 2. </c:when> <c:otherwise> <b>a</b> tiene un valor diferente de 1 y de 2. </c:otherwise> </c:choose> </body> En el anterior cdigo, la etiqueta <c:when> es para definir alguna condicin, mientras que la etiqueta <c:otherwise> es para definir el caso por defecto, en el cual no se cumple ninguna de las condiciones. La etiqueta when solo tiene un atributo, tal como se explica a continuacin: ATRIBUTO DESCRIPCION REQUERIDO POR DEFECTO Test Condicin a evaluar Si ------La etiqueta otherwise representa la ltima alternativa dentro de la etiqueta choose y no tiene atributos. 7. ETIQUETA forEach <c:forEach> Repite el contenido de su cuerpo a travs de una coleccin de objetos, o un numero de veces. Nos permite hacer ciclos en una jsp. Crea la clase Lista en el paquete beans. SINTAXIS 1: <c:forEach [var=nombreVariable] tems=coleccion [varStatus=variableEstado] [begin=inicio] [end=fin] [step=paso]> Contenido del cuerpo </c:forEach> SINTAXIS 2: <c:forEach [var=nombreVariable] [varStatus=variableEstado]

begin=inicio end=fin [step=paso]> Contenido del cuerpo </c:forEach> A continuacin describiremos cada uno de sus atributos: ATRIBUTOS DESCRIPCION REQUERIDO tems Coleccin de tems sobre los que se No itera Begin Elemento con el que inicia la No iteracin (0=primero) End Elemento con el que se finaliza la No iteracin Step Procesa solo cada step elementos No varStatus Nombre de la variable con la que se expone el estado de la iteracin actual

POR DEFECTO Ninguno 0 Ultimo Ninguno

La variable varStatus tiene propiedades que describen el estado de la iteracin, tal como se muestra en la siguiente imagen: ATRIBUTO TIPO REQUERIDO Begin Nmero El valor del atributo begin Current Nmero El elemento actual End Nmero El valor del atributo end Index Nmero ndice del elemento actual dentro de la coleccin Count Nmero Numero de iteracin (empezando en 1) First Boolean Indica si estamos en la primera iteracin Last Boolean Indica si estamos en la ltima iteracin Step Nmero El valor del atributo step 8. ETIQUETA forTokens <c:forTokens> Permite descomponer una cadena en tokens. Analizar una cadena se llama parsing. Las partes en las que se descompone una cadena se llama tokens. SINTAXIS: <c:forTokens tems=cadenaDeTokens delims=delimitadores [var=nombreVariable] [varStatus=variableEstado] [begin=inicio] [end=fin] [step=paso]> </c:forTokens> Aqu sus atributos: ATRIBUTOS TIPO REQUERIDO POR DEFECTO Var Nombre del atributo con el que se No Ninguno expone el token actual tems Cadena de tokens sobre la cual iterar Si Ninguno Delims Conjunto de delimitadores (caracteres Si Ninguno que separan los tokens en la cadena)

varStatus Begin End Step

Nombre de la variable con la que se expone el estado de la iteracin actual Elemento con el que se inicia la iteracin (0=primero) Elemento con el que se finaliza la iteracion Procesa solo cada step elementos

No No No No

Ninguno 0 Ultimo 1

9. ETIQUETA IMPORT <c:import> Importa el contenido de un recurso basado en una URL SINTAXIS: Contenido del recurso en linea o exportando como objeto String. <c:import url=url[context=contexto] [var=nombreVariable] [Scope={page|sesin|application}] [charEnconding=charEnconding]> Contenido del cuerpo es opcional para etiquetas <c:param> </c:import> Contenido del recurso es exportado como un objeto READER <c:import url=url [context=contexto] varReader=nombreVariableReader [charEncoding=charEnconding]> Contenido del cuerpo donde nombreVariableReader es utilizada por otra accin. </c:import> ATRIBUTO DESCRIPCION REQUERIDO POR DEFECTO url URL para importar el recurso. Es Si ----vlido cualquier protocolo soportado por java. Net.URL. es decir, al manos HTTP, HTTPS,FTP, file, y JAR Context Nombre del contexto cuando se No Contexto accede a una recurso URL realativo actual que pertenece a otro contexto Var Nombre de la variable con la que No Muestra expone el contenido del recurso Scope mbito de la variable No Page charEncoding Juego de caracteres con el que No ISO-8859-1 importar los datos varReader Nombre de una variable con la que No Ninguno exponer el java.io.Reader con que se lee la URL En HTML, La URL relativa/images/smily.jgp lee un archivo de la raz del servidor web, pero en JSTL, esa misma URL lee el fichero de la raz de nuestra aplicacin web. Si quisiramos que la URL fuera relativa a otra aplicacin web usaramos: <c:import context=/otraAplicacion url=/directorio/pagina.jsp/>

Cuando dos pginas estn en la misma aplicacin web, comparten el mismo mbito request, sessin, y aplication. Si las paginas estn en diferente aplicacin y son accedidas mediante c:import, ambas comparten el mbito request. 10. ETIQUETA param <c:param> : Aade parmetros a requerimientos de una URL. Anidadas a acciones <c:import>,<c:url>,<c:redirect> SINTAXIS: El valor del parmetro se especifica en el atributo value. <c:param name=nombreParametro value=valorParametro/> El valor del parmetro se especifica en el contenido del cuerpo. <c:param name=nombreParametro> Valor parmetro </c:param> Aqu tenemos los atributos: ATRIBUTO DESCRIPCION REQUERIDO POR DEFECTO Name Nombre del parmetro Si ---Value Valor del parmetro No Valor vacio

11.ETIQUETA redirect <c:redirect> Nos permite redirigir una peticin. SINTAXIS: <c:redirect url=recurso [context=contexto]/> sin contenido en el cuerpo <c:redirect url=recurso [context=contexto]> Etiquetas c:param </c:redirect> Los atributos: ATRIBUTOS DESCRIPCION REQUERIDO POR DEFECTO url URL a la que redirigir Si -Context Nombre del contexto cuando se No Contexto accede a un recurso URL relativo actual que pertenece a otro contexto A continuacin tenemos un ejemplo ilustrativo: <c:redirect url=http://www.minedu.gob.pe/noticias/index.jsp> <c:param name=id value=1234/> </c:redirect> 12. ETIQUETA url Esta Etiqueta procesa y re-escribe una direccin URL si es necesario. Solo direcciones URL relativas son re-escritas. Las URL absolutos no son re-escritas para evitar situaciones donde las URL externas puede ser re-escritas y exponer la identificacin de la sesin.

Sin contenido en el cuerpo. <c:url value=valor [context=contexto] [var=nombreVariable] [Scope={page|request|session|application}]/> Con contenido en el cuerpo para especificar los parmetros. <c:url value=valor [context=contexto] [var=nombreVariable] [Scope={page|request|session|application}]/> Etiquetas <c:param> </c:url> Los atributos: ATRIBUTO DESCRIPCION REQUERIDO POR DEFECTO Value URL a ser procesada Si -Context Nombre del contexto cuando se No Contexto accede a un URL relativo que actual pertenece a otro contexto Var Nombre de la variable con la que se No Ninguno expone el contenido del recurso Scope mbito de la variable No Page Esta etiqueta es til por dos motivos: Preserva la informacin de sesin codificada en la URL. permite usar URLs relativas a la aplicacin web, no a la raz del servidor. A continuacin tenemos un ejemplo ilustrativo: <c:url value=demos05.jsp var=destino> <c:param name=nota value=15/> </c:url> <a href=${destino}>Enlace </a>

También podría gustarte