Estás en:

informaciónDESARROLLADO POR:
icono_twiter icono_linkedin icono_linkedin icono_xing

Creador y propietario de AdictosAlTrabajo.com, Director General de Autentia S.L., Ingeniero Técnico de Telecomunicaciones y Executive MBA por el Instituto de Empresa 2007. Twitter: @rcanalesmora

Autor del Libro: Informática profesional, las reglas no escritas para triunfar en la empresa

Puedes consultar mi CV y alguna de mis primeras aplicaciones (de los 90) aquí

Fecha de publicación del tutorial: 2003-10-18
Tutorial visitado 63.542 veces63.542
Descargar el tutorial en PDF


Regístrate para votar
Share |
JSP y EL

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

Sobre el Autor ..

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.


(Sólo para usuarios registrados)

» Registrate y accede a esta y otras ventajas «

Comentarios

  1. sayake
    2006-12-12 - 04:48:26 PM

    me parece que es un tutorial muy practico e interesante, gracias

  2. Christian Santos
    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.

  3. Luis Bonilla
    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.

  4. Alexander Jimenez
    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