Fecha de creación del tutorial: 2003-10-18
JSP 2.0 y EL (Expresion Languaje)
La especificación 2.0 de JSP ha introducido una nueva librería estandar de etiquetas, denominada JSTL.
Estas etiquetas tratan de abstraer la complejidad de introducir código Java (scriptlet) dentro de JSP, del mismo modo que trata de evitar que cada equipo de desarrollo cree un juego de etiquetas no estándar para las mismas labores.
Dentro de estas etiquetas, se utiliza un lenguaje llamado EL, lenguaje de expresiones, que pretende ser un lenguaje más sencillo que Java, para realizar operaciones.
Uno de los primeros contenedores de JSP que soporta estas capacidades es Tomcat5 (ver tutorial que describe su instalación).
Fichero descriptor
Lo primero que vamos a hacer es cambiar el fichero descriptor, copiando el que viene en los ejemplos. Si intentáis usar uno que ya tengáis, no se entera el Tomcat que tiene que interpretar los nuevos elementos de EL.
Fijaos en algunas líneas:
Indicamos que queremos interpretar EL <el-ignored>false</el-ignored>
Indicamos que no soportamos scriplet <scripting-invalid>true</scripting-invalid>
Podemos poner una cabecera por defecto <include-prelude>prelude.jspf</include-prelude>
Y tambien un pie <include-coda>coda.jspf</include-coda>
| <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd" version="2.4"> <description>Ejemplos de EL de rcanales@adictosaltrabajo.com</description> <display-name>Ejemplos de JSP 2.0 </display-name> <jsp-config> <jsp-property-group> <description>Definicion de atributos</description> <display-name>ConfiguracionJSP</display-name> <url-pattern>/*</url-pattern> <el-ignored>false</el-ignored> <page-encoding>ISO-8859-1</page-encoding> <scripting-invalid>true</scripting-invalid> <include-prelude>prelude.jspf</include-prelude> <include-coda>coda.jspf</include-coda> </jsp-property-group> </jsp-config> </web-app> |
Si ahora nos vamos al directorio raiz y creamos un fichero que se llame el.jsp e intentamos crear un scriplet .... veremos que no nos deja ejecutar.
Es, decir, está prohibido introducir código Java <% out.println("Mostramos un Scriptlet"); %>
Y tambien podemos ver que ya introducimos la primera sentencia EL
| <html> <head> <title>Primer JSP 2.0</title> </head> <body> <% out.println("Mostramos un Scriptlet"); %> Mostramos el parámetro Nombre : ${param.nombre} </body> </html> |
Si eliminamos el scriptlet ..... veremos la respuesta

Objetos Implicitos
Bueno, parece que las expresiones están dentro de ${expresion}
Para que sea útil este sistema, existen unos objetos implícitos que nos permiten acceder de un modo sencillo a los parámetros, contexto, petición, etc...
| pageScope | requestScope | sessionScope | applicationScope |
| param | paramValues | header | headerValues |
| pageContext | initParam | cookie |
Y para acceder a ellos y sus miembres, ya hemos visto que podemos hacerlo con el (.)
Operaciones
Podemos, de un modo sencillo e implicito realizar conversiones desde los parametros recibidos a otros tipos de datos
| <html> <head> <title>Primer JSP 2.0</title> </head> <body> <%-- <% out.println("Mostramos un Scriptlet"); %> --%> Mostramos el parámetro A : ${param.a} <br>Operación : ${param.a / 2} </body> </html> |
Y la salida es:

Descarga y Uso de TagLibraries
Para poder usar las librerías de tags de JSTL, debemos descargarnos los ficheros binarios y registrarlos en el fichero web.xml
http://jakarta.apache.org/downloads/binindex.html.
http://mirrors.isc.org/pub/apache/jakarta/taglibs/standard/

Descargamos y descomprimimos el fichero marcado.
Los ficheros con extensión .tld, los copiamos a nuestro directorio WEB_INF y los jar, al directorio WEB_INF/lib
Ahora modificamos el fichero web.xml para añadir la referencia a las librerías de etiquetas.
<taglib>
<taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
<taglib-location>/WEB-INF/fmt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/fmt-rt</taglib-uri>
<taglib-location>/WEB-INF/fmt-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core-rt</taglib-uri>
<taglib-location>/WEB-INF/c-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/sql</taglib-uri>
<taglib-location>/WEB-INF/sql.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/sql-rt</taglib-uri>
<taglib-location>/WEB-INF/sql-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/x</taglib-uri>
<taglib-location>/WEB-INF/x.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/x-rt</taglib-uri>
<taglib-location>/WEB-INF/x-rt.tld</taglib-location>
</taglib>
|
Debemos rearrancar Tomcat para que recoja los cambio (bueno, con rearrancar la Webapp es suficiente)
JSPs con TagLibs
Introducimos la directiva para usar la librería de etiquetas (he elegido el prefijo jsp2 para las etiqueras).
| <%@ taglib prefix="jsp2" uri="http://java.sun.com/jstl/core" %> <html> <head> <title>Primer JSP 2.0</title> </head> <body> <center> <jsp2:set var="contador" scope="session" value="1"/> El valor del contador es <b> ${contador} </b> </center> </body> </html> |

Ahora solo tenemos que saber las etiquetas que hay disponibles. Podeis encontrar una buena referencia en http://www.manning.com/bayern/appendixA.pdf
JSP y XML
Una de las preguntas que se hace mucha gente a la hora de utilizar la tecnología J2EE es ¿debería utilizar JSP o XSLT para la capa de presentación?
La misma pregunta nos puede surgir al utilizar Frameworks, como struts.
Un modo sencillo de combinar estas tecnologías puede ser utilizar etiquetas que permitan dentro de JSP introducir el procesamiento de XML.
| <%@ taglib prefix="jsp2" uri="http://java.sun.com/jstl/core" %> <%@ taglib prefix="jsp2x" uri="http://java.sun.com/jsp/jstl/xml" %> <html> <head> <title>Primer JSP 2.0</title> </head> <body> <center> <jsp2:set var="mixsl"> <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <table border="1"> <tr> <td><b>Nombre</b></td> <td><b>Enlace</b></td> <td><b>Descripción</b></td> </tr> <xsl:for-each select="//tutorial"> <tr> <td><xsl:value-of select="nombre"/></td> <td><xsl:value-of select="enlace"/></td> <td><xsl:value-of select="descripcion"/></td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> </jsp2:set> <jsp2x:transform xslt="${mixsl}"> <tutoriales> <tutorial> <nombre>JSP 2.0</nombre> <enlace>jspel</enlace> <descripcion>Nuevas caracteristicas de JSPs</descripcion> </tutorial> <tutorial> <nombre>Struts</nombre> <enlace>struts</enlace> <descripcion>Configuración del entorno Structs</descripcion> </tutorial> </tutoriales> </jsp2x:transform> </center> </body> </html> |
Y la salida sería

Los ficheros no tienen porque estar dentro del documento ... pueden ser ficheros normales, externos.
Acceso a Base de datos
Es igual de sencillo realizar accesos a la base de datos... usaremos la configuración vista el el tutorial sobre configuración de Pool de conexiones en Tomcat 5
| <%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %> <%@ taglib prefix="jsp2" uri="http://java.sun.com/jstl/core" %> <html> <head> <title>Primer JSP 2.0</title> </head> <body> <center> <sql:setDataSource dataSource="jdbc/tutoriales" /> <sql:query var="r"> SELECT * FROM TUTORIALES where id=1 </sql:query> <br>ID <b>${r.rows[0].id} </b> <br>Titulo <b>${r.rows[0].titulo}</b> <br>Descripcion <b>${r.rows[0].descripcion}</b> <br>Autor <b>${r.rows[0].autor}</b> </center> </body> </html> |

Tambien podemos cambiar un poquito el ejemplo para iterar. En este caso utilizamos forEach (ver que he cambiado la librería core por core-rt, sino, no me funcionaba)
| <%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %> <%@ taglib prefix="jsp2" uri="http://java.sun.com/jstl/core_rt" %> <html> <head> <title>Primer JSP 2.0</title> </head> <body> <center> <sql:setDataSource dataSource="jdbc/tutoriales" /> <sql:query var="r"> SELECT * FROM TUTORIALES where id<3 </sql:query> <table border="1"> <tr> <td><b>Id</b></td> <td><b>Titulo</b></td> <td><b>Descripcion</b></td> <td><b>Autor</b></td> </tr> <jsp2:forEach items="${r.rows}" var="fila"> <tr> <td>${fila.id} </td> <td>${fila.titulo}</td> <td>${fila.descripcion}</td> <td>${fila.autor}</td> </tr> </jsp2:forEach> </table> </center> </body> </html> |

Conclusión
Básicamente, parece que se está intentando limitar las capacidades dentro de JSP (de un modo controlado y voluntario), con el objetivo de hacer mucho más accesible esta tecnología a programadores de otros entornos .... como por ejemplo programadores PHP.
Estoy seguro que esta tecnología va a tener muy buena acogida porque realmente permitirá separar roles en equipos de desarrollo en aplicaciones empresariales.
Existen muchas más librerías de etiquetas (en apache.org encontrareis un montón) que seguro que se van a ir estandarizando .... y ya os la iremos mostrando poco a poco....
Anímate y coméntanos lo que pienses sobre este tutorial
Puedes opinar o comentar cualquier sugerencia que quieras comunicarnos sobre este tutorial; con tu ayuda, podemos ofrecerte un mejor servicio.
| Autor | Mensaje de usuario registrado |
|---|
| Autor | Mensaje de usuario anónimo |
|---|---|
| sayake |
Fecha de envío: 2006-12-12 - 04:48:26 PM me parece que es un tutorial muy practico e interesante, gracias |
| Christian Santos |
Fecha de envío: 2006-11-28 - 12:06:34 AM Muy buen tutorial. Igual los otros. Felicidades. Pero tengo una duda. Tengo una aplicacion WEB y el login lo hago por medio de un HTML que accesa un Servlet que consulta una Base de Datos y determina si es un usuario válido. Lo único que quiero saber es qué tipo de debo usar en mi archivo web.xml. Dado que no manejo ningun role y la validacion de usuarios se hace segun una base de datos. Saludos. |
| Luis Bonilla |
Fecha de envío: 2006-11-03 - 06:58:26 PM que tutorial tan malo, se supo que se deberia de mostra la poo aplicada a los jsp, pero se le puede abonar que muestra u ejemplo para xml y es lo unico rescatable. |
| Alexander Jimenez |
Fecha de envío: 2006-05-03 - 06:06:22 PM Hola, Te agradezco la publicación del manual. Pero para serte sincero no me ha quedado nada claro de dónde salen los valores de los param en qué momento fueron creados ni dónde. Una vez mas muchas gracias Alex |
- Puedes inscribirte en nuestro servicio de notificaciones haciendo clic aquí.
- Puedes firmar en nuestro libro de visitas haciendo clic aquí.
- Puedes asociarte al grupo AdictosAlTrabajo en XING haciendo clic aquí.
- Añadir a favoritos Technorati.
Esta obra está licenciada bajo licencia Creative Commons de
Reconocimiento-No comercial-Sin obras derivadas 2.5
Recuerda
Autentia te regala la mayoría del conocimiento aquí compartido (Ver todos los tutoriales). Somos expertos en: J2EE, Struts, JSF, C++, OOP, UML, UP, Patrones de diseño ... y muchas otras cosas.
¿Nos vas a tener en cuenta cuando necesites consultoría o formación en tu empresa?, ¿Vas a ser tan generoso con nosotros como lo tratamos de ser con vosotros?
Somos pocos, somos buenos, estamos motivados y nos gusta lo que hacemos ...
Autentia = Soporte a Desarrollo & Formación.
Tutoriales recomendados
| Nombre | Resumen | Visitas | Valoración | Votos | ||
|---|---|---|---|---|---|---|
| Introducción a RichFaces. | RichFaces es una librería de componentes visuales para JSF con soporte para Ajax4JSF. | 2010-02-01 | 461 | - | - | ![]() |
| Transformación de mensajes en SOA con OpenESB | En este tutorial vamos a mostrar con un ejemplo práctico una de las capacidades esenciales de todo sistema de integración, y por tanto característica del Enterprise Service Bus de SOA: la tranformación de mensajes. | 2010-01-29 | 320 | - | - | ![]() |
| Patrones de diseño de XML Schema | En este tutorial vamos a analizar y mostrar con ejemplos los cuatro principales patrones de diseño de XML Schema: Russian Doll, Salami Slice, Venetian Blind y Garden of Eden. | 2010-01-07 | 756 | Muy bueno | 1 | ![]() |
| JavaBean Datasource Ireport | La particularidad del caso que nos ocupa, es conseguir que la fuente de datos del informe sea una lista de JavaBeans y no una consulta definida previamente en el informe. | 2009-12-14 | 1259 | Bueno | 1 | ![]() |
| Contract-First web services con Visual Studio 2008 | Utilizaremos Visual Studio 2008 con el addin WSCF.blue para generar contract-first web services (servicios web dirigidos por contrato) | 2009-12-11 | 988 | - | - | ![]() |
| Instalar OpenESB 2.1 e Introducción | En este tutorial veremos como descargar e instalar OpenESB y explicaremos sus funcionalidades | 2009-12-03 | 1703 | - | - | ![]() |
| Tutorial basico de google wave bots | En este tutorial crearemos un robot muy simple, que al invitarlo a un Wave sustituye una tag por la fecha y hora actual. | 2009-11-18 | 2302 | - | - | ![]() |
| Enlazar Bugzilla con MavenChangesPlugin | En este tutorial veremos como enlazar Bugzilla con MavenChangesPlugin | 2009-09-11 | 1156 | - | - | ![]() |
| Release Bugzilla Maven Plugin | En este tutorial vamos a mostrar como automatizar un conjunto de acciones que hay que hacer siempre en los sistemas de gestión de incidencias, tales como dar de alta una nueva versión del producto, cerrar las incidencias que soluciona la nueva versión, et | 2009-09-11 | 1395 | - | - | ![]() |
| Ordenación por cantidades en informe cruzado | Nico nos explica en ese tutorial cómo lograr ordenar por cantidades en informes cruzados usando JasperReports e iReport | 2009-08-26 | 2100 | - | - | ![]() |
Nota:
Los tutoriales mostrados en este Web tienen como objetivo la difusión del conocimiento.
Los contenidos y comentarios de los tutoriales son responsabilidad de sus respectivos autores.
En algún caso se puede hacer referencia a marcas o nombres cuya propiedad y derechos es de sus respectivos dueños. Si algún afectado desea que incorporemos alguna reseña específica, no tiene más que solicitarlo.
Si alguien encuentra algún problema con la información publicada en este Web, rogamos que informe al administrador rcanales@adictosaltrabajo.com para su resolución.







