Académique Documents
Professionnel Documents
Culture Documents
1.
-> Ejercicio: instalacin y ejecucin de la primera aplicacin web con tecnologa JSP
1. Elementos bsicos de una pgina JSP o Directivas <%@ (page | include | taglib) o Cdigo Java <% (declaraciones | java | expresiones) o Acciones estndar <jsp:accin (include |forward | usebean| getproperty | setproperty)
Primer vistazo a la tecnologa JSP o Qu es y para qu sirve JSP o Primer ejemplo Hola Mundo y la fecha o Uso de objetos implcitos y ejemplo
Contenido
Definicin de la estructura (biblioteca.tld y sta en web.xml) o Nombre, clase controladora, atributos, cuerpo, etc. Definicin de la funcionalidad (JavaBean que deriva de taglib) Declaracin en pgina con <%@taglib y uso posterior
Introduccin a JSP
JSP es una especificacin de Sun Microsystems Sirve para crear y gestionar pginas web dinmicas Permite mezclar en una pgina cdigo HTML para generar la parte esttica, con contenido dinmico generado a partir de marcas especiales <% .... %> El contenido dinmico se obtiene, en esencia, gracias a la posibilidad de incrustar dentro de la pgina cdigo Java de diferentes formas Hay 3 formas de aadir contenido dinmico Su objetivo final es separar la interfaz (presentacin visual) de la implementacin (lgica de ejecucin)
3
Introduccin a JSP
Pgina JSP Servlet La pgina JSP se convierte en un servlet La conversin la realiza en la mquina servidora el motor o contenedor JSP, la primera vez que se solicita la pgina JSP Este servlet generado procesa cualquier peticin para esa pgina JSP Si se modifica el cdigo de la pgina JSP, entonces se regenera y recompila Traduce Compila automticamente el servlet y se recarga la Fichero.jsp prxima vez queServletJsp.java Compila ServletJsp.class sea solicitada Motor
JSP dor java
4
Funcionamiento
Peticin fichero.jsp
Cliente
Respuesta
Servidor Web
peticin respuesta
1 vez
Motor JSP
1 vez
peticin 1 vez
ServletJSP.java
En esta pgina se mezcla cdigo HTML con cdigo Java incrustado con unas marcas especiales En este caso es una expresin, que se sustituye en la pgina por el resultado de evaluarla En otros casos es un trozo de cdigo Java que simplemente se ejecuta
6
o El cdigo dinmico se traduce en funcin del contenido Ej: El cdigo jsp <%= new Date().toString() %> se traduce por out.print( new Date().toString() );
8
10
Objetos implcitos
JSP utiliza los objetos implcitos, basados en la API de servlets. Estos objetos estn disponibles para su uso en pginas JSP y son los siguientes: Objeto request o Representa la peticin lanzada en la invocacin de service(). Proporciona entre otras cosas los parmetros recibidos del cliente, el tipo de peticin (GET/POST) Objeto response o Instancia de HttpServletResponse que representa la respuesta del servidor a la peticin. mbito de pgina
12
Objetos implcitos
out: Es el PrintWriter usado para enviar la salida al cliente. Es una versin con buffer de PrintWriter llamada JspWriter. Podemos ajustar el tamao del buffer, o incluso desactivar el buffer, usando el atributo buffer de la directiva page. Se usa casi exclusivamente en scriptlets ya que las expresiones JSP obtienen un lugar en el stream de salida, y por eso raramente se refieren explcitamente a out. session: Este es el objeto HttpSession asociado con la peticin. Las sesiones se crean automticamente, salvo que se use el atributo session de la directiva page para desactivar las sesiones, en cuyo caso los intentos de referenciar la variable session causarn un error en el momento de traducir la pgina JSP a un servlet.
13
Objetos implcitos
application: El ServletContext obtenido mediante getServletConfig().getContext(). config: El objeto ServletConfig. pageContext: JSP presenta una nueva clase llamada PageContext para encapsular caractersticas de uso especficas del servidor como JspWriters de alto rendimiento. La idea es que, si tenemos acceso a ellas a travs de esta clase en vez directamente, nuestro cdigo seguir funcionando en motores servlet/JSP "normales". page: Esto es slo un sinnimo de this, y no es muy til en Java. Fue creado como situacin para el da que el los lenguajes de script puedan incluir otros lenguajes distintos de Java.
14
mbitos
Define dnde y durante cuanto tiempo estn accesibles los objetos (Objetos implcitos, JavaBeans, etc) Tipos de mbitos: o de pgina. El objeto es accesible por el servlet que representa la pgina o de peticin o de sesin. El objeto es accesible durante toda la sesin, desde los servlets a los que se accede o de aplicacin. El objeto es accesible por el servlet que representa la pgina
15
16
18
19
Directivas JSP
Utilizadas para definir y manipular una serie de atributos dependientes de la pgina que afectan a todo el JSP. Las directivas existentes son las siguientes:
Page Include Taglib
20
extends ="package.class".
o Esto indica la superclase del servlet que se va a generar. Debemos usarla con extrema precaucin, ya que el servidor podra utilizar una superclase personalizada.
info ="message".
o Define un string que puede usarse para ser recuperado mediante el mtodo getServletInfo.
23
isErrorPage="true|false".
o Indica si la pgina actual acta o no como pgina de error de otra pgina JSP. El valor por defecto es false.
language="java"
o En algunos momentos, esto est pensado para especificar el lenguaje a utilizar. Por ahora, no debemos precuparnos por l ya que java es tanto el valor por defecto como la nica opcin legal.
25
Sintaxis:
29
30
Elementos Scripting
Permiten la insercin de Declaraciones, Cdigo Java (scriptlets) y Expresiones dentro de una pgina JSP Hay 3 categoras:
Declaraciones Cdigo Java arbitrario Expresiones
31
Ejemplo:
<%! int contador >
32
Ejemplo
<% int i,j; for (i=0;i<3;i++) { j=j+1; } %>
34
35
Nota: ser necesario que previamente contador haya tomado un valor a travs de un scriptlet
36
1.
Ejercicios
1.
2.
Modificar el fichero ej4_incluido.html y comprobar que dichas modificaciones no aparecen reflejadas por la directiva Crear una aplicacin que funcione como calculadora con todas las operaciones.
Basarse en ej2_saludo.html para hacer el formulario y sumadora.jsp Usar la instruccin if(operacin.equals(restar) resultado=
3.
38
al comportamiento en tiempo de ejecucin del JSP y la respuesta se devuelve al cliente. En la traduccin de JSP al servlet, la marca se reemplaza por cierto cdigo Java que define a dicha marca. Una marca por tanto define un cierto cdigo Java (es como una macro) Constan de un prefijo y un sufijo adems de una serie de atributos. El prefijo es siempre jsp en las acciones estndar Sintaxis
<jsp:sufijo atributos/>
Ejemplo
<jsp:include page=mijsp.jsp flush=true />
40
41
Accin jsp:include
Permite incluir un recurso especificado por la URL, en la peticin JSP en tiempo de ejecucin. Cuando se realiza la traduccin de JSP al servlet, dentro del mtodo _jspService() se genera el cdigo que comprueba si existe el recurso (pgina) y si no se crea, invocndolo a continuacin. Cuando se ejecuta el servlet, se invoca al recurso que realiza la operacin y devuelve el resultado al servlet El elemento incluido puede acceder al objeto request de la pgina padre, y adems de los parmetros normales, a los que se aadan con <jsp:param>
42
Accin jsp:include
Sintaxis <jsp:include page=URL flush=true>
<jsp:param name=nombre clave value=valor /> (no obligatorios)
....
</jsp:include>
43
44
<jsp:forward>
<jsp:useBean> <jsp:setProperty> <jsp:getProperty> <jsp:plugin>
46
Accin jsp:param
Se usa como submarca dentro de cualquier otra marca Sirve para pasar parmetros a un objeto Sintaxis <jsp:.... .... </jsp:....
>
>
47
<jsp:forward>
<jsp:useBean> <jsp:setProperty> <jsp:getProperty> <jsp:plugin>
48
Accin jsp:forward
Esta marca permite que la peticin sea redirigida a otra pgina JSP, a otro servlet o a otro recurso esttico Muy til cuando se quiere separar la aplicacin en diferentes vistas, dependiendo de la peticin interceptada. Cuando se ejecuta el servlet se redirige hacia otro servlet y no se vuelve al servlet original Sintaxis <jsp:forward page=URL > .... </jsp:forward>
<jsp:param name=nombre clave value=valor /> (no obligatorios)
49
51
53
Accin jsp:useBean
Esta marca sirve para instanciar un JavaBean si no existe, o localizar una instancia ya existente, para su uso desde la pgina. Los JavaBeans son objetos Java que cumplen ciertas caractersticas en cuanto a su diseo: son serializables y tienen un constructor implcito. Se utilizan para reducir al mximo el cdigo Java insertado en una pgina JSP. En lugar de meterlo directamente en el fichero JSP se mete en una clase y una instancia de sta se llama desde el JSP Permite separar la lgica de ejecucin (en el JavaBean) de la presentacin (en el servlet generado) o Se encapsula el cdigo Java en un objeto 55 (JavaBean) y se instancia y usa con el JSP.
Accin jsp:useBean
Los JavaBeans se caracterizan porque a sus atributos (llamados propiedades) se acceden (por convenio) a travs de los mtodos setNombreAtributo y getNombreAtributo
o Ojo, si el nombre va en minsculas el mtodo lleva la inicial del nombre en maysculas para nombre se pone getNombre.
Si se usa un JavaBean en una pgina habr que definir la clase correspondiente, creando los mtodos set y get para los atributos definidos. Normalmente se suele definir dentro de un paquete. Dentro del servlet generado se puede llamar a mtodos de un JavaBean que se encarguen de realizar ciertas operaciones y el servlet muestra el
56
Accin jsp:useBean
Sintaxis
<jsp:useBean id=nombre scope=nombrembito detalles />
Caractersticas de los atributos de esta accin: En id se define el nombre asignado al JavaBean (identificador asociado) El mbito se refiere a dnde puede referenciarse el JavaBean. Permite compartir objetos en una sesin
o page,request,session y application
57
Accin jsp:useBean
Los detalles pueden ser:
o class=Nombre de la clase del JavaBean (es lo que ms se usa) o 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. o class: Designa el nombre completo del paquete del bean. o scope: Indica el contexto en el que el bean debera estar disponible. Hay cuatro posibles valores: page, request, session, y application. o type: Especifica el tipo de la variable a la que se referir el objeto. o beanName: Da el nombre del bean, como lo suministraramos en el mtodo instantiate de Beans. Esta permitido suministrar un type y un beanName, y omitir el58
Accin jsp:setProperty
Esta marca se utiliza junto con la marca useBean para asignar valor a las propiedades del Bean En el mtodo _jspService() del servlet generado se invoca al mtodo set de la propiedad deseada.
2 usos:
o Despus de un useBean.
<jsp:useBean id="myName" ... /> ... <jsp:setProperty name="myName property="someProperty" ... />
Accin jsp:setProperty
o Dentro de un useBean <jsp:useBean id="myName ... > ... <jsp:setProperty name="myName" property="someProperty" ... /> </jsp:useBean>
Slo se ejecuta cuando haya que instanciar un bean.
60
Accin jsp:setProperty
Sintaxis
<jsp:setProperty name=identificador del Bean detalles de la propiedad />
queremos seleccionar. Sin embargo, hay un caso especial: un valor de "*" significa que todos los parmetros de la peticin cuyos nombres correspondan con nombres de propiedades del Bean sern pasados a los mtodos de seleccin apropiados. o value: Este atributo opcional especifica el valor para la propiedad. Los valores string son convertidos automticamente a lo que corresponda mediante el mtodo estndard valueOf. No se pueden usar value y param juntos, pero si est permitido no usar ninguna.
o param: Este parmetro opcional designa el parmetro de la
61
Accin jsp:setProperty
o property=* (se cogen como propiedades y valores todos los parmetros del objeto request) o property=Nombre (se coge un parmetro con el mismo nombre del objeto request) o property=Nombre param=NombreParmetro (si se desean nombres distintos) o property=Nombre value=valor parmetro (se asignan propiedades arbitrarias con valores concretos)
62
Accin jsp:getProperty
Se utiliza para obtener el valor de las propiedades de un Bean. Dentro del mtodo _jspService() del servlet generado se accede al valor de una propiedad, lo convierte a string y lo imprime en la salida del cliente (objeto out). Sintaxis
<jsp:getProperty> name=nombre del Bean property=Nombre de la propiedad />
63
Se enva el formulario al servicio cuyo fichero es beans.jsp <p> Por favor, introduce tu nombre: <input type="text" name="nombre"> <br> Cul es tu lenguaje de programacin favorito? [...]
64
65
<body> <h1> Resultado de prueba del uso de beans </h1> <p> Hola <jsp:getProperty name="lenguajeBean" property="nombre" />. </p> coge el valor de la propiedad indicada y lo imprime para lo cual se ejecuta un mtodo del Bean con el nombre de la propiedad <p> Tu lenguaje favorito es <jsp:getProperty name="lenguajeBean" property="lenguaje" />. </p> <p> Mis comentarios acerca del lenguaje <p> <jsp:getProperty name="lenguajeBean" property="comentariosLenguaje" />. </p> </body> </HTML>
67
68
Accin jsp:plugin
Permite incluir applets en la jsp que la define, sin que el programador deba preocuparse ni por su correcta visualizacin en el cliente ni de que sus recursos se hospeden en el mismo servidor que la jsp. No obstante, cuando en la mquina cliente hay instaladas varias versiones del JRE, puede haber problemas. Lo que hace esta accin es identificar el tipo y versin del cliente web mediante el encabezado de peticin User-Agent y generar cdigo html especfico para ese cliente que permita asegurar la correcta visualizacin del applet sin importar versin ni tipo de cliente. Tiene muchos atributos coincidentes con los de la etiqueta <applet> asociada a los applets Java. Los 71
code
o Nombre de la clase del applet o Obligatorio
72
height
o Altura en pxeles o Obligatorio
codebase
o En el caso de que no se encuentre donde su archivo html asociado
73
archive
o Indica el fichero jar donde estn almacenados el applet y sus recursos o No es obligatorio
74
75
JSP 2.0
Algunas nuevas caractersticas de JSP 2.0 frente a 1.2 orientadas a simplificar su desarrollo son:
o o o o Simple Expression Language (EL) Fragmentos JSP Ficheros de Tags Manejadores de Etiquetas Simplificados
78
Desde JSP 2.0 el JSP container entiende expresiones en EL EL es mucho ms tolerante sobre variables sin valor (null) y realiza conversiones automticas de datos Se puede habilitar (por defecto) o deshabilitar el uso de expresiones EL:
<%@ page isScriptingEnabled="true|false" isELEnabled="true|false"%>
79
Sintaxis de EL
Una expresin en EL contiene variables y operadores ${expr}, donde expr es:
o Literales:
true o false Integer Floating point String null
Ejemplos:
${false} <%-- evaluates to false --%> ${3*8}
80
Sintaxis de EL
Ejemplos:
Aritmticos: +, -, *, /, div, %, mod, Lgicos: and, &&, or, ||, !, not Relacionales: ==, eq, !=, ne, <, lt, <, gt, <=, le, >=, ge Vaco, empty, valida si una variable es null o una colleccin no tiene elementos Llamadas a funcin, donde func es el nombre de la funcin y args es 0 o ms argumentos separados por comas. Condicional: A ? B: C, como en C y Java
81
Sintaxis de EL
${expr}, donde expr es:
o Objetos implcitos:
pageContext contexto del JSP, puede usarse para acceder a objetos implcitos como request, response, session, out, servletContext, etc.
o Ejemplo: ${pageContext.response} o $(param.name)
param
<-> request.getParameter (name)
paramValues
o ${paramvalues.name) <-> request.getParamterValues(name )
header
o ${header.name} <-> request.getHeader(name) <-> request.getHeaderValues(name)
headerValues
o ${headerValues.name}
cookie
o ${cookie.name.value} devuelve el valor de la primera cookie con el nombre dado o initParam.name ServletContext.getInitparameter(String name)
82
initParam
Sintaxis de EL
${expr}, donde expr es:
o Objetos implcitos: pageScope puede acceder a objetos dentro del contexto de pgina ${pageScope.objectName} ${pageScope.objectName.attributeName}. requestScope ${requestScope.objectName} ${requestScope.objectName.attributeName} sessionScope ${sessionScope.name} applicationScope
83
Ejemplos EL
${amount + 5} , aade 5 a una variable amount ${order.amount + 5}, aade 5 a la propiedad amount del bean order
o Lo mismo sera hacer: ${order['amount'] + 5}
Ejemplos EL
El operador ?:
<select name="artist"> <option value="1" ${param.artist == 1 ? 'selected' : ''}> Vesica Pisces <option value="2" ${param.artist == 2 ? 'selected' : ''}> Cortical Control <option value="3" ${param.artist == 3 ? 'selected' : ''}> Vida Vierra </select>
85
Errores en servlets and JSPs desde su versin 2.0 vienen dadas en la variable javax.servlet.error.exception La propiedad errorData del objeto implcito pageContext expone informacin sobre el problema. javax.servlet.jsp.ErrorData tiene las siguientes propiedades:
o o o o
requestURI la URI para la que fall la peticin servletName el nombre del servlet o JSP que fall statusCode el cdigo del fallo throwable la excepcin que caus la invocacin de la pgina de error
86
87
En el web.xml se puede indicar que esta es la pgina de error mediante los siguientes elementos:
... <error-page> <exceptiontype>java.lang.Throwable</exception-type> <location>/error.jsp</location> </error-page> <error-page> <exception-code>500</exception-code> <location>/error.jsp</location> </error-page> ...
88
Usar Schemas en vez de DTDs nos permite colocar los elementos XML de primer nivel en cualquier orden y realizar an mas verificaciones sobre la sintaxis de web.xml Todos los elementos especficos a la configuracin de un JSP se encuentran agrupados dentro del nuevo elemento <jsp-config>.
o Las reglas de web.xml estn definidas en un XML Schema o Las configuraciones especficas de JSP han sido movidas a un nuevo elemento XML
89
Elemento jsp-config
Su subelemento <jsp-property-group> es muy interesante.
o Permite aplicar configuraciones a un grupo de JSPs que conforman con un patrn de url especfico
... <jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <scripting-invalid>true</scripting-invalid> </jsp-property-group> </jsp-config> ...
90
Elemento jsp-config
Elemento
<el-ignored> <scriptinginvalid>
Descripcin
Indica si ignorar o no las expresiones EL dentro de un JSP correspondiente al patrn URL indicado. Por defecto es false. Si es true no se pueden introducir scriplets en el JSP. Indica la codificacin de caracteres para un conjunto de JSPs Indica el path correspondiente a un fichero a aadir al final de cada pgina JSP.. Lo mismo pero al comienzo de cada JSP. Si se asigna a true la sintaxis de los JSPs es en XML.
91
<pageencoding>
<includecoda> <includeprelude> <is-xml>
Ejercicios
1. 2. Modificar la pgina ej4_directivainclude.jsp para incluir tambin el fichero incluido.jsp como accin include Cambiar la pgina HTML o JSP y volver a ejecutar comprobando resultados Ejecutar el ejemplo del Bean que evala el lenguaje preferido del cliente Crear un Bean que funcione como sumadora.
Usar como base sumadora.html para sumadorabean.html, lenguajebean.jsp para sumadorabean.jsp lenguajebean.java y sumadora.jsp para sumadorabean.java
92
3.
4.
5.
93
94
o Por tanto a menudo tenemos que incluir cdigo en un JSP o JSP (1.1 en adelante) define custom tags que pueden ser usadas para definir acciones propietarias, de manera que en nuestro JSP nicamente tenemos cdigo de marcado
95
Etiquetas personalizadas
Las acciones personalizadas estn definidas por el programador de la aplicacin web mediante el uso de etiquetas personalizadas. Una etiqueta personalizada permite ocultar bajo ella un conjunto de acciones (definidas con instrucciones java) evitando que las mismas se incluyan en el fichero JSP. As pues, para incluir lgica de programa en una aplicacin web, es posible realizarlo de tres modos o Incluyendo el correspondiente cdigo Java en una pgina JSP o Incluyndolo en un Java Bean que se llama desde la pgina JSP 96
Ej: Una etiqueta que compruebe que un usuario existe (u otra condicin) y se redirija a una pgina de xito o de error en funcin de la comprobacin. El uso exclusivo de Beans no es suficiente.
o Podramos usar un bean para comprobar que el usuario existe. o El hecho de redirigir a una pgina o a otra en funcin de si existe o no debe hacerse en una pgina JSP (puesto que desde un bean no se puede reenviar a una pgina JSP) y debe utilizarse cdigo Java para realizar la comparacin (if) 98 o JavaBeans no permiten interactuar con la JSP.
Posteriomente se recorre la lista y se muestra el atributo ttulo de cada libro. Esto no se puede hacer en el Bean porque en l no se puede acceder al objeto out para devolver el resultado al cliente, por lo que hay que incluirlo en el fichero JSP
<% while (res.next()){ %> <%=res.getString(titulo) %> <% } %>
99
100
2. Definicin de la funcionalidad asociada a la etiqueta (lo que queremos que haga cuando se use la etiqueta) . Se define a travs de un controlador de la etiqueta (clase que implementa la etiqueta)
o Es un JavaBean, con propiedades que coinciden con los102
<eti:hola nombre=Marian/> Muestra un mensaje hola Marian <eti:suma 3 4/> muestra la suma de dos valores 103
Etiquetas personalizadas - Ejemplo de uso en un fichero JSP Caso simple, sin atributos ni cuerpo, que saca cdigo HTML y contenido dinmico (etiquetas\ejtag1_hola.jsp)
<%@ taglib uri=/WEB-INF/tlds/etiquetas.tld prefix=ejemplo %>
<HTML> <head><title> Saludo al cliente mediante el uso de una etiqueta </title></head> <body> <h1> Saludo al cliente con una etiqueta </h1> <ejemplo:hola /> </body> </HTML>
104
105
Fichero XML que define una librera de tags y sus etiquetas. Consta de:
o Prlogo XML como todo documento XML o El elemento raz <taglib>, que tiene como subelementos:
tlib-version versin de la librera de etiquetas jsp-version la versin de JSP, actualmente 2.0 short-name nombre corto para la librera description informacin para documentacin uri enlace a ms informacin sobre tag library tag elemento ms importante, puede haber varios y tiene sub-elementos
106
empty no hay cuerpo JSP cuerpo es un conjunto de elementos tagdependent cuerpo debe ser interpretado por la etiqueta
name (obligatorio) required: true o false (valor por defecto false) rtexprvalue: determina si el valor de este atributo se puede determinar en tiempo de ejecucin
107
110
111
Cuando el motor JSP encuentra la etiqueta durante la traduccin de la pgina JSP al servlet 1. Se crea un objeto de la clase etiqueta si no existe 2. Se invocan sus mtodos set de cada uno de sus atributos 3. Se invoca el mtodo doStartTag(). Este mtodo finaliza con una de estas opciones
1. 2. SKIP_BODY (si no hay cuerpo) EVAL_BODY_INCLUDE
4.
112
Si hay cuerpo,
1. Se invoca el mtodo setBodyContent() Cualquier salida de la etiqueta se deriva al objeto BodyContent 2. Se invoca el mtodo doInitBody() permite realizar acciones antes de ser evaluado el cuerpo. La salida se guarda en el buffer BodyContent 3. Se procesa el cuerpo de la etiqueta (se pasa el contenido al buffer del BodyContent 4. Se invoca el mtodo doAfterBody(). Al final del mtodo se puede determinar por dnde seguir el ciclo de vida, devolviendo una de las siguientes constantes:
o EVAL_BODY_AGAIN o SKIP_BODY
113
El interfaz Tag
Este interfaz define los siguientes mtodos:
o o o o o o doStartTag doEndTag getParent setParent setPageContext release
114
Para evitar que el programador tenga que codificar todos los mtodos tambin proporciona varias clases de ayuda:
o TagSupport, implementa todos los mtodos de la interfaz
115
public class HolaTag extends TagSupport { public int doStartTag() throws JspTagException { // el motor JSP llama este mtodo cuando encuentre el // comienzo de una marca implementada por esta clase return SKIP_BODY; } []
117
119
definicin en la tld
<tag> <name>saludo</name> <tagclass>es.uniovi.di.servinfo.etiquetas.HolaTagAtribu to</tagclass> <bodycontent> empty</bodycontent> <info>Esta es una etiqueta muy simple de saludo </info> <atribute> <name>nombre</name> <required>false</required> <rtextvalue>false</rtexpvalue> </atribute> </tag> </taglib>
120
public class HolaTag extends TagSupport { // Atributo de la etiqueta definido en el fichero TLD private String nombre = null;
public void HolaTag() {}
121
// Mtodos set y get del atributo "nombre" que // se ha definido en el fichero TLD para esta etiqueta public void setNombre( String _nombre ) { nombre = _nombre; } public String getNombre() { return( nombre ); }
122
124
public void release() { /* Llama al mtodo release() del padre, para que se devuelvan todos los recursos utilizados al sistema. Esta es una buena prctica, sobre todo cuando se estn utilizando jararquas de etiquetas */ super.release(); } } // de la clase
125
126
El interfaz IterationTag
Extiende el interfaz Tag aadiendo un nuevo mtodo doAfterBody, que puede devolver:
o Tag.SKIP_BODY el cuerpo se ignora y el contenedor llama a doEndTag o IterationTag.EVAL_BODY_AGAIN doAfterBody es llamado de nuevo
128
Ejemplo IterationTag I
Objetivo: calcular una potencia: 2^3=8
package es.deusto.customtags; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class PowerTag //extends TagSupport { implements IterationTag { private private private private private PageContext pageContext; int number; int power; int counter = 0; int result = 1;
// the setter for number public void setNumber(int number) { System.out.println("number: " + number); this.number = number; } public int getNumber() { return this.number; }
129
Ejemplo IterationTag II
// the setter for power public void setPower(int power) { System.out.println("power: " + power); this.power = power; }
130
131
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>myTag</short-name> <tag> <name>myTag</name> <tag-class>es.deusto.customtags.PowerTag</tag-class> <body-content>tagdependent</body-content> <attribute> <name>number</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>power</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
132
Manipulando el contenido de una etiqueta personalizada Una etiqueta personalizada puede tener un cuerpo: <%@ taglib uri=/myTLD prefix=x%> <x:theTag>This is the body content</x:theTag> Para manipular el cuerpo de una etiqueta es necesario utilizar BodyTag y BodyContent
133
La interfaz BodyTag
Extiende la IterationTag con 2 mtodos Tiene un ciclo de vida similar a IterationTag, sin embargo:
o doStartTag puede devolver SKIP_BODY, EVAL_BODY_INCLUDE (el cuerpo se evalua como con IterationTag) o EVAL_BODY_BUFFERED (un objeto de tipo BodyContent es creado al cuerpo de la etiqueta personalizada) o Llamado despus de doStartTag, seguido de doInitBody, pero no se invoca si:
La custom tag no tiene cuerpo La custom tag tiene cuerpo pero doStartTag devuelve SKIP_BOBY o EVAL_BODY_INCLUDE
La clase BodyContent
Representa el cuerpo de una etiqueta personalizada Ejemplo: Codificar el contenido HTML de una etiqueta personalizada y visualizar su contenido en el navegador
135
136
137
138
Clases de ayuda
Clases que implementan interfaces Tag, IterationTag y BodyTag:
o public class TagSupport implements IterationTag, java.io.Serializable o public class BodyTagSupport extends TagSupport implements Bodytag
Ahora slo es necesario sobre-escribir los mtodos que quieran utilizarse en el procesamiento de custom tags
139
140
Etiquetas anidadas
Cuando dos o ms etiquetas personalizadas estn anidadas es posible obtener una referencia a la clase padre a travs de findAncestorWithClass Ejemplo: OuterTag1 parent1 = (OuterTag1)findAncestorWithClass(th is, OuterTag.class);
142
La clase Tag Extra Info (TEI) se usa para permitir la creacin de variables de script.
o Hay que definir en la clase TagExtraInfo el mtodo getVariableInfo o Este mtodo crea un array de objetos VariableInfo
o o o o
Variables de script
143
144
145
146
147
148
149
150
La funcin JSP debe ser declarada en un tag library descriptor (TLD): <function> <name>methodName</name> <function-class>className</function-class> <function-signature> returnType methodName(param1Type, param2Type, ...) </function-signature> </function> La clase Java que lo implementa no tiene que utilizar ninguna interfaz especial, el mtodo debe ser pblico y esttico.
151
152
IMPORTANTE: los elementos de scripting no se permiten en el cuerpo del elemento siempre que la custom tag utilice un simple tag handler Revisar ejemplo customtag\ej8_simpletag\ej8_simpletag
153
154
JSP 2.0 permite desarrollar una accin propietaria como un fichero de tag (tag file). Un tag file es un fichero de texto donde se utilizan elementos JSP para todas las partes dinmicas Se diferencia de un JSP en que:
o Tiene la misma funcionalidad que un Tag Handler
o Tiene extensin .tag o Usa una directiva tag en vez de page o Permite especificar entrada y salida con directivas vlidas slo en tag files.
156
157
Los Map de respuestas y votos y las preguntas son codificados como campos hidden en el formulario, para as poderse transferir a la pgina procesando los votos
158
1.
Ejercicios
ejtag1_hola.jsp (Etiqueta sin atributos ni cuerpo) ejtag2_hola.jsp (Etiqueta con atributos) ejtag3_hola.jsp (etiqueta con atributos y cuerpo)
2. 3. 4.
Comprobar el contenido del fichero web.xml Comprobar el contenido del fichero etiquetas.tld Hacer una etiqueta denominada suma, que efecte la suma de los dos nmeros pasados como parmetros
161
web
As pues, la funcionalidad de una aplicacin puede ser integrada de tres modos: Como cdigo Java dentro de las pginas JSP
o No separa la interfaz de la implementacin
Un buen diseo pasa por evitar en la medida de lo posible la primera de las tres opciones
162
visto en servlets es vlido con JSP. Uso de Interfaz HttpSession para la gestin de sesiones El objeto session se crea automticamente en JSP (puede suprimirse con page) El objeto session es un diccionario al que se pueden asociar objetos (atributos) y darles un nombre (tambin eliminar) Se puede recuperar la informacin desde otras peticiones posteriores de la misma sesin
o session.setAttribute(mipaquete.sesion.nombre, miObjeto);
163
Todo lo visto en servlets es aplicable en JSP Mecanismos o Declarativo. Usa un mecanismo proporcionado por el motor de servlets
Indicar restricciones de seguridad Indicar el modo de realizar la autentificacin Indicar los usuarios definidos en el sistema
o Por programa
Generar formulario html para nombre y clave Generar pgina JSP que accede a Base de Datos, comprueba clave y se fijan los parmetros de seguridad en el JavaBean, cuyo mbito se restringe a la sesin que acaba de establecer el usuario
164
Para utilizar un documento XML en una aplicacin es preciso analizarlo Existen dos modelos de analizadores aceptados:
o DOM (Modelo de objetos de documento) o SAX (API simple para XML)
Analizador SAX
o En lugar de crear un rbol, va leyendo el archivo XML y ejecuta acciones segn las etiquetas encontradas.
165
166
Entrada login01.jsp
Proceso login02.jsp
OK si.html
NO no.html
Usuarios.xml
167
168
Formulario de entrada (login01.jsp) <form method=POST accion=login02.jsp name=autenticacion> <table border=0 cellpadding=0 cellspacing=0 width=200> <tr> <td width=50%>Nombre</td> <td width=50><input type=text name=nombre size=16></td> </tr> <tr> <td width=50%>Contrasea</td> <td width=50%><input type=password name=pwd size=16></td> </tr> <tr> <td width=50%> colspan=2 align=center> <input type=submit value=Entrar size=16></td> </tr> </table> </form>
169
Autenticacin (login02.jsp) Importacin de los paquetes para el control del fichero XML
<%@ page import=javax.xml.parsers.* %>
Instanciacin del JavaBean responsable de mantener informacin del usuario mientras dure la sesin
<jsp:useBean id=login scope=session class=login.Autenticacion/>
170
Recuperacin de los datos de identificacin del usuario enviados desde el formulario HTML de la pgina previa
if (request.getParameter(nombre)!= null) {usuario=request.getParameter(nombre); if (request.getParameter(pwd)!=null) { pwd= request.getParameter(pwd); }
171
173
Cdigo JavaScript que permite el reenvo de una pgina a otra, de forma que se pueda presentar al visitante la pgina adecuada dependiendo de que haya sido posible la autenticacin o no
<script language=javascript> setTimeout(document.location=`<%= redireccionURL %>`,100) </script>
174
Control de la sesin
o El JavaBean Autenticacion.java lleva a cabo el control o Es posible comprobar en cada pgina web si el usuario est autorizado llamando al JavaBean o Los mtodos set de las propiedades nombre y clave se invocan desde las pginas de control de la lgica de aplicacin (login02.jsp) una vez que el usuario ha sido validado o Los mtodos get devuelven objetos String con la identificacin y la autorizacin del usuario
175
176
177
1.
Primer vistazo a la tecnologa JSP o Qu es y para qu sirve JSP o Primer ejemplo Hola Mundo y la fecha o Uso de objetos implcitos y ejemplo 2. Elementos bsicos de una pgina JSP o Directivas <%@ (page | include | taglib) o Cdigo Java <% (declaraciones | java | expresiones) o Acciones estndar <jsp:accin (include |forward | usebean| getproperty | setproperty) 3. Elementos Avanzados de una pgina JSP o Acciones personalizadas (etiquetas)
o
1. 2. 3.
3.
Para realizar un buen diseo que separe interfaz de lgica no se debe incluir directamente el cdigo Java. De este modo estn separadas las funciones:
Diseador de interfaces (JSP sin cdigo Java -> html y marcas) Programador de la lgica de la aplicacin (JavaBeans que implementan la funcionalidad)
Inclusin de cdigo Java Invocacin de objetos (JavaBeans) que implementen la lgica Invocacin de etiquetas personalizadas que implementen la lgica
4.
Una pgina JSP se transforma automticamente en un servlet. La ventaja es que el diseo de la interfaz no se mezcla con la programacin en Java
179