Tutorial JSP
JSP
Introducción
Java Server Pages es una tecnología que permite mezclar HTML estático con HTML generado dinámicamente. Se escribe el HTML regular de la forma normal, usando cualquier herramienta de construcción de páginas Web y se encierra el código de las partes dinámicas en unas etiquetas especiales, la mayoría de las cuales empiezan con "<%" y terminan con "%>".
Aquí un ejemplo:
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

    <h1>JSP Page</h1>
    <%
        ...
    %>
    
    </body>
</html>

Ventajas de JSP

  • Contra Active Server Pages (ASP)
    ASP es una tecnología similar de Microsoft. Las ventajas de JSP estan duplicadas. Primero, la parte dinámica está escrita en Java, no en Visual Basic, otro lenguaje específico de MS, por eso es mucho más poderosa y fácil de usar. Segundo, es portable a otros sistemas operativos y servidores Web.
  • Contra los Servlets
    JSP no nos da nada que no pudierámos en principio hacer con un servlet. Pero es mucho más conveniente escribir (y modificar!) HTML normal que tener que hacer un billón de sentencias println que generen HTML. Además, separando el formato del contenido podemos poner diferentes personas en diferentes tareas: nuestros expertos en diseño de páginas Web pueden construir el HTML, dejando espacio para que nuestros programadores de servlets inserten el contenido dinámico.
  • Contra JavaScript
    JavaScript puede general HTML dinámicamente en el cliente. Este una capacidad útil, pero sólo maneja situaciones donde la información dinámica está basada en el entorno del cliente. Con la excepción de las cookies, el HTTP y el envió de formularios no están disponibles con JavaScript. Y, como se ejecuta en el cliente, JavaScript no puede acceder a los recursos en el lado del servidor, como bases de datos, catálogos, información de precios, etc.
Hay tres tipos de construcciones JSP: elementos de script, directivas y acciones. Los elementos de script nos permiten especificar código Java que se convertirá en parte del servlet resultante, las directivas permiten controlar la estructura general del servlet, y las acciones permiten especificar componentes que deberían ser usuados, y de otro modo controlar el comportamiento del motor JSP.

Elementos JSP

Expresión JSP

Se usan para mandar valores directamente a la pagina web resultante de la JSP, <%= expresion %>, la expresion es ejecutada, se convierte a una cadena de caracteres (String) y insertada en la pagina. En las expresiones se usan gran cantidad de variables predefinidas, los mas usados son:
  • request, de la clase HttpServletRequest
  • response, de la clase HttpServletResponse
  • session, de la clase HttpSession que esta asociada al request, si es que trabajamos con sessions
  • out, se trata de una clase PrintWriter usada para imprimir directamente en la pagina resultante.
Sintaxis: <%= expression %>

Scriptlet JSP

El código se inserta en el método service. Con los Scriptlets tambien podemos escribir en la pagina resultante sin usar las expresiones, la manera de hacerlo es usar la variable out con su metodo println. Los scriptlets ofrecen la posibilidad de ser combinados facilmente con codigo html, ya que el mismo es como si se metiera dentro de un out.println. Sintaxis: <% code %>

Declaración JSP

Las declaraciones JSP nos permiten configurar variables para su uso posterior en expresiones o scriptlets. También podemos declarar variables dentro de expresiones o scriptlets en el momento de usarlas. El ámbito es toda la página JSP, no hay concepto de variables de ejemplar, es decir, no tenemos que declarar variables de ejemplar para usar en más de una expresión o scriptlet.
Sintaxis: <%! code %>

Comentario JSP

Comentario ignorado cuando se traduce la página JSP en un servlet.
Sintaxis: <%-- comment --%>

Acción jsp:include

Incluye un fichero en el momento en que la página es solicitada.
Sintaxis: <jsp:include page="relative URL" flush="true"/>

Acción jsp:useBean

Encuentra o construye un Java Bean.
Sintaxis: <jsp:useBean att=val*>...</jsp:useBean>

Acción jsp:setProperty

Selecciona las propiedades del bean, bien directamenteo o designando el valor que viene desde un parámetro de la petición.
Sintaxis: <jsp:setProperty att=val*/>

Acción jsp:getProperty

Recupera y saca las propiedades del Bean.
Sintaxis: <jsp:getProperty name="propertyName" value="val"/>

Acción jsp:forward

Reenvía la petición a otra página.
Sintaxis: <jsp:forward page="relative URL"/>

Acción jsp:plugin

Genera etiquetas OBJECT o EMBED, apropiadas al tipo de navegador, pidiendo que se ejecute un applet usando el Java Plugin.
Sintaxis: <jsp:plugin attribute="value"*>..</jsp:plugin>

Directivas
Las directivas, se trata de palabras clave fundamentales a la hora de realizar nuestra pagina JSP, podemos diferencias dos directivas: Page, Include.

Directiva Include

Esta directiva se usa para incluir un fichero dentro de la propia pagina JSP en construcción. Se pueden añadir páginas JSP, HTML o ficheros de texto, incluso ficheros con código Java. Sobre todo hay que tener cuidado que los ficheros de texto que anexemos no incluyan las etiquetas <html>, </html>, <body>, o </body>, ya que podrian confundirse con las propias de nuestra página JSP. Hay dos tipos de Include, estatico o dinamico:

  • Estatico: Es un fichero que es analizado y su contenido es anexado a la página JSP resultante.
  • Dinamico: La página JSP realiza una solicitud a la URL indicada que envia de vuelta un resultado que es anexado a la página JSP.

La manera de realizar un include en una posicion especifica de una página JSP es:

<%@ include file="URL" %>

Directiva Page

Esta directiva se usa para definir las propiedades de la página JSP que estemos realizando. Esta directiva la podemos usar varias veces a lo largo de la pagina JSP, pero solo podemos asignar el valor de un atributo una vez por cada uno excepto para el atributo import; este es similar al import que usamos cuando hacemos programas en java. La directiva page la podemos poner en cualquier sitio de la pagina JSP, ya que su valor se aplicara a toda la pagina.

Síntaxis de Page

Los valores por defecto se muestran en negrita. Los corchetes ([...]) indican un término opcional. La barra vertical (|) proporciona una elección entre dos valores como true y false.
Sintaxis:
<%@ page 

  [ language="java"] 
  [ extends="package.class"] 
  [ import= "{ package.class|package.*}, ..." ] 
  [ session="true|false"] 
  [ buffer="none|8kb|sizekb"] 
  [ autoFlush="true|false"] 
  [ isThreadSafe="true|false"] 
  [ info="text"] 
  [ errorPage="URLrelativa"] 
  [ contentType="text/html; charset=ISO-8859-1"] 
  [ isErrorPage="true|false"]

%>

Atributos de la Directiva Page

language="java"
Este atributo define el lenguaje de script usado en los scriptles, declaraciones y expresiones en el fichero JSP y en cualquier fichero incluido. En JSP 1.0 el único lenguaje permitido es Java.

extends="package.class"
Este atributo especifica un nombre totalmente cualificado de una superclase que será extendida por la clase Java en el fichero JSP. Sun recomienda que usemos este atributo con cuidado, ya puede limitar la habilidad del motor del JSP a proporcionar la superclase especializada que mejora la calidad del fichero compilado.

import= "{ package.class | package.* }, ..."
Esta lista especifica una lista separada por comas de uno o más paquetes o clases que el fichero JSP debería importar. Las clases de los paquetes se ponen a disposición de los scriptlets, expresiones, declaraciones y etiquetas dentro del fichero JSP.
Como cabría esperar, el atributo import debe aparecer antes de cualquier etiqueta que refiera la clase importada. Para importar varios paquetes, podemos usar una lista separada por comas, más de una directiva import o una combinación de ambas.

session="true|false"
Todo cliente debe unirse a una sesión HTTP para poder usar una página JSP. Si el valor es true, el objeto session se refiere a la sesión actual o a una nueva sesión. Si el valor es false, no podemos utilizar el objeto session en el fichero JSP. El valor por defecto es true.

buffer="none|8kb|sizekb"
Este atributo especifica el tamaño del buffer en kilobytes que será usado por el objeto out para manejar la salida envíada desde la página JSP compilada hasta el navegador cliene. El valor por defecto es 8kb.

"true|false"
Este atributo especifica si la salida sería envíada o no cuando el buffer esté lleno. Por defecto, el valor es true, el buffer será descargado. Si especificamos false, se lanzará una excepción cuando el buffer se sobrecargue.

isThreadSafe="true|false"
Este atributo especifica si la seguridad de threads está implementada en el fichero JSP. El valor por defecto, true, significa que el motor puede enviar multiples solicitudes concurrentes a la página.
Si usamos el valor por defecto, varios threads pueden acceder a la página JSP. Por lo tanto, debemos sincronizar nuestros métodos para proporcionar seguridad de threads.
Con false, el motor JSP no envía solicitudes concurrentes a la página JSP. Probablemente no querremos forzar esta restricción en servidores de gran volumen porque puede dañar la habilidad del servidor de envíar nuestra página JSP a múltiples clientes.

info="text"
Este atributo nos permite especificar una cadena de texto que es incorporada en el página JSP compilada. Podemos recuperar el string más tarde con el método getServletInfo().

errorPage="URLrelativa"
Este atributo especifica un path a un fichero JSP al que este fichero JSP envía excepciones. Si el path empieza con una "/", el path es relativo al directorio raíz de documentos de la aplicación JSP y es resuelto por el servidor Web. Si no, el path es relativo al fichero JSP actual.

isErrorPage="true|false"
Este atributo especifica si el fichero JSP muestra una página de error. Si es true, podemos usar el objeto exception, que contiene una referencia a la excepción lanzada, en el fichero JSP. Si es false (el valor por defecto), significa que no podemos uar el objeto exception en el fichero JSP.

contentType="mimeType [ ; charset=characterSet ]" | "text/html;charset=ISO-8859-1"
Este atributo especifica el tipo MIME y la codificación de caracteres que use el fichero JSP cuando se envía la respuesta al cliente. Podemos usar cualquier tipo MIME o conjunto de caracteres que sean válidos para el motor JSP.

Variables predefinidas
Hay una serie de variables propias de las paginas JSP a las que se puede acceder directamente, ya que estan definidas en el servlet resultanteRequest: Esta variable es el HttpServletRequest del Servlet, de esta manera podemos tratar los parametros de la peticion realizada a la pagina JSP, las cabeceras y el tipo de peticion:
  • Response: Esta variable es el HttpServletResponse del Servlet y que esta asociado a la respuesta que la pagina JSP dara al cliente.
  • out: Es el PrintWriter que nos sirve para escribir en la respuesta que el daremos al cliente, es decir a la pagina resultante de la llamada a la pagina JSP. Sin embargo este PrintWriter no es uno normal, sino que tiene buffer y es llamado JSPWriter. Podemos ajustar el tamaño del buffer o desactivarlo usando la directiva page: <%@page buffer=["none|8kb|sizekb"]%>.
  • session: Es el HttpSession asociado a la peticion. Las sesiones se crean automaticamente, por eso esta variable siempre existe a no ser que con la directiva page lo desactivemos.
  • application: Este es el ServletContext obtenido mediante getServletConfig().getContext().
  • config: Este es el objeto ServletConfig para esta página.
  • pageContext: Esto representa una clase llamada PageContext que sirve para encapsular caracteristicas especificas del servidor, el significado de esto es que si accedemos a propiedades especificar del servidor mediante estas variables, entonces nuestro codigo funcionara en la mayoria de los motores JSP.
  • page: Es lo mismo que this en cualquier otra clase de java.
HTML Estático
En muchos casos, un gran porcentaje de nuestras páginas JSP consistirá en HTML estático, conocido como plantilla de texto. En casi todos lo aspectos, este HTML se parece al HTML normal, sigue la mismas reglas de sintaxis, y simplemente "pasa a través" del cliente por el servlet creado para manejar la página. No sólo el aspecto del HTML es normal, puede ser creado con cualquier herramienta que usemos para generar páginas Web. La única excepción a la regla de que "la plantilla de texto se pasa tal y como es" es que, si queremos tener "<%" en la salida, necesitamos poner "<\%" en la plantilla de texto.
Sobre esta página web
Esta página web ha sido diseñada por:
Pedro José García Manchón
y validada posteriormente. Valid XHTML 1.0 Transitional