Abr 07 2009

Tomcat (V): Mi primera JSP

Categoría: DAD,InformáticaMiguel Angel @ 3:34

Tomcat

En el servlet que desarrollamos en la entrada anterior se generaba el código html de la página a mostrar en el cliente. Pero el ejemplo propuesto en la misma era tan sencillo que tal vez pasamos por alto un aspecto importante: programar una aplicación web mediante servlets que generan el código html puede ser bastante tedioso.

Sería interesante tener un mecanismo que nos permitiera generar los servlets a partir de un fichero similar a uno html. Y por eso aparecen las Java Server Pages (JSP). Así que una JSP es un fichero que se compila para generar un servlet (.java) que se invocará para crear la página que se envía al cliente.

Pero… ¿eso no es lo mismo que hace PHP? No, PHP se procesa cada vez que se invoca mientras que las JSP se compilan para generar un servlet y, como tal, se cargan en memoria la primera vez y se ejecutan en las sucesivas llamadas. Por lo que es más rápido. Además, esa persistencia entre peticiones puede ser útil para gestionar las sesiones y las conexiones a la base de datos.

Esta entrada es una introducción muy breve a la tecnología JSP. Iré completando la información con enlaces a páginas donde se amplíe el contenido.

Para ir directos al grano, empezaremos realizando nuestra primer página JSP.

  1. Creamos una carpeta, jsp, para guardar las JSP generadas. Botón derecho sobre la raíz del proyecto (app): New -> Folder.
  2. Creamos la JSP, inicio.jsp. Botón derecho sobre la carpeta jsp: New -> File.
  3. Incluimos el texto que se mostrará al ejecutarse:
  4. <html><body>
    Bienvenido a nuestra web
    </body></html>

  5. Arrancamos Tomcat y probamos que se ejecuta http://localhost:8080/jsp/inicio.jsp

Aspectos a destacar:

  • De momento, el código incluido no difiere en nada al de una página web “normal” (programada en HTML).
  • Se ha accedido a ella directamente a través de la url …/jsp/inicio.jsp, que se corresponde con la estructura de directorios creada en el proyecto. Cuidado!! Si esta carpeta se coloca dentro del directorio WEB-INF no sería accesible.
  • Si en eclipse hacemos: botón derecho sobre la raíz del proyecto -> Refresh. Aparecerá el fichero inicio_jsp.java dentro de la carpeta work, el cual se ha generado al ejecutar la JSP.

Hay que tener especial cuidado cuando se programan JSPs y se prueban. Muchas veces se realizan cambios, vas a la url y parece que todo sigue igual pero… lo que realmente sucede es que se está ejecutando la versión compilada y cargada antes de hacer los cambios. ¿Solución? Borrar el contenido de la carpeta work.

Después de estos “detalles”, sigamos con nuestro desarrollo haciendo que el servlet Control redirija la petición a la JSP. Para lo cual, modificaremos el código del método doPost dejándolo así:

this.getServletContext().getRequestDispatcher(“/jsp/inicio.jsp”).forward(req,resp);

Vamos a probarlo… http://localhost:8080/servlet/Control

Para terminar esta entrada vamos a realizar otra JSP con un poco más de contenido :-). Aunque antes de nada es necesario describir las distintas etiquetas JSP y las variables predefinidas existentes.

Etiquetas

<%@ Directiva de configuración de la página %>

<%@ page errorPage=“error.jsp” %>

<%! Declaración de variables y funciones. %>

<%! int i=0; %>

<% Bloque de código Java %>

<% for(i=0;i<5;i++){ %>….<%}%>

<%– Comentario –%>

<%– Esto es un comentario %>

<%= Expresión evaluable Java %>

<%= i %>

De las directivas de configuración ya hablaremos en otra entrada. Del resto, sólo destacar que mediante “<%!” declaramos una variable global a todas las peticiones. Es decir, se inicializa cuando se carga en memoria la JPS por primera vez y, si en una petición se modifica, su valor será el nuevo para las sucesivas peticiones.

Variables predefinidas

  • request: referencia a la petición que ha invocado a la página JSP.
  • response: acceso a la respuesta a la petición del cliente.
  • pageContext: el contexto de ejecución de la página jsp.
  • session: si existe, el objeto sesión creado por la petición del cliente. Sólo disponible para páginas con session=true.
  • out: objeto para escribir en el flujo de salida de la página.
  • exception: la instancia que representa la excepción no capturada que ha provocado la invocación de la página de error. Sólo accesible en páginas con isErrorPage=true.

Después de ver las distintas etiquetas JSP y variables predefinidas, analicemos este código JSP.

  <%
    int max = (request.getParameter("max")!=null)
                  ?Integer.parseInt(request.getParameter("max"))
                  :0;
  %>
  <html>
  <body>
    Vamos a escribir una serie desde el 0
    hasta el <% out.println(max+""); %>:<br/>
    <% for(int i = 0 ; i <= max && i < 10 ; i++){ %>
      <%= i %><br>
    <%}%>
  </body>
  </html>

He destacado en negrita los tres puntos más importantes del código.

  1. Recupera el parámetro max que será el tope de nuestro contador. Para ello hace uso de la variable predefinida request que, como se puede observar, no está declarada en el código pero sí existe.
  2. Haciendo uso de otra variable predefinida, out, escribe el valor max en la respuesta al cliente.
  3. El resultado obtenido es el mismo que en el caso anterior (escribir un valor) pero haciendo uso de la etiqueta “<%=”. Se evalua la expresión y muestra el resultado. Por cierto, la expresión no termina en “;”.

Lo único que nos queda es probar que dicho código funciona…

  1. Creamos un nuevo fichero JSP (jsp/contador.jsp).
  2. Comprobamos que se ejecuta http://localhost:8080/app/jsp/contador.jsp?max=7

El parámetro se pasa poniendo ? seguido del nombre y su valor. Si quisieramos añadir más parámetros, estos irían precedidos por & en vez por ?

Bueno, como introducción a las páginas JSP creo que ya está bien. En la próxima entrada veremos como pasar un atributo desde el servlet Control a la JSP inicio.jsp.

Etiquetas: ,

Dejar una respuesta