JSP: JavaServer Pages

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.

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…

    Responder

  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

    Responder

  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 🙂

    Responder

  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.

    Responder

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

    Responder

  6. aleluya

    Muy útil! Gracias

    Responder

  7. alhendin

    Gracias Zootropo.

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

    Gracias por tu trabajo.

    Responder

  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

    Responder

    • zarela

      Esto es cierto, muchas veces sucede;pero, después que te decides, el camino mismo ayuda.

      Responder

  9. Daniel

    Yo tengo una duda.
    Para un proyecto escolar necesito hacer una aplicacion por capas. Pero no me queda claro como comunicar un jsp con un servlet o con otras clases.
    Si tuevieras tiempo podrias poner un ejemplo sencillo???. Que solo me faltaria eso para ralizar mi proyecto.
    Bueno de antemano Gracias.
    Y muy buen ejemplo el que pusiste.
    Me ayudo a mejorar la forma en que hacia los jsp.
    De nuevo gracias.

    Responder

  10. Herlan

    hola soy Herlan:
    Me gustaria que alguien me ayude con un problemita que tengo lo que pasa es que estoy haciendo un buscador de palabras asi como en Google, bueno todo funciona bien lo unico que no puedo hacer es que cada vez que yo introduzca una palabra y encuentre mas de 10 iguales a esa palabra los vaya cargando en diferentes paginas..osea mi problema esta en generar paginas de acuerdo a la cantidad de palabras que encuentre, si son 30 palabras solo tiene que haber 10 enlaces en esa pagina todo es igual a Google.

    Esto tiene que ser utilizando Visual Web Pack de NetBeans 6.0

    solo quiero un ejemplito que cargue una lista de Page y luego que adicione los HyperLink a cada pagina , osea asuman que estan haciendo un buscador de palabras y que tienen que funcionar asi como Google que con un Boton Next pueda pasar a otra pagina, pero esto tiene que ser en codigo Java no HTML. por que asi lo estoy haciendo osea que no estoy escribiendo nada de codigo HTML por que asi es mejor

    Si es que alguien me puede ayudar se los agradecere muchisimo.

    Responder

  11. […] nuestra aplicación usando JSP, Servlets, JDBC, Hibernate, o cualquier otra tecnología que nos […]

    Responder

  12. […] supuesto, podríamos utilizar JSP y servlets para crear una aplicación utilizando el patrón MVC: en una aplicación con JSP y […]

    Responder

  13. daniel

    Muy buen material, al igual que el de PHP y Python.

    Responder

  14. Pedro

    Hola amigos,
    necesito por favor saber como paso una aplicación que está en Java RMI a JSP
    Cualquier consejo o recomendación la agradeceré bastante.

    Gracias.

    Responder

  15. Cueto

    buena la explicacion, asi como diceee para empezar casi desde cero con jsp

    Responder

  16. Edu

    Entonces los jsp siempre únicamente se visualizan en el Apache Tomcat? http://localhost:8080/hola.jsp en un navegador local.

    Existirá alguna manera de que se visualicen en un sitio REAL?

    Pues hago una página sencilla holamundo.jsp y la subo a un servidor REAL y no se ve nada de página, solo aparece el texto plano.

    Busco tutoriales por todas partes y todos cuelgan sus páginas .jsp ÚNICAMENTE en el Apache Tomcat local. Péro no encuentro a nadie que enseñe acerca de como poner una página web .jsp en un sitio en línea real y que funcione.

    Si subo mi página recién creada en mi sitio, solo despliega el texto plano. ¿Acaso no son para que funcione en internet? o es sólo para el servidor Apcahe Tomcat? y siempre es http://localhost:8080/hola.jsp en un navegador.

    Pudiera ser así? http://www.misitio.com/hola.jsp? ç

    Las páginas jsp que creo se ven muy bien en el Apcahe Tomcat pero si las subo a mi sitio que tengo en Internet solo despliega texto plano.

    Responder

Deja un comentario