JSP: JavaServer Pages

« Actualizando… | Huevos de Pascua de Zelda: Twilight Princess »

JSP (JavaServer Pages) es la tecnología de Sun para incluir contenido HTML dinámico generado con Java en páginas HTML estáticas; algo así como el equivalente Java a ASP y PHP.

Los JSP corren dentro de un producto software llamado "contenedor web" que les proporciona una serie de servicios y que está formado por un contenedor JSP y un contenedor de servlets. Un ejemplo de esta clase de aplicación podría ser Tomcat.

Los JSP están muy relacionados con los servlets, que no son más que clases que derivan de la clase GenericServlet y que cuentan con métodos en los que incluir código a ejecutar cuando les llegue una petición HTTP (doPost si es POST o doGet si es GET). Esta estrecha relación viene dada porque, en realidad, los JSP son transformados en servlets cuando accedemos a ellos por el motor JSP del contenedor web en el corren (el motor JSP de Tomcat se llama Jasper, por si a alguien le interesa).

Una página JSP podría tener un aspecto parecido al siguiente:

<html>
<body>
<%! int veces = 15; %>
<% for (int i = 0; i < veces; i++)
	out.println("Hola mundo!<br/>"); %>
<%-- Soy un comentario --%>
<%= "Adios" %>
</body>
</html>

Esta página escribiría 15 veces "Hola mundo!" (en líneas separadas, ya que escribimos la etiqueta <br/> de HTML que indica nueva línea) y un "Adios". Si quereis probar el código no teneis más que instalar Tomcat, guardar el archivo como, por ejemplo, hola.jsp, en la carpeta webapps/ROOT y abrir la URL http://localhost:8080/hola.jsp en un navegador.

Como veis, en este archivo se entremezclan las típicas etiquetas de HTML con código Java. En la primera línea iniciamos el documento HTML y en la segunda el cuerpo del documento. La tercera línea, por empezar con <%! (también podría tener el aspecto <jsp:declaration> código </jsp:declaration>), es una declaración; en este bloque se pueden declarar variables o métodos que estarán disponibles en el resto del documento.

Los bloques <% y %> o <jsp:scriptlet> y </jsp:scriplet> como el que forma la cuarta y quinta línea son scriplets, código Java directamente. Como vemos en esta línea se utiliza el objeto out, que es uno de los objetos predefinidos disponibles para cualquier JSP; otros objetos interesantes son exception que representa la excepción lanzada en las páginas de error y sobre todo request, a partir del cual podemos comprobar los parámetros que nos pasan (por la URL si es GET o encapsulado dentro del mensaje si es POST) a través de métodos getTipoVariable(String nombreParametro).

Los comentarios se encierran entre <%-- y --%>, como podemos observar en la sexta línea y por último, los bloques <%= y %> o <jsp:expression> y </jsp:expression>, como la séptima línea, son expresiones; se evalúa el resultado y se imprime en el documento.

Otras construcciones que podríamos encontrar son las directivas (<%@ %>, <jsp:directive.xxx />) de las que existen varios tipos. La directiva page permite importar clases Java (<%@ page import="java.util.*" %>), establecer el tipo MIME de la salida (<%@ page contentType="text/plain" %>) o indicar la página a la que redireccionar si se produjera cualquier excepción (<%@ page errorPage="error.jsp" %>), entre otros. La directiva include permite insertar otros archivos en el lugar en el que se encuentre (<%@ include file="cabecera.jsp" %>). Por último, la directiva taglib nos permite definir nuestras propias etiquetas JSP.

Este último punto es bastante interesante. Cuando el motor JSP encuentre una de nuestras etiquetas en el código comprobará en un cierto archivo con qué clase se corresponde y llamará al método adecuado de esta clase. Esta correlación etiqueta-clase se indica en un archivo XML llamado TLD (Tag Library Descriptor).

La directiva taglib tiene la siguiente forma:

<%@ taglib uri="/mitaglib" prefix="mg" %>

o bien

<jsp:directive.taglib uri="/mitaglib" prefix="mg" />

donde la URI indica la localización del TLD y prefix es el prefijo por el que comenzarán todas las etiquetas definidas en el TLD; luego si mi etiqueta se llama etiqu, en la página JSP veremos algo como <mg:etiqu />.

Las clases que implementan las etiquetas son JavaBeans que implementan la interfaz Tag, IterationTag o BodyTag o bien heredan de TagSupport o BodyTagSupport que contienen implementaciones por defecto de IterationTag y BodyTag respectivamente.

La etiqueta más simple viene dada por la clase que implementa Tag. Utilizamos esta interfaz cuando la etiqueta no va a necesitar manipular su contenido (usaríamos BodyTag) ni lo evaluará más de una vez (usaríamos IterationTag). La interfaz Tag define un método doStartTag(), que es invocado cuando la máquina JSP se encuentra con el inicio de la etiqueta y un método doEndTag() que se invoca al cierre de la misma.

IterationTag añade un nuevo método, doAfterBody(), invocada cada vez que se ha terminado de evaluar el cuerpo de la etiqueta y que puede devolver la constante entera EVAL_BODY_AGAIN si queremos que se vuelva a evaluar o SKIP_BODY si no es el caso.

Es de interés comentar que las etiquetas también pueden tener atributos, como cualquier etiqueta XML, y que estos se asocian a propiedades del bean asociado, según la correspondencia indicada en el TLD. Sólo tendríamos que definir entonces las propiedades en el bean, así como sus getters y setters y la correspondencia en el TLD.

Relacionadas

Comentarios
  1. Genial introducción a JSP, si señor. así da gusto, puedes enterarte de que va la cosa aunque no hayas visto un JSP en tu vida…

  2. Pues me alegro de que te guste Rick :) A ver si me veo con ganas y hablo de otras cosillas relacionadas como servlets, jdbc o hibernate

  3. Yo voy a cambiar de curro ahora (al fin de programador) y problablemente toque algo de JSP, asi que ya sabes, que estas cosas siempre vienen bien :-)

  4. Yo voy a ver JSP la semana que viene en un curso de java que estoy haciendo y con esto ya sé al menos de que va la historia. Muchas gracias.

  5. [...] Los servlets son una tecnología hermana de los JSP, como ya comentamos en el artículo sobre estos últimos. [...]

  6. aleluya

    Muy útil! Gracias

  7. alhendin

    Gracias Zootropo.

    Como ya dije no me entero de nada, pero sigo en ello, hasta que lo consiga.

    Gracias por tu trabajo.

  8. Luis

    Muy buena introduccion a JSP, estoy aprendiendo a programar en java y tu informacion me ha sido muy util.
    "El peor de todos los pasos es el primero. Cuando estamos listos para una desicion importante, todas las fuerzas se concentran para evitar que sigamos adelante. Ya estamos acostumbrados a esto. Es una vieja ley de la fisica: romper la inercia es dificil.
    Como no podemos cambiar la fisica, concentremos la energia extra y asi conseguiremos dar el primer paso. Despues el camino mismo ayuda"-Inedito

Deja un comentario