42
Java Servlet Pages

JSP

Embed Size (px)

Citation preview

Page 1: JSP

Java Servlet Pages

Page 2: JSP

JSP, I

• Código HTML con código Java embebido y otras extensiones de HTML específicas de JSP.

• Ejemplo:<%@page contentType="text/html"%><%@page pageEncoding="UTF-8"%><%@taglib prefix=“c” uri=“http://java....”%><html> <head> <title> JSP </title> </head><body><h1> Hola, <%= request.getRemoteAddr() %></h1></body> </html>

Page 3: JSP

JSP, II

• Se guardan en el directorio raíz (público)

• URL estándar: ….jsp (web.xml)

• Se compilan la primera vez que se usan, generando código de un servlet.

• Al acceder a su URL, un servlet genérico busca la subclase de HttpServlet correspondiente a la página y la carga, compilándola previamente si hace falta.

Page 4: JSP

JSP, III

• El código Java embebido corresponde a un método del servlet generado

• Los errores en el código java de una pági-na JSP se detectan al compilar el servlet (la primera vez que se accede a la URL).

• Salvo que se programe otra cosa, los men-sajes de error aparecen en el navegador.

• Se pueden especificar en web.xml páginas de error a mostrar para errores específicos.

Page 5: JSP

Tipo de cláusulas de JSP

• <%@ … %>: Directivas (se ejecutan al compilar la página JSP)

• <%-- … %>: Comentarios

• <%! … %>: Declaraciones de atributos y métodos Java. Se definen en la clase asociada.

Page 6: JSP

Tipo de cláusulas de JSP, II

• <%= … %>: Inclusión de datos generados dinámicamente (expresiones; equivale a <% out.println(…) %>)

• <% … %>: Scriplets (código a ejecutar)

• Etiquetas JSP (ejemplo: <c:import url=www.ii.uam.es/>)

• Expresiones UEL (ejemplo: ${x+y})

Page 7: JSP

Tipos de directivas

• <%@ page contentType="text/html" %>

• <%@ page pageEncoding="UTF-8" %>

• <%@ page import="java.util.*", ... %>

• <%@ page errorPage="file_name" %>

• <%@ include file="hello.jsp" %>

Mejor utilizar la etiqueta c:import

Page 8: JSP

Objetos predefinidos enpáginas JSP (variables Java)

• request• response• pageContext

(es un contexto específico para páginas JSP)• session• application• out• config

(contexto del servlet)

Page 9: JSP

Importancia de la indentación

<...>

<% if (hello) { %>

<P>Hello, world

<% } else { %>

<P>Goodbye, world

<% } %>

<...>

Page 10: JSP

Ejercicios

• [SFJ1]: Escribir aplicaciones web con páginas JSP que se comportan como las de los ejercicios [SERV1], [SERV2] y [SERVCONT1].

• [OPJ] (opcional): Escribir una aplicación web formada por una página JSP que defina una calculadora con dos memorias numéricas.

Page 11: JSP

Lenguaje de expresiones (UEL)

• Es un lenguaje de script interpretado que integra el acceso a la información disponible en la página JSP

• Es una alternativa simplificada a la evaluación de expresiones Java

• Las expresiones UEL pueden aparecer como atributos de expresiones JSP (HTML, etiquetas) o como texto estático que forma parte del contenido de la página

Page 12: JSP

Lenguaje de expresiones, II

• Ejemplo:<img src=“${aplUrl+img1}”> ${title1}

• Las expresiones UEL se evalúan por un contenedor web en una máquina virtual Java.

• Los valores de las expresiones UEL son referencias a objetos Java que pueden ser JavaBeans, colecciones, enumeraciones o determinados objetos especiales (objetos implícitos) u objetos simples (números, Strings).

• Los resultados de la evaluación de las expresiones UEL se traducen al tipo apropiado (String en los dos ejemplos anteriores)

Page 13: JSP

Lenguaje de expresiones, III

• Se pueden definir variables UEL mediante la etiqueta c:set:

• Ejemplo:<c:set var=“x” scope=“session” value=“2”/>

• La evaluación de expresiones incluye un proceso de resolución (búsqueda) del tipo adecuado de objetos referidos.

• Para evaluar una expresión compuesta del tipo ${xx.yy} primero se evalúa la expresión simple asociada ${xx}.

Page 14: JSP

UEL:Evaluación de expresiones simples• Prioridades en la resolución de

expresiones simples:– Variables UEL– Objetos implícitos (ver próxima transparencia)– Atributos del ámbito de la página– Atributos del ámbito de la petición– Atributos del ámbito de la sesión– Atributos del ámbito de la aplicación– Null

Page 15: JSP

UEL: Objetos implícitos

• pageContext• initParam[“name”]• param[“name”]• paramValues[“name”]• header[“name”]

• headerValues[“name”]• cookie[“name”]• pageScope• requestScope• sessionScope• applicationScope

Page 16: JSP

UEL: Evaluación deexpresiones simples, II

Ejemplos:• ${session} se refiere en general a

pageContext.getAttribute(“session”)• ${request} se refiere en general a

pageContext.getAttribute(“request”)• ${response} se refiere en general a

pageContext.getAttribute(“response”)• ${userId} puede referirse a

session.getAttribute(“userId”)

Page 17: JSP

UEL: Evaluación de expresiones compuestas

• La expresión ${obj.atr} equivale a ${obj[“atr”]}.• Resolución de expresiones compuestas de la

forma ${obj.atr}:– Si ${obj} es un contexto: obj.getAttribute(“atr”)– Si ${obj} es un JavaBean: obj.getAtr()

• Mecanismo de resolución en la evaluación de expresiones UEL: Resolvers y reflexión.

• La resolución de expresiones se efectúa solamente la primera vez que se evalúan.

Page 18: JSP

Expresiones UEL:Tipos de evaluación

• La evaluación de expresiones UEL puede ser inmediata (${ … }) o diferida (#{ … }).

• La evaluación diferida se aplica en casos especiales:– Asignación de valores a variables:

<c:set var=“#{userId}” value=“cacatua”>– Asignación de atributos a componentes

gráficas (JSF)– Valores relacionados con bases de datos

Page 19: JSP

Ejercicio

• [ACC1] Obligatorio: Aplicación web con una página JSP que muestra una lista HTML con las horas de acceso dentro de la misma sesión, y un botón “Acceder otra vez”.

Page 20: JSP

Depuración

• El carácter dinámico de las páginas JSP y el hecho de que generen un servlet que se compila tras el despliegue de la aplicación dificultan su depuración.

• Se puede compilar directamente una página JSP para generar el servlet correspondiente

• Se puede ver el código Java del servlet (durante la ejecución de la aplicación).

Page 21: JSP

Depuración, II

• Se pueden poner puntos de parada en la página JSP (no en el código del servlet).

• Se puede hacer una llamada a una página JSP determinada o a un servlet con los parámetros deseados.

Page 22: JSP

Depuración, III

• Se puede monitorizar la cadena de peticiones http realizadas dentro de una aplicación mediante el Http Monitor, y explorar su estado en cada paso.

• Se puede revisar el log (registro de eventos) del servidor para ver detalles acerca de los errores y de la ejecución de la aplicación.

Page 23: JSP

Biblioteca de etiquetas: JSTL

• Sintaxis tipo XML• Se traducen en invocaciones a código Java• Ejemplo:

<jsp:useBean id="help“ scope="request" class="ConverterBean" />

// scope: request | session | application// Proporciona acceso a variable en Java

• Se necesita una directiva para hacerlas accesibles:<%@ taglib uri="http://java.sun.com/jsp/jstl/core"

prefix="c" %>

Page 24: JSP

JSTL: Ejemplos

• El ejemplo de la transparencia anterior,

<jsp:useBean id="help“ scope="request"

class="ConverterBean" />

se traduce a

<% request.setAttribute(“help”,

new ConverterBean() %>

salvo optimizaciones.

Page 25: JSP

JSTL: Ejemplos, II

• <jsp:setProperty name="limite" property="valor" value="10" />

se traduce a

<% limite.setValor(10); %>

• <c:import url="next.jsp" />

se traduce a

<% response.sendRedirect(“next.jsp”); %>

Page 26: JSP

Etiquetas estándar JSP

• Tipos: core (c), XML (x), bases de datos (sql), internacionalización (fmt), funciones (fn)

• Hay que incluir una directiva por cada tipo que se utilice.

• Información asociada: Variables UEL, guardadas en atributos (principal: var=”…”)– Ejemplo:

<c:forEach var="item“items="${sessionScope.cart.items}">

…</c:forEach>

Page 27: JSP

Etiquetas estándar JSP: Core

• Variables:– <c:set var="bookId" value="${book.id}"/>– <c:remove var=“bookId”/>

Atributo opcional en ambos casos: scope

• Control de flujo:– <c:forEach var=“book” items=“${booksList}”>

<tr><td>${book.title}</td></tr>

<c:set var=“total” value=“${total+book.price}”/>

</c:forEach>

Page 28: JSP

Etiquetas estándar JSP: Core, II

• Control de flujo, II:– <c:if test=“${price<=total}”>

<h1>Pedido:</h1> ${price}<c:set var=“priceOK” value=“true”/>

</c:if>– <c:forTokens var=“token”

items=“lunes, martes, miercoles”> <tr><td>token</td></tr>

</c:forTokens>

Page 29: JSP

Etiquetas estándar JSP: Core, III

• Control de flujo, III:– <c:choose>

<c:when test=“${valor1<valor2}”>

${valor1}

</c:when>

<c:otherwise>

${valor2}

</c:choose>

Page 30: JSP

Etiquetas estándar JSP: Core, IV

• URL:– <c:import url="/books.xml" var=“bks" />– <c:redirect url=“/books.xml”/>

Page 31: JSP

Otras etiquetas estándar JSP

• XML:– Core– Control de flujo– Transformación

Ejemplo: x:parse

• Internacionalización:– Locale– Mensajes– Formato de números y fechas

Page 32: JSP

Etiquetas estándar JSP:Bases de datos

<sql:setDataSource var="data“

driver=“com.mysql.jdbc.Driver“

url="jdbc:mysql://localhost/db?user=root“

scope=“application”/>

• En la práctica el driver y la url deberían ser parámetros de la aplicación, especificados en web.xml

Page 33: JSP

Etiquetas estándar JSP:Bases de datos, II

<sql:query var="books“

dataSource="${data}">

SELECT *

from public.books

WHERE id = ?

<sql:param value="${bookId}" />

</sql:query>

Page 34: JSP

Etiquetas estándar JSP:Bases de datos, III

<table>

<c:forEach var=“book“ items="${books.rows}">

<tr>

<td><c:out value="${book.author}" /></td>

<td><c:out value="${book.title}" /></td>

</tr>

</c:forEach>

</table>

Page 35: JSP

Etiquetas estándar JSP:Bases de datos, IV

<sql:transaction dataSource="${dataSource}"><sql:update>

UPDATE accountSET Balance = Balance - ?WHERE accountNo = ?

<sql:param value="${transferAmount}"/><sql:param value="${accountFrom}"/>

</sql:update></sql:transaction>

Page 36: JSP

Etiquetas estándar JSP: Funciones

• Pueden aparecer en expresiones EL

• Colecciones:– fn:length

• Cadenas de caracteres:– fn:toUpperCase– fn:toLowerCase– …

Page 37: JSP

Documentación JSTL

Page 38: JSP

Ejercicio obligatorio

• [PyCE1]: Aplicación web que permite acceder a cuatro páginas:– La primera muestra en una tabla de veinte en

veinte los nombres de personas y sus correos electrónicos, contenidos en un fichero fijo. También permite borrar los datos de personas seleccionadas de la tabla.

El fichero contendrá en cada línea el nombre y la dirección de correo de una persona, separados por una coma.

Page 39: JSP

Ejercicio obligatorio, II

– La segunda página, a la que se accede tras seleccionar una fila de la tabla anterior y pulsar sobre el botón “Modificar”, permite modificar los datos de la persona previamente seleccionada.

– La tercera página, a la que se accede tras pulsar sobre el botón “Nuevo”, permite añadir una persona nueva al fichero.

– A la cuarta página se accede tras pulsar sobre el botón “Buscar”, y permite buscar el correo electrónico correspondiente a una persona y modificarlo.

Page 40: JSP

Ejercicio optativo

• [FAV] Optativo: Aplicación web que permite mostrar páginas web arbitrarias y gestionar una lista de URLs correspondientes a las páginas que se desee entre las anteriores (favoritos). La lista de URLs favoritas se guardará en un fichero fijo.

Page 41: JSP

Arquitectura Modelo Vista Controlador (MVC)

Controlador (eventos)

Servlets

Vista

JSP

Modelo (datos)

Beans

Interfaz capa web - cliente

Capa de negocios

Recursos, servicios,

etc

Page 42: JSP

Ejercicios

• [PyCE2] Obligatorio: Aplicación web (servlets y páginas jsp) que utiliza la arquitectura MVC para resolver el ejercicio PyCE1 anterior.

• [UTIL] Voluntario: Extraer de los ejercicios anteriores clases y diseños útiles para otras aplicaciones.