Las directivas influyen en la estructura que tendrá el servlet generado a partir de la página JSP. Hay tres tipos de directivas:
page
: tiene varios usos: importar clases de Java, fijar el
tipo MIME de la respuesta, controlar el buffer de salida,...include
: sirve para incluir código en la página
antes de que se realice la compilación del JSP.taglib
: se emplea cuando el JSP hace uso de etiquetas definidas
por el usuario.El formato genérico de una directiva es:
<%@ directiva atributo="valor" %>
algunas directivas admiten más de un atributo.
page
La tabla 2 recoge los distintos atributos que admite la directiva page
y su significado.
Atributo | Significado | Ejemplo |
---|---|---|
import |
el equivalente a una sentencia import de Java |
<%@ page import="java.util.Date" %> |
contentType |
genera una cabecera HTTP Content-Type |
<%@ page contentType="text/plain" %> |
isThreadSafe |
si es false , el servlet generado implementará
el interface SingleThreadModel (ún único hilo
para todas las peticiones). Por defecto, el valor es true . |
|
session |
Si es false , no se creará un objeto session
de manera automática. Por defecto, es true . |
|
buffer |
Define el tamaño del buffer para la salida (en
kb), o none si no se desea buffer. Su existencia permite
generar cabeceras HTTP o códigos de estado aunque ya se haya comenzado
a escribir la salida. |
<%@ page buffer="64kb" %> |
autoflush |
Si es true (valor por defecto), el buffer se envía automáticamente a la salida al llenarse. Si es false , al llenarse el buffer se genera una excepción. |
|
extends |
Permite especificar de qué clase debe descender el servlet generado a partir de la página JSP. No es habitual cambiarlo. | |
info |
define una cadena que puede obtenerse a través del método getServletInfo |
<%@ page info="carro de la compra" %> |
errorPage |
especifica la página JSP que debe procesar los errores generados y no capturados en la actual. | <%@ page errorPage="error.jsp" %> |
isErrorPage |
Si es true , indica que la página actúa como página de error para otro JSP. El valor por defecto es false . |
|
language |
Permite especificar el lenguaje de programación usado en el JSP. En la práctica, el lenguaje siempre es Java, por lo que esta directiva no se usa. | |
pageEncoding |
define el juego de caracteres que usa la página. El valor por defecto es ISO-8859-1 . |
En JSP existen varios mecanismos para incluir elementos externos en la página actual o redirigir la petición hacia otra página
include
permite insertar código en la página antes de que ésta se transforme en un servlet. De este modo se pueden reutilizar fragmentos de código JSP o HTML. <jsp:include>
<jsp:plugin>
permite incluir applets que hagan uso de Java 2. <jsp:forward>
sirve para redirigir la petición a otra página JSPinclude
Es el equivalente al #include
del lenguaje C. su sintaxis es:
<% include file="fichero" %>
Como el código se incluye en el servlet generado, los fragmentos de código incluidos pueden tener efecto sobre la página actual. Así, se puede utilizar esta directiva para definir constantes, generar cabeceras HTTP, ...
El problema de esta directiva es que el estándar no exige que el contenedor JSP detecte de manera automática los cambios en los ficheros incluidos, de manera que si cambia uno de ellos puede ser necesario forzar la recompilación de las páginas JSP que los incluyan.
La especificación JSP recomienda que si la página incluida no es una página JSP válida por sí sola (por ejemplo, porque utiliza variables que se confía que se hayan declarado previamente) se utilice la extensión "estándar" .jspf
(JSP fragment) y se coloque en un directorio no público del contenedor JSP (por ejemplo, WEB-INF, que no es accesible desde el cliente, pero sí desde la directiva).
<jsp:include>
Esta acción incluye en una página la salida generada por otra perteneciente a la misma aplicación web. La petición se redirige a la página incluida, y la respuesta que genera se incluye en la generada por la principal. Su sintaxis es:
<jsp:include page="URL relativa" flush="true|false"/>
El atributo flush
especifica si el flujo de salida de la página principal debería ser enviado al cliente antes de enviar el de la página incluida. En JSP 1.2 este atributo es optativo, y su valor por defecto es false
. En JSP 1.1 es obligatorio y siempre debía valer true
(el forzar el vaciado de buffer era problemático porque una vez que ha sucedido esto no se pueden hacer redirecciones ni ir a páginas de error, ya que ya se han terminado de escribir las cabeceras).
Esta acción presenta la ventaja sobre la directiva del mismo nombre de que cambios en la página incluida no obligan a recompilar la "principal". No obstante, la página incluida solo tiene acceso al JspWriter
de la "principal" y no puede generar cabeceras (por ejemplo, no puede crear cookies).
Por defecto, la petición que se le pasa a la página incluida es la original, pero se le pueden agregar parámetros adicionales, mediante la etiqueta jsp:param
. Por ejemplo:
<jsp:include page="cabecera.jsp"> <jsp:param name="color" value="YELLOW" /> </jsp:include>
<jsp:plugin>
Esta acción sirve para incluir, de manera portable e independiente del navegador, applets que utilicen alguna librería de Java 2 (Swing, colecciones, Java 2D, ...), ya que las máquinas virtuales Java distribuidas con algunos navegadores relativamente antiguos (Explorer 5.x, Netscape 4.x,...) son de una versión anterior a Java 2.
<jsp:forward>
Esta acción se utiliza para redirigir la petición hacia otra página JSP que esté en la misma aplicación web que la actual. Su sintaxis básica es:
<jsp:forward page="principal.jsp"/>La salida generada hasta el momento por la página actual se descarta (se borra el buffer). En caso de que no se utilizara buffer de salida, se produciría una excepción.
Al igual que en el caso de <jsp:include>
, se pueden añadir parámetros a la petición original para que los reciba la nueva página JSP:
<jsp:forward page="principal.jsp"> <jsp:param name="privilegios" value="root" /> </jsp:forward>