Introducción n a Java EE: Departamento Lenguajes escuela técnica superior ingeniería informática Versión original: Amador Durán y Ramón Mel (marzo 2007) Tiempo: 1h Grupo Ingeniería a l Software Abril 2007 Qué es Java Server Pages? Es una tecnología a servidor basada en servlets para generar páginas dinámicas. Inicialmente permitía mezclar contenido estático tico* con scriptlets código Java (contenido dinámico mico). Actualmente se prefiere mezclar contenido estático con elementos especiales que generan contenido dinámico en lugar usar scriptlets. request response HTML Servidor HTTP HTTP Contenedor servlets Cliente web CSS Compilador *HTML, XML, WML, SVG, texto, etc. XML Grupo Ingeniería l Software 1 1
Estructura básica b una página p Des la especificación 2.0, las páginas puen ser plantillas texto sin formato específico o documentos XML, aunque esta nueva notación está aún poco extendida y es algo farragosa. La extensión habitual una es.jsp, aunque se usa.jspx para las páginas que son documentos XML y.jspf para los fragmentos. En la notación habitual (sin usar ningún n tipo scriptlets), una está compuesta por: Contenido estático tico: HTML, XML, WML, texto libre, etc. Comentarios : <%-- -- Directivas : <%@ Código EL (Expression( Language): ${ } Elementos ndar: <jsp: ></ </jsp:> Elementos custom : JSTL, Struts, etc. Grupo Ingeniería l Software 2 Ejemplo una página p <?xml <?xml version="1.0" version="1.0" encoding="iso-8859-1" encoding="iso-8859-1"?>?> <%@ <%@ page page language="java" language="java" <%@ <%@ page page contenttype="text/html" contenttype="text/html" <%@ <%@ page page pageencoding="iso-8859-1" pageencoding="iso-8859-1" <%@ <%@ taglib taglib prefix="c" prefix="c" uri="http://java.sun.com/jsp/jstl/core" uri="http://java.sun.com/jsp/jstl/core" <!DOCTYPE <!DOCTYPE html html PUBLIC PUBLIC "-//W3C//DTD "-//W3C//DTD XHTML XHTML 1.0 1.0 Transitional//EN" Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html <html xmlns="http://www.w3.org/1999/xhtml"> xmlns="http://www.w3.org/1999/xhtml"> <head <head> head> <meta <meta http-equiv="content-type" http-equiv="content-type" content="text/html;charset=iso-8859-1" content="text/html;charset=iso-8859-1" <link <link rel="stylesheet" rel="stylesheet" type="text/css" type="text/css" href="styles/estilo.css" href="styles/estilo.css" <title <title>página title>página ejemplo</title ejemplo</title> title> </head </head> head> <%-- <%-- sigue sigue en en la la siguiente siguiente transparencia transparencia -- -- Grupo Ingeniería l Software 3 2
Ejemplo una página p (continuación) n) <%-- <%-- viene viene la la transparencia transparencia anterior anterior -- -- <body <body> body> <h1 <h1>ejemplo h1>ejemplo página página 2.1</h1 2.1</h1> /h1> <jsp:usebean <jsp:usebean id="errores" id="errores" scope="session" scope="session" class="es.us.lsi.daaw.beans.listamensajes" class="es.us.lsi.daaw.beans.listamensajes" <div <div id="div_errores" id="div_errores" class="errores"> class="errores"> <ul <ul> ul> <c:foreach <c:foreach var="mensaje" var="mensaje" items="${ items="${errores.mensajes}"> ${errores.mensajes}"> <li <li>${mensaje}</li> li>${mensaje} ${mensaje}</li> </c:foreach </c:foreach> c:foreach> </ul </ul> ul> </div </div> div> </body </body> body> </html </html> html> Grupo Ingeniería l Software 4 Principales directivas : <%@ page Especifica ciertas características la, por ejemplo: language = "java" Lenguaje los scriptlets la página. Por fecto es Java, por lo que no es necesario especificarlo. errorpage = "URL gestión n errores" URL la página a la que el contenedor hará un forward si se genera alguna excepción al ejecutar la. iserrorpage = "true false" true false" Indica si la es una página gestión errores con acceso al objeto exception. El valor por fecto es false. contenttype = "text" text/html;charset=iso-8859-1" Indica el tipo MIME y el juego caracteres para la respuesta. Por fecto son text/html e ISO-8859 8859-1. El juego caracteres también se pue especificar aparte con pageencoding. iselignored = "true false" true false" Indica si el contenedor servlets be ignorar o procesar el código EL. Si el archivo web.xml es acor a la especificación servlets 2.3, el valor por fecto es true; si lo es a la 2.4, es false, (el contenedor procesa el código EL). Grupo Ingeniería l Software 5 3
Principales directivas : <%@ inclu Incluye un archivo (normalmente un fragmento ) antes que el contenedor transforme la página en un servlet.* Su único atributo es: file = "URL relativa" URL relativa l archivo a incluir. Si empieza por /, se consira relativo al contexto la aplicación web. Principales directivas : <%@ taglib Permite usar una biblioteca custom. Sus atributos son los siguientes: uri = "URI la la biblioteca" URI que intifica manera única a una biblioteca custom, p.e. http://java.sun.com/jsp/jstl/core. prefix = "prefijobiblioteca" prefijobiblioteca" Prefijo para las etiquetas los elementos finidos en la biblioteca custom. No se admiten prefijos vacíos ni ninguno los siguientes: jsp, jspx, java, javax, servlet, sun, y sunw. *Ver la sección dicada al ciclo vida una. Grupo Ingeniería l Software 6 Lenguaje Expresiones (EL) El Expression Language permite especificar expresiones forma sencilla en las páginas. Las expresiones EL son analizadas y procesadas por el contenedor servlets al transformar la página en un servlet.* Una expresión EL tiene la forma ${expresión} n}, y pue incluir números, canas y propiedas JavaBeans, incluyendo entre otros, los siguientes objetos implícitos que son tratados como mapas: pagescope: contexto la página que permite accer a su mapa y a las propiedas los objetos servletcontext, session, request y response. requestscope: mapa con los atributos request. sessionscope: mapa con los atributos sesión. applicationscope: mapa con los atributos aplicación. param y paramvalues: valores enviados por un formulario. *Si el scriptor spliegue (web.xml) sigue la especificación 2.4 o superior. Grupo Ingeniería l Software 7 4
Ejemplos uso expresiones EL ${param.nombre param.nombre} El valor l parámetro "nombre" o null si no se ha enviado o es una cana vacía. Equivale a ${param param["nombre"]} y a ${param param['nombre']} ['nombre']}. ${!empty param.direccion} Cierto (true) si el parámetro "dirección" se ha enviado y no es una cana vacía. Equivale a ${!empty param[" ["direccion"]}. ${sessionscope.carrito.size sessionscope.carrito.size} El valor la propiedad "size" la variable sesión "carrito". Equivale a ${sessionscope sessionscope["carrito"]. ["carrito"].size}. ${applicationscope applicationscope[" ["numusuarios"]} El valor la variable aplicación "numusuarios". Equivale a ${applicationscope.numusuarios applicationscope.numusuarios}. ${carrito.preciototal carrito.preciototal} El valor la propiedad "preciototal" la variable "cararito" si la encuentra en los ámbitos página, request, sesión o aplicación (en ese orn). Si no la encuentra, vuelve null. Equivale a ${carrito["preciototal preciototal"]} "]}. Grupo Ingeniería l Software 8 Elementos Son 14 elementos que comienzan con el prefijo jsp: Algunos tienen que ver con la nueva sintaxis XML : jsp:root, jsp:body, jsp:attribute, jsp:text, Otros no se suelen usar mucho, como la inclusión dinámica (jsp:inclu), o el forwarding (jsp:forward, sin haber generado contenido previamente). Los más utilizados son: <jsp:usebean>: para usar o crear JavaBeans en cualquiera los mapas los posibles ámbitos (página, request, sesión o aplicación). <jsp:setproperty>: para dar valor a las propiedas los JavaBeans clarados con <jsp:usebean>. Otros como jsp:getproperty han quedado obsoletos con la aparición las expresiones EL. Grupo Ingeniería l Software 9 5
Elementos : <jsp:usebean< jsp:usebean> Si no existe, crea un bean usando la clase especificada y almacenándolo con el nombre indicado en el mapa l ámbito correspondiente. En cualquier caso, asocia el bean con el intificador especificado en el atributo id y permite su uso en el resto la. Ejemplo: <jsp:usebean id="cliente" scope="session" class="es.us.lsi.daaw.beans.cliente" Equivale (ntro un servlet) a: HttpSession sesion = request.getsession(); if ( sesion.getattribute( "cliente" ) == null ) { sesion.setattribute( "cliente", new Cliente() ); } Cliente cliente = (Cliente)sesion.getAttribute("cliente"); Grupo Ingeniería l Software 10 Elementos : <jsp:setproperty< jsp:setproperty> Asigna el valor especificado a la propiedad indicada l bean previamente clarado o creado con jsp:usebean. Por ejemplo: <jsp:setproperty name="carrito" property="scuento" value="${sessionscope.cliente.scuento}" Se pue usar ntro jsp:usebean para asignar valores durante la creación l bean: <jsp:usebean id="cliente" scope="session" class="es.us.lsi.daaw.beans.cliente"> <jsp:setproperty name="cliente" property="nombre" value="${param['nombre']}" </jsp:usebean> Permite asignar golpe todos los parámetros enviados por un formulario que coincidan con los nombres y tipos las propiedas un bean:* <jsp:setproperty name="nuevocliente" property="*" *Pue generar una excepción si los tipos no coincin. Grupo Ingeniería l Software 11 6
Elementos custom Es posible sarrollar bibliotecas elementos conocidos como custom. Para usarlos en una hay que usar la directiva <%@ taglib. La JavaServer Pages Standard Tag Library (JSTL), es un conjunto 5 bibliotecas custom estandarizadas: Core (prefijo c): gestión variables, control flujo, gestión URLs. XML (prefijo x): similar a core, pero orientado a XML incluyendo transformación con XSL. i18n (prefijo fmt): internacionalización, incluyendo formateo fechas y números. SQL (prefijo sql): acceso a bases datos con SQL, sólo para prototipos (la capa presentación no be accer directamente a los datos). Funciones (prefijo fn): funciones longitud colecciones y manipulación canas. Grupo Ingeniería l Software 12 Ciclo vida una página p Las páginas son gestionadas por un servlet especial, interno al contenedor servlets. Dicho servlet traduce las páginas a servlets, las compila y las ejecuta la primera vez que se invocan o si la fecha la última modificación la página es posterior a la l servlet generado. La especificación oficial habla tres fases en el ciclo vida las páginas : Traducción: la se traduce en código un servlet. Compilación: el servlet generado se compila. www.javapassion.com Ejecución: el servlet compilado se ejecuta. Grupo Ingeniería l Software 13 7
Despliegue una página p Las páginas no necesitan ningún tipo spliegue especial, simplemente se colocan en la zona públicap la aplicación web. Ocultación n una página p Se pue ocultar una página en la zona privada la aplicación web, p.e. en un directorio ntro WEB-INF INF. No se podrá accer a la a través una URL, pero sí haciendo un forward s ntro un servlet. Grupo Ingeniería l Software 14 Mapeo URLs una página p Se pue asociar una URL a una (oculta o en la zona pública una aplicación web). Para ello se usan los elementos <servlet> y <servlet- mapping> l scriptor spliege web.xml. En el elemento <servlet> se be especificar el camino a la (<jsp-file> file>) en vez la clase l servlet (<servlet-class>). El elemento <web <web-app> web-app> <servlet- mapping> se utiliza igual que con los servlets, asociando una URL al nombre l servlet. <servlet <servlet> servlet> <servlet <servlet-name>jspoculto</servlet-name> servlet-name>jspoculto</ </servlet-name> <jsp <jsp-file>/web-inf/jsp/escondida.jsp</jsp-file> jsp-file> file>/web-inf/jsp/escondida.jsp</ </jsp-file> </servlet </servlet> servlet> <servlet <servlet-mapping> servlet-mapping> <servlet <servlet-name>jspoculto</servlet-name> servlet-name>jspoculto</ </servlet-name> <url <url-mapping>/escondido.html</url-mapping> url-mapping>/escondido.html</ </url-mapping> </servlet </servlet-mapping> servlet-mapping> </web </web-app> web-app> Grupo Ingeniería l Software 15 8
Creación n una página p con Eclipse 3.2 Grupo Ingeniería l Software 16 Creación n una página p con NetBeans 5.5 Grupo Ingeniería l Software 17 9
Creación n una página p con NetBeans 5.5 Grupo Ingeniería l Software 18 Bibliografía a recomendada Java Server Pages Basics. S. Ching. http://www.javapassion.com, 2006. 2.0 Syntax Reference. Sun Microsystems. http://java.sun.com/products /jsp/docs.html, 2006. The Java EE 5 Tutorial The Java EE 5 Tutorial. E. Jendrok et al. http://java.sun.com/javaee/5 /docs/tutorial/doc/, 2007. Grupo Ingeniería l Software 19 10
Desarrollar páginas p Escriba algunos ejemplos páginas sencillas: El clásico ejemplo l " Hola, mundo!", pero usando una expresión EL. Recibir datos un formulario y generar una respuesta con esos datos usando EL. Experimente con la ocultación páginas mediante los elementos <servlet> y <servlet- mapping> web.xml. Cree una en algún directorio WEB-INF y compruebe como no pue accer a ella s un navegador. Escriba un servlet que haga un forward a la oculta y compruebe como pue accer a los distintos objetos ámbito s la oculta usando expresiones EL. Observe el código l servlet generado por una al ser traducida. Grupo Ingeniería l Software 20 11