07 - JSP
07 - JSP
07 - JSP
CON JEE
v2.0
Objetivos
Introducción general.
Conocer 3 tipos de elementos:
Scripts JSP.
Directivas JSP.
Acciones JSP.
EL: Simple Expression Language.
Páginas de errores.
v1.1
INTRODUCCIÓN GENERAL
1. Introducción
2. Elementos JSP
a) Scripts
b) Directivas
c) Acciones
v1.1
Introducción
Ventajas:
Separación de datos estáticos/dinámicos.
Independencia de formato/plataforma.
Sencillez (sabiendo servlets)
v1.1
Introducción
v1.1
Introducción
JSP 2.0
Algunas nuevas características de JSP 2.0
frente a 1.2 orientadas a simplificar su
desarrollo son:
Simple Expression Language (EL)
Fragmentos JSP.
Ficheros de Tags.
Manejadores de Etiquetas Simplificados.
v1.1
Elementos JSP
Elementos de Script
v1.1
Elementos JSP
Directivas JSP
v1.1
Elementos JSP
<li><B>JSP Scriptlet.</B><BR>
<% out.println("Data adjunta al GET: " +
request.getQueryString()); %>
v1.1
Elementos JSP
v1.1
Elementos JSP
Acciones JSP
v1.1
SCRIPTS JSP
1. Expresiones
2. Scriptlets
3. Declaraciones
v1.1
Scripts JSP
Sintaxis:
<%= <JavaExpression> %>
Expresiones (2/2)
Se tiene acceso a variables:
request, el HttpServletRequest
response, el HttpServletResponse
session, el HttpSession asociado con el
request (si existe)
out, el PrintWriter (una versión con
buffer del tipo JspWriter) usada para enviar
la salida al cliente.
Ejemplo:
Your hostname: <%=
request.getRemoteHost() %>
v1.1
Scripts JSP: Expresiones
Un ejemplo simple
La parte de
código que se
evalúa en el
Servidor.
v1.1
Scripts JSP
Scriptlets JSP
Sintaxis:
<% <JavaStatement> %>
Sintaxis
Características:
Se insertan dentro del método service() del
servlet.
Tienen acceso a las mismas variables que las
expresiones.
Sintaxis
La sentencia:
<% if (Math.random() < 0.5) { %>
Have a <B>nice</B> day!
<% } else { %>
Have a <B>lousy</B> day!
<% } %>
Se traducirá en:
if (Math.random() < 0.5) {
out.println("Have a <B>nice</B>
day!");}
else {
out.println("Have a <B>lousy</B>
day!");}
v1.1
Scripts JSP: Declaraciones
Sintaxis y uso
Sintaxis: <%! <JavaStatement> %>
Conversión:
Se insertan en el cuerpo de la clase del servlet,
fuera de cualquier método existente,
como la declaración de un miembro Java.
v1.1
Declaraciones
Sintaxis XML
Como con los scriptlet, si queremos usar
los caracteres "%>", ponemos "%\>".
El equivalente XML de <%! Código %>
es:
<jsp:declaration>
<JavaMemberDeclaration>
</jsp:declaration>
v1.1
DIRECTIVAS JSP <%@
... %>
1. Directiva page.
2. Directiva include.
v1.1
Directivas JSP
Resumen general
v1.1
Directivas JSP
v1.1
Directivas JSP
v1.1
Directivas JSP
v1.1
Directiva: page
Tipos de media:
ContentType = "MIME-Type" o contentType
= "MIME-Type; charset = Character-Set"
Esto especifica el tipo MIME de la salida.
El valor por defecto es text/html. Tiene el mismo
valor que el scriptlet usando
“response.setContentType”.
v1.1
Directiva: page
Sesión:
session="true|false".
Un valor de true (por defecto) indica que la variable
predefinida session (del tipo HttpSession) debería unirse a
la sesión existente si existe una, si no existe se debería crear
una nueva sesión para unirla.
Un valor de false indica que no se usarán sesiones, y los
intentos de acceder a la variable session resultarán en errores
en el momento en que la página JSP sea traducida a un servlet.
v1.1
Directiva: page
Autoflush:
autoflush="true|false".
Un valor de true (por defecto) indica que el buffer
debería descargase cuando esté lleno.
Un valor de false, raramente utilizado, indica que se
debe lanzar una excepción cuando el buffer se
sobrecargue.
Un valor de false es ilegal cuando usamos
buffer="none".
v1.1
Directiva: page
Info
info="message".
Define un string que puede usarse para ser recuperado
mediante el método getServletInfo.
ErrorPage:
errorPage="url".
Especifica una página JSP que se debería procesar si se
lanzará cualquier Throwable pero no fuera capturado en la
página actual.
v1.1
Directiva: page
Lenguage:
language="java".
En algunos momentos, esto está pensado para
especificar el lenguaje a utilizar.
Por ahora, no debemos preocuparnos por él ya
que java es tanto el valor por defecto como la
única opción legal.
v1.1
DIRECTIVA PAGE <%@
INCLUDE … %>
Directivas JSP
v1.1
Directiva: include
Atributos: file
Permite incluir ficheros en el momento en
que la página JSP es traducida a un servlet.
<%@ include file=“<urlRelativa>” %>
Uso típico:
Barras de navegación.
Encabezados / Pie de páginas.
v1.1
ACCIONES JSP
1. Variables predefinidas
v1.1
VARIABLES PREDEFINIDAS
Acciones JSP
v1.1
Variables predefinidas
La petición: request
Nombre de la variable: request .
La respuesta: response
Nombre: response.
Este es el HttpServletResponse
asociado con la respuesta al cliente.
La salida: out
Nombre: out.
Este es el PrintWriter usado para enviar la salida
al cliente.
La sesión: session
Nombre: session.
Este es el objeto HttpSession asociado con la
petición.
v1.1
Varios: application, Config &
Variables predefinidas
PageContext
Nombre: application.
El ServletContext obtenido mediante el método
getServletConfig().getContext().
Nombre: config.
El objeto ServletConfig.
Nombre: pageContext.
JSP presenta una nueva clase llamada PageContext para encapsular
características de uso específicas del servidor como JspWriters de
alto rendimiento.
La idea es que si tenemos acceso a ellas a través de esta clase en vez
directamente, nuestro código seguirá funcionando en motores
servlet/JSP "normales".
Nombre: page.
Esto es sólo un sinónimo de this, y no es muy útil en Java.
Fue creado como situación para el día que los lenguajes de script
puedan incluir otros lenguajes distintos de Java.
v1.1
ACCIONES
Acciones JSP
v1.1
Acciones
Conceptos Generales
Usan construcciones de sintaxis XML
para controlar el comportamiento del
motor de Servlets.
v1.1
Sintaxis
Acción Include
Acción jsp:include
Ejemplo:
<jsp:include page="relative URL"
flush="true"/>
Acciones: jsp:useBean
Ejemplo de uso:
<jsp:useBean att=val*/>
<jsp:useBean att=val*>
...
</jsp:useBean>
Acción jsp:getProperty
Ejemplo
<jsp:getProperty name="propertyName"
value="val"/>
Recupera y saca las propiedades del Bean.
v1.1
Sintaxis
Acción jsp:plugin
Ejemplo:
<jsp:plugin attribute="value"*> ...
</jsp:plugin>
Genera etiquetas OBJECT o EMBED, apropiadas
al tipo de navegador, pidiendo que se ejecute un
applet usando el Java Plugin.
v1.1
Acciones
include
jsp:include nos permite insertar ficheros en
una página que está siendo generada.
Sintaxis
jsp:useBean permite cargar y utilizar un JavaBean en
la página JSP y así utilizar la reusabilidad de las clases
Java sin sacrificar la conveniencia de añadir JSP sobre
servlets solitarios.
<jsp:useBean id="name" class="package.class" />
v1.1
Acciones: useBean
Uso
La forma más sencilla de usar un Bean es usar:
<jsp:useBean id="name" class="package.class" />
Pero si hacemos
<jsp:useBean ...> Body </jsp:useBean>
La porción Body sólo se debería ejecutar
cuando el bean es instanciado por primera vez,
no cuando un bean existente se encuentre y se
utilice.
No todas las sentencias jsp:useBean
resultan en la instanciación de un Bean.
v1.1
Acciones: useBean
Atributos
id
Da un nombre a la variable que referencia al bean.
Se usará un objeto bean anterior en lugar de instanciar uno nuevo si se
puede encontrar uno con el mismo id y scope.
class
Designa el nombre completo de la clase del bean.
scope
Indica el contexto en el que el bean debería estar disponible.
Hay cuatro posibles valores: page, request, session, y
application.
type
Especifica el tipo de la variable a la que se referirá el objeto.
beanName
Da el nombre del bean, como lo suministraríamos en el método
instantiate de Beans.
Esta permitido suministrar un type y un beanName, y omitir el atributo
class.
v1.1
Acciones: setProperty
Uso
Se utiliza para obtener valores de propiedades
de los beans que se han referenciado
anteriormente.
2 usos:
Después de un useBean.
<jsp:useBean id="myName" ... />
...
<jsp:setProperty name="myName“
property="someProperty" ... />
Se ejecuta siempre que haya una solicitud.
v1.1
Acciones: setProperty
Uso (2/2)
Dentro de un useBean
<jsp:useBean id="myName“ ... >
...
<jsp:setProperty name="myName"
property="someProperty" ... />
</jsp:useBean>
v1.1
Acciones: setProperty
Atributos (1/2)
name
Este atributo requerido designa el bean cuya propiedad va a ser
seleccionada. El elemento jsp:useBean debe aparecer antes del
elemento jsp:setProperty.
property
Este atributo requerido indica la propiedad que queremos seleccionar.
Sin embargo, hay un caso especial: un valor de "*" significa que todos
los parámetros de la petición cuyos nombres correspondan con
nombres de propiedades del Bean serán pasados a los métodos de
selección apropiados.
value
Este atributo opcional especifica el valor para la propiedad. Los valores
string son convertidos automáticamente a lo que corresponda mediante
el método estándard valueOf. No se pueden usar value y param
juntos, pero si está permitido no usar ninguna.
v1.1
Acciones: setProperty
Atributos (2/2)
param
Este parámetro opcional designa el parámetro de la petición del que se
debería derivar la propiedad.
Si la petición actual no tiene dicho parámetro, no se hace nada: el
sistema no pasa null al método seleccionador de la propiedad.
Así, podemos dejar que el bean suministre los valores por defecto,
sobrescribiéndolos sólo cuando el parámetro dice que lo haga.
<jsp:setProperty
name="orderBean“
property="numberOfItems"
param="numItems" />
Si no indicamos nada, el servidor revisa todos los parámetros de la
petición e intenta encontrar alguno que concuerde con la propiedad
indicada.
v1.1
EL: SIMPLE EXPRESSION
LANGUAGE
v1.1
Simple Expression Language (SLE)
Introducción
El Simple Expression Language está inspirada en los
lenguajes de expresiones de ECMAScript y XPath.
Simplifican el uso de expresiones en JSPs.
Permite la ejecución de expresiones fuera de los
elementos de scripting de JSP
Fue introducida con JSTL 1.0 como un mecanismo
alternativo al uso de expresiones en Java para asignar
valores a atributos
Desde JSP 2.0 el Servlet Container entiende
expresiones en EL.
EL es mucho más tolerante sobre variables sin valor
(null) y realiza conversiones automáticas de datos.
Se puede habilitar (por defecto) o deshabilitar el uso
de expresiones EL:
<%@ page isScriptingEnabled="true|false"
isELEnabled="true|false"%>
v1.1
Sintaxis EL
Expresiones: literales
Una expresión en EL contiene variables y operadores
${expr}, donde expr es:
Literales:
true o false
Integer
Floating point
String
null
Ejemplos:
${false} <%-- evaluates to false --%>
${3*8}
v1.1
Sintaxis EL
Expresiones: operadores
${expr}, donde expr es:
Operadores:
Aritméticos: +, -, *, /, div, %, mod, -
Lógicos: and, &&, or, ||, !, not
Relacionales: ==, eq, !=, ne, <, lt, <, gt, <=, le, >=, ge
Vacío, empty, valida si una variable es null o una colección no
tiene elementos.
Llamadas a función, donde func es el nombre de la función y
args es 0 o más argumentos separados por comas.
Condicional: A ? B: C, como en C y Java
Ejemplos:
${ (6 * 5) + 5 } <%-- evalua a 35 --%>
${empty name}
v1.1
Sintaxis EL
v1.1
Sintaxis EL
v1.1
Ejemplos EL
Operador ?
<select name="artist">
<option value="1” ${param.artist == 1 ?
'selected' : ''}>
Vanessa Paradis
</option>
v1.1
PÁGINAS DE ERRORES
v1.1
Páginas de Error JSP
v1.1
Páginas de Error JSP
Ejemplo de Uso
<%@ page isErrorPage="true" contentType="text/html" %>
<%@ taglib prefix="log"
uri="http://jakarta.apache.org/taglibs/log-1.0" %>
v1.1
Páginas de Error JSP
<error-page>
<exception-code>500</exception-code>
<location>/error.jsp</location>
</error-page>
...
v1.1
web.xml en JSP 2.0
Aunque se sigue utilizando web.xml hay dos
diferencias principales:
Las reglas de web.xml están definidas en un XML Schema
Las configuraciones específicas de JSP han sido movidas a un
nuevo elemento XML
Usar Schemas en vez de DTDs nos permite colocar los
elementos XML de primer nivel en cualquier orden y
realizar aún mas verificaciones sobre la sintaxis de
web.xml
Todos los elementos específicos a la configuración de
un JSP se encuentran agrupados dentro del nuevo
elemento <jsp-config>.
v1.1
Elemento jsp-config
Su subelemento <jsp-property-group>
es muy interesante.
Permite aplicar configuraciones a un grupo
de JSPs que conforman con un patrón de url
específico
...
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-
invalid>
</jsp-property-group>
</jsp-config>
...
v1.1
Elemento jsp-config
Elemento Descripción
<scripting-
invalid> Si es true no se pueden introducir scriplets en el JSP.
v1.1
EJERCICIO PROPUESTO
v1.1
Ejercicio práctico JSP
Crear una aplicación web empresarial
J2EE (basta con el WAR) para
implementar una aplicación que permita
convertir de una moneda a otra.
Debe aceptar como input una cantidad de
pesos chilenos y desplegarlo en:
Dólares
Euros
UF’s
v1.1
PREGUNTAS?
v1.1