JSP 2.0, JSTL y Lenguaje de expresiones

0
101205

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 (vertutorial 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@autentia.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ónde 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….

Sobre
el Autor ..

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad