Sintaxis de las páginas JSP
En este apéndice vamos a ver los diferentes tipos de elementos de las páginas JSP versión 2.0. Para ello vamos a tener en cuenta cuenta la siguiente nomenclatura
| Texto normal = es requerido | | = operador OR | [ ] = opcional | + = se puede repetir |
| negrita = valor por defecto | ' ' = literal | { } = opción requerida | ( ) = agrupación |
| itálica = texto que tiene que escribir el creador de la página JSP | ^ = negación |
... = lista de elementos | - = un rango |
Se pueden crear páginas JSP con sintaxis JSP o con sintaxis XML.
Elementos de código (Scripting elements)
El contenedor Web está capacitado para procesar cualquier lenguage de script que sepa interactuar con objetos Java
Los elementos de código permiten crear fragmentos de código Java que más tarde formará parte del Servlet que se crea a partir de la página JSP.
Los elementos de código se suelen utilizar para
Muchas de las tareas que realizan los elementos de código tendrían que ser eliminadas en favor de las librerías de etiquetas personalizadas (custom tags libraries) o en su defecto librerías de etiquetas JSP estándares (JSP Standard Tag Library, JSTL)
| Elementos de código (scriptlets) | |||
| Sintaxis | |||
| Descripción | JSP | XML | |
| Código | El fragmento de código Java que se encuentra dentro de este elemento se ejecuta en los métodos doGet(...) o doPost() del Servlet | <% fragmento de código %> | <jsp:scriptlet> fragmento de código </jsp:scriptlet> |
| Expresión | Se evalúa y el resultado se muestra por la salida. |
<%= expresión %> | <jsp:expression> expresión </jsp:expression> |
| Declaración | El código Java se inserta en el cuerpo de la Clase del Servlet y fuera de los métodos doGet(...) o doPost(). Se utiliza para declarar variables de instáncia, métodos y Clases. |
<%! declaración; [ declaración; ]+ ... %> | <jsp:declaratio> declaration [ declaration; ]+ ... </jsp:declaratio> |
Directivas
Permiten controlar la configuración general del Servlet que se crea a partir del fichero con extensión .jsp
| Directivas | |||
| Sintaxis | |||
| Descripción | JSP | XML | |
| Página | Son indicaciones que se dan al Contenedor Web acerca de los parámetros generales de ejecución para esa página. |
<%@ 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" ] [ isErrorPage="true | false" ] [ contentType="{mimeType [ ; charset=characterSet ] | text/html ; charset=ISO-8859-1}" ] [ pageEncoding="{characterSet | ISO-8859-1}" ] [ isELIgnored="true | false" ] %> |
<jsp:directive.page listaAttrDirectivasDePágina /> Donde listaAttrDirectivasDePágina se refiere a la lista de la columna JSP. |
| Inclusión | Se incluye un fichero en el momento en que la página JSP se transforma en un Servlet contenido en un fichero con extensión .java
Ventajas: en tiempo de ejecución, el Contenedor Web no tiene que hacer ningún trabajo extra, por que el fichero ya ha sido incluido con anterioridad Desventajas: si el recurso externo cambia, el Servlet asociado al JSP no es modificado cualquier variable o método definidas en el JSP principal, serán acccesibles desde el fichero incluido. |
<%@ include file="URLrelativa" %> | <jsp:directive.include file="URLrelativa" /> |
| Taglib | Define el Tag Library Descriptor (TLD, Descriptior de Librería de Etiquetas) y su prefijo para Custom Tags (Etiquetas Personalizadas) utilizadas en la página JSP. |
<%@ taglib {uri="URI" | tagdir="/WEB-INF/tlds[/subdir]+" } prefix="prefijoEtiqueta" %> |
Se incluye en el elemento <jsp:root> <cualquierEtiqueta xmlns:prefix="{uri | urn:jsptld:path | urn:jsptagdir:/WEB-INF/tags[/subdir]+ }" > Ejemplo: <prefijo1:etiqueta1 xmlns:my="urn:jsptld:/WEB-INF/tlds/my.tld" /> |
Elementos estándares
Se corresponden con Objetos que pueden ser utilizados para llevar a cabo determinadas funcionalidades.
| Elementos estándares | |||
| Sintaxis | |||
| Descripción | JSP | XML | |
| <jsp: useBean> |
Se utiliza para localizar o instanciar un JavaBean con un nombre y ámbito (scope) específico. |
<jsp:useBean id="nombreInstanciaJBean" scope="page | request | session | application" { class="package.class" [ type="package.class" ] | beanName="{package.class | '${' Expresión '}' | <%= expresión %>}" type="package.class" | type="package.class" } { /> | > otros elementos </jsp:useBean> } |
<jsp:useBean id="nombreInstanciaJBean" scope="page | request | session | application" { class="package.class" [ type="package.class" ] | beanName="{package.class | '${' Expresión '}' | %= expresión %}" type="package.class" | type="package.class" } { /> | >otros elementos </jsp:useBean> } |
| <jsp: getProperty > |
se utiliza para obtener el valor de la propiedad o variable de instancia de un JavaBean. El valor se inserta en el resultado. |
<jsp:getProperty name="nombreInstanciaJavaBean" property="propertyName" /> |
Igual que la sintaxis JSP |
| <jsp: include > |
Se incluye un fichero cada vez que el navegador solicita una página JSP. Es decir, el JSP solicitado se para y vacía su stream de salida. Entonces llama al fichero que tiene que incluir e inserta la salida en el stream de salida. Cuando el fichero externo ha finalizado, entonces el Contenedor Web retoma el envio del JSP solicitado Ventajas: si el recurso externo se modifica, automáticamente se envía al Navegador la última versión del mencionado recurso. Desventajas: en tiempo de ejecución, el Contenedor Web tiene que insertar el recurso externo. |
<jsp:include page="{URLrelativa | '${'Expresión'}' | <%= expresión %>}" [ flush="true | false" ] { /> | > [ <jsp:param name="nombreParámetro" value="{valorParámetro | '${' Expresión '}' | <%= expresión %>}" /> ] + |
<jsp:include page="{URLrelativa | '${' Expresión '}' | %= expresión %}" [ flush="true | false" ] { /> | > [ <jsp:param name="nombreParámetro" value="{valorParámetro |'${' Expresión '}' | %= expresión %}" /> ] + |
| <jsp: forward > |
Se utiliza para reenviar la petición a otra página JSP o Servlet. | <jsp:forward page="{URLrelativa | '${' Expresión'}' | <%= expression %> }" { /> | > [ <jsp:param name="nombreParámetro" value="{valorParámetro | '${' Expresión '}' | <%= expresión %>}" } /> ] + </jsp:forward> } |
<jsp:forward page="{URLrelativa | '${' Expresión'}' | <%= expression %> }" { /> | > [ <jsp:param name="nombreParámetro" value="{valorParámetro | '${' Expresión '}' | %= expresión %}" } /> ] + </jsp:forward> } |
| <jsp: root > |
Representa al elemento raíz de la página JSP. Indica al Contenedor Web que la página JSP está escrita con sintaxis XML. Define a través de atributos espacios de nombre (namespaces) para localizar librerías de etiquetas (tag libraries). |
No tiene equivalente. | <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" [xmlns:taglibPrefix="URI"]+ ... version="2.0"> otros elementos </jsp:root> |
Objetos
Las páginas JSP cuentan con una serie de Objetos implícitos. De hecho, son los Objetos que se manejan en un Servlet.
| Objetos | |||
| Clase | Ámbito | Métodos | |
| request |
Subclase de javax.servlet.ServletRequest | Request | getAttribute, getParameter, getParameterNames, getParameterValues, setAttribute |
| session |
javax.servlet.http.HttpSession |
Session | getAttribute, getId, setAttribute |
| application | javax.servlet.ServletContext |
Application | getAttribute, getMimeType, getRealPath, setAttribute |
| out | javax.servlet.jsp.JspWriter | Page | clear, clearBuffer, flush, getBufferSize, getRemaining |
Expresiones EL (Expression Language)
| Expresiones EL (Expression Language) | |||
| Sintaxis | |||
| Descripción | JSP | XML | |
| Expresión EL | Contiene una expresión en el JSP Expression Language (EL) | ${ Expresión } | Igual que la sintaxis JSP |
Comentarios
El Contenedor Web prescinde de los comentarios cuando la página se convierte en un Servlet
| Comentarios | |||
| Sintaxis | |||
| Descripción | JSP | XML | |
| Comentario | Los comentarios pueden incluir cualquier literal que no sea --%> or --> si el comentario está realizado en una sintaxis XML. | <%-- comentario --%> | <!--comentario--> |
Un resumen completo editado por Sun sobre la sintaxis de las páginas JSP lo podemos encontrar en los documentos