Sunteți pe pagina 1din 73

J2EE Java Server Pages

JSP

Samuel Marrero Lorenzo smarlor@iespana.es

Introduccin Servlets - JSP




En los servltes vistos anteriormente:




el texto generado para el aspecto (vista) de la interfaz


grfica (HTML,WML, etc.) est mezclado con cdigo Java
No es posible usar herramientas de generacin de HTML,
etc. directamente
La generacin del texto necesita ser escrita por una persona
con conocimientos de Java => econmicamente muy
costoso
Cambios al aspecto de la interfaz grfica requieren
recompilacin, creacin de un nuevo fichero .war y
rearranque del servidor
En una aplicacin web, especialmente en Internet, los
cambios a la interfaz grfica son muy frecuentes
2

Introduccin Servlets JSP


(2)


Situacin a la que queremos llegar





Separacin de roles
Personas que realizan el aspecto grfico => diseadores
grficos o similares


Personas que implementan el controlador y el modelo


=>programadores


Conocimientos de diseo grfico y herramientas para


generacin de HTML y WML

Conocimientos de diseo e implementacin

Se deberan poder usar directamente las herramientas de


diseo de pginas web
Las actualizaciones al aspecto grfico no deben provocar un
re-arranque del servidor
3

JSP


Qu es JSP ?






A modo de ejemplo, una pgina JSP que genera HTML


Tiene el aspecto de una pgina HTML
Puede incluir scriptlets (scripts) para generar HTML dinmicamente
Tpicamente los scriptlets se escriben en Java
En realidad, una pgina JSP es un tipo especial de servlet
(javax.servlet.jsp y javax.servlet.jsp.tagext) orientado a
generar el texto de la interfaz grfica

Invocables por GET y POST


<<interface>>javax.servlet.Servlet
<<interface>> javax.servlet.jsp.JspPage
<<interface>>javax.servlet.jsp.HttpJspPage
+ _jspService(request : HttpServletRequest, response :
HttpServletResponse) : void

JSP (2)


Qu ocurre cuando se accede a una pgina


JSP ?


Si es la primera vez, el servidor de aplicaciones


genera un servlet (que implementa
javax.servlet.jsp.HttpJspPage) a partir de la
pgina JSP, lo compila y lo carga en memoria
Si no es la primera vez, le pasa la peticin al
servlet (ya compilado y creado en memoria)
Si la pgina se ha modificado desde la ltima
compilacin, el servidor se da cuenta, genera el
nuevo servlet, lo compila y lo carga de nuevo
5

Primer ejemplo de JSP


<%@page language="java"%>
 directiva
<HTML>
 HTML
<HEAD>
<TITLE>Primer ejemplo JSP</TITLE>
</HEAD>
<BODY>
<%if(request.getParameter("nombre")==null){%>  scriptlet
<H1>Hola Mundo</H1>
<%}else {%>
<H1>Hola <%=request.getParameter("nombre")%></H1>
<%}%>
Expresin
</BODY>
</HTML>

Cdigo: c:\java\JSP1-HolaMundo\HolaMundo\HolaMundo.jsp

Servlet generado por el servidor


Tomcat a partir del cdigo JSP
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class HolaMundo_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
private static java.util.Vector _jspx_dependants;
public java.util.List getDependants() {
return _jspx_dependants;
}
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
JspFactory _jspxFactory = null;
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;

try {
_jspxFactory = JspFactory.getDefaultFactory();
response.setContentType("text/html");
pageContext = _jspxFactory.getPageContext(this, request, response,true, 8192, true);

Servlet generado por el servidor


Tomcat a partir del cdigo JSP
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.write("\r\n");
out.write("\r\n");
out.write("<HTML>\r\n");
out.write("<HEAD>\r\n");
out.write("</HEAD>\r\n");
out.write("<BODY>\r\n");
out.write("\r\n");
if(request.getParameter("nombre")==null){
out.write("\r\n");
out.write("\r\n");
out.write("\t<H1>Hola Mundo</H1>\r\n");
out.write("\r\n");
}else {
out.write("\r\n");
out.write("\r\n");
out.write("\t<H1>Hola ");
out.print(request.getParameter("nombre"));
out.write("</H1>\r\n");
out.write("\r\n");
}
out.write("\r\n");
out.write(" \t\r\n");
out.write("</BODY>\r\n");
out.write("</HTML>");
} catch (Throwable t) {
if (!(t instanceof SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
out.clearBuffer();
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
}
} finally {
if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
}
}
}

out.write("<TITLE>Primer ejemplo JSP</TITLE>\r\n");

Expresiones



Expresin JSP: <%= expression %>


La expresin es evaluada y situada en la salida.



El equivalente XML es


<%=request.getParameter(nombre)%>
Escribe en la salida el parmetro nombre del objeto peticin
request

<jsp:expression> expression </jsp:expression>.

Las variables predefinidas son request, response, out,


session, application, config, y pageContext.
9

Scriptlets



Scriptlet JSP: <% cdigo Java %>


El cdigo se inserta en el mtodo
service del servlet generado
El equivalente XML es:


<jsp:scriptlet>cdigo</jsp:scriptlet>

10

JSP1-HolaMundo
Scriptlets
<%if(request.getParameter("nombre")==null)
{
out.println(<H1>Hola Mundo</H1>);
}else {
out.println(<H1>Hola+
request.getParameter("nombre")+</H1>);
}
%>


Fjate que aqu se utiliza en objeto out para escribir la salida,


equivalente al PrintWriter usado en servlets
El cdigo est disponible en el directorio JSP1-HolaMundo


c:\java\JSP1-HolaMundo\HolaMundo\HolaMundo.jsp

11

Declaraciones



Declaracin JSP: <%! Cdigo Java %>


El cdigo se inserta en el cuerpo de la
clase del servlet generado, fuera del
mtodo service, como un atributo de la
clase servlet.
El equivalente XML es:


<jsp:declaration>cdigo</jsp:declaration>

12

Ejemplo de declaracin


El siguiente ejemplo implementa un


contador de visitas a una pgina

<%! private int accesos = 0; %>


Visitas a la pgina desde el arranque del servidor

<%= ++accesos %>

13

Directiva page





Directiva page JSP: <%@ page atributo=valor" %>


Dirige al motor servlet sobre la configuracin general.
El equivalente XML es: <jsp:directive.page language=java"\>.
Los atributos legales son (con los valores por defecto en negrita):












import="package.class"
contentType="MIME-Type"
isThreadSafe="true|false"
session="true|false"
buffer="sizekb|none"
autoflush="true|false"
extends="package.class"
info="message"
errorPage="url"
isErrorPage="true|false"
language="java"

14

La directiva page (2)




import="paquete.clase1,...,paquete.claseN".


contentType="MIME-Type; charset=Character-Set" Esto especifica


el tipo MIME de la salida. El valor por defecto es text/html.


Por ejemplo: <%@ page import="java.util.*" %> El atributo import es el


nico que puede aparecer mltiples veces.

Por ejemplo, la directiva: <%@ page contentType="text/plain" %> tiene el


mismo valor que el scriptlet <% response.setContentType("text/plain");
%>

isThreadSafe="true|false". Un valor de true (por defecto) indica un


procesamiento del servlet normal, donde mltiples peticiones pueden
procesarse simultneamente con un slo ejemplar del servlet.


Un valor de false indica que el servlet debera implementar


SingleThreadModel, con peticiones enviadas serialmente.

15

La directiva page (3)




session="true|false". Un valor de true (por defecto) indica que la


variable predefinida session (del tipo HttpSession) es la sesin si existe,
si no existe, se crea una nueva sesin.


Un valor de false indica que no se usarn sesiones, y los intentos de


acceder a la variable session resultarn en errores en el momento en que la
pgina JSP sea traducida a un servlet.

buffer="sizekb|none". Esto especifica el tamao del buffer para el


JspWriter out. El valor por defecto es especfico del servidor, debera
ser de al menos 8kb.
autoflush="true|false". Un valor de true (por defecto) indica que el
buffer debera descargase cuando est lleno. Un valor de false,
raramente utilizado, indica que se debe lanzar una excepcin cuando el
buffer se sobrecargue. Un valor de false es ilegal cuando usamos
buffer="none".

16

La directiva page (4)




extends="paquete.superclase". 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". Define un string que puede usarse para ser
recuperado mediante el mtodo getServletInfo.
errorPage="url". Especifica una pgina JSP que se debera procesar si
se lanzar cualquier Throwable pero no fuera capturado en la pgina
actual.
isErrorPage="true|false". Indica si la pgina actual acta o no como
pgina de error de otra pgina JSP. El valor por defecto es false.
language="java". 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.

17

Ejemplo JSP2 - TablaHTML




En el siguiente ejemplo se muestra la


construccin en JSP de una tabla de los
valores trigonomtricos
Cdigo TablaHTML.jsp: c:\java\JSP2TablaHTML\TablaHTML\TablaHTML.jsp
Claves:




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


<%! private static final DecimalFormat FMT1 = new DecimalFormat("#0");%>
<% for (double gdo = 0; gdo <= 45; gdo += 1.0) { %>

18

Directiva include


Directiva include JSP:









<%@ include file="url" %>

Un fichero del sistema local se incluir cuando


se traduce de JSP a servlet.
El equivalente XML es:
<jsp:directive.include file="url"\>.
La URL debe ser relativa.
Usamos la accin jsp:include para incluir un
fichero en el momento de la peticin en vez
del momento de la traducin.
19

Comentarios



Comentario JSP: <%-- comment --%>


Comentario ignorado cuando se traduce
la pgina JSP en un servlet.
Si queremos un comentario en el HTML
resultante, usamos la sntaxis de
comentario normal del HTML <-comment -->.
20

Objetos implcitos en pginas


JSP


Objeto application  Se corresponde con el ServletContext


obtenido mediante getServletConfig().getContext().
Objeto request  HttpServletRequest, objeto proveniente de
la peticin del cliente o de una redireccin
Objeto response  HttpServletResponse, objeto que
representa la respuesta
Objeto session  HttpSession asociado con el request (si
existe una sesin)
Objeto out  el PrintWriter (una versin con buffer del tipo
JspWriter) usada para envar la salida al cliente (navegador).

21

Convenciones en JSP



Surge la siguiente cuestin:


"Cmo estructuramos el cdigo JSP

para que sea fcil de leer, de escribir y


de mantener?

22

Ficheros y su localizacin
Tipo de Fichero Extensin Localizacin Recomendada
JSP
.jsp <contexto>/<subsystem path>/
Fragmento JSP .jsp <contexto>/<subsystem path>/
Fragmento JSP .jspf <contexto>/WEB-INF/jspf/<subsystem path>/
CCS
.css <contexto>/css/
javascript
.js <contexto>/js/
pgina HTML .html <contexto>/<ruta>/
fuente web
.gif, .jpg, etc. <contexto>/images/
TLD
.tld <contexto>/WEB-INF/tld/

23

Acceso a base de datos desde


JSP


JSP utiliza JDBC para acceder a base de


datos.
No necesita etiquetas especiales para
acceder a base de datos.

24

JSP con el cdigo de acceso a


BD incrustado


Uso de scritplets que utilizan JDBC para


acceder a la BD.
No es necesaria la captura de
excepciones, JSP hace el trabajo
automticamente.
Cuando recuperamos resultados de una
consulta aparecer cdigo HTML dentro
del bucle para ir mostrando cada fila.
25

Ejemplo JSP4-JDBC


Esta aplicacin crea una conexin con la base


de datos agenda y lista todos los contactos
de la tabla Contactos
MostrarTodos.jsp:



Cdigo: c:\java\JSP4-JDBC\MostrarTodos.jsp
El driver JDBC de la base de datos tiene que estar
includo en el directorio <contexto>/WEB-INF/lib

Los scriptlets de Java en este ejemplo estn


mezclados con el cdigo HTML haciendo difcil
el manejo y mantenimiento de esta aplicacin
26

Optimizacin del diseo de las


aplicaciones


Objetivo: separar en capas la lgica de las


aplicaciones






Vista: en pginas JSP


Modelo: para el modelo y la lgica de negocio se
van a utilizar JavaBeans y clases Java

A este modelo se le conoce como Modelo 1, y


es el primer paso para llegar al modelo MVC
Ms adelante veremos el Modelo 2 que
adems proporciona el control de la
aplicacin de forma separada. En ocasiones
tambin denominado MVC
27

Modelo 1: Acceso a travs de


Beans


Una forma habitual de utilizar BD con JSP es utilizar


componentes JavaBean de apoyo.
De esta forma mantenemos independiente la
presentacin y el acceso a datos, esto es fundamental
para facilitar el mantenimiento de la aplicacin.

28

Introduccin a JavaBeans


Qu es un JavaBean?



Un JavaBean es una clase Java


Representa un objeto del modelo, por
ejemplo un cliente
Proporciona mtodos para leer y modificar
sus variables o atributos



<tipo> getAtributo () {}
void setAtributo (<tipo> valor) {...}
29

Proceso para recuperar datos


a travs de un JavaBean




El Bean se encarga de conectar con la BD y


ejecutar la sentencia deseada.
El bean proporciona mtodos para
posicionarse en cada fila de la consulta.
A travs de las propiedades del JavaBean
podemos acceder a los valores de cada uno
de los campos.
Las propiedades de un JavaBean se
representan muy fcilmente en una pgina
JSP.
30

Accin jsp:useBean


Accin jsp:useBean



<jsp:useBean at1=val1 at2=val2 />


<jsp:useBean atri=val*> ... </jsp:useBean>

Encuentra o construye un Java Bean. Los


posibles atributos son:






id="name"
scope="page|request|session|application"
class="package.class"
type="package.class"
beanName="package.class"
31

Accin jsp:setProperty


Accin jsp:setProperty:


<jsp:setProperty atrib=val />

Modifica las propiedades del bean, bien


directamente o designando el valor que viene
desde un parmetro de la peticin.
Los atributos legales son:





name=nombre del bean"


property=propiedad del bean|*"
param=nombre del parmetro"
value=valor"
32

Accin jsp:getProperty


Accin jsp:getProperty:


<jsp:getProperty
name=nombrePropiedad" value="valor"/>

Recupera y saca las propiedades del


Bean.

33

Ejemplo de utilizacin de
<jsp:useBean>


Ejemplo de uso:


<jsp:useBean id="pool" scope="application"


class="Clientes.Pool"/>

En este ejemplo se obtiene o crea el


objeto pool, con mbito de aplicacin y
a partir del JavaBean Pool del paquete
Clientes

34

Estructura del JavaBean para


acceso a BD


Constructor del JavaBean:








Mtodo para recorrer los resultados.




conexin con la base de datos.


realizacin de la consulta.
Guardar resultados en una estructura local al Bean.
establecer los valores de las propiedades.
cerrar la conexin.
Recargando las propiedades cada vez que cambie.

Propiedades se corresponden con los campos


de la tabla.
35

Ejemplo Modelo 1.
JSP5-JDBC-CliPool


Este ejemplo de aplicacin web utiliza un


JavaBean y clases Java que permiten
recuperar resultados de una BD, usando un
pool de conexiones.



Vista: varias pginas JSP


Modelo: clases Java



BDClientes: realiza las consultas y acciones en la BD


Cliente: JavaBean que representa el objeto Cliente del
modelo
Pool: Es el objeto que conecta con la base de datos y
permite obtener la conexin cuando sea solicitada
36

Ejemplo Modelo 1.
JSP5-JDBC-CliPool (2)


Clase BDClientes, mtodos estticos:




obtenerClientes(): hace la consulta sobre la BD y


guarda resultados en un vector interno, para
visualizar en JSP.
obtenerCliente(): crea un objeto cliente a partir de
su identificador para pasarlo a la pgina JSP.
insertarCliente(): inserta un nuevo cliente dado
por el usuario en una pgina JSP.
eliminarCliente(): elimina un cliente dado por el
usuario en una pgina JSP.
37

Ejemplo Modelo 1.
JSP5-JDBC-CliPool (3)


Clase Cliente, JavaBean:




Contiene las propiedades de un cliente y los


mtodos getProp y setProp

Clase Pool, JavaBean:




Constructor: crea un objeto DataSource para la


conexin con la BD agenda
getConnection: obtiene una conexin a partir de la
asociacin de conexiones
freeConnection: cierra la conexin, devolvindola
a la asociacin de conexiones
38

Ejemplo JSP5-JDBC-CliPool
Modelo


Modelo: cdigo de las clases Java:




Clase BDClientes: c:\java\JSP5-JDBCCliPool\CliPool\WEBINF\src\Clientes\BDClientes.java


Clase Cliente: c:\java\JSP5-JDBCCliPool\CliPool\WEB-INF\src\Clientes\Cliente.java
Clase Pool: c:\java\JSP5-JDBCCliPool\CliPool\WEB-INF\src\Clientes\Pool.java

39

Ejemplo JSP5-JDBC-CliPool
Vistas (2)


Vista: cdigo de las pginas JSP




index.jsp: c:\java\JSP5-JDBC-CliPool\CliPool\index.jsp,
presenta el formulario para agregar un contacto de cliente
InsertarCliente.jsp: c:\java\JSP5-JDBCCliPool\CliPool\InsertarCliente.jsp, inserta un cliente
EliminarCliente.jsp: c:\java\JSP5-JDBCCliPool\CliPool\EliminarCliente.jsp, elimina un cliente
MostrarClientes.jsp: c:\java\JSP5-JDBCCliPool\CliPool\MostrarClientes.jsp, muestra los clientes
VerCliente.jsp: c:\java\JSP5-JDBCCliPool\CliPool\VerCliente.jsp, visualiza un cliente

40

Ejemplo JSP5-JDBC-CliPool
Ficheros de configuracin



web.xml: c:\java\JSP5-JDBC-CliPool\CliPool\WEB-INF\web.xml
Fragmento de cdigo a insertar en server.xml, entre las etiquetas
<Host>

<Context path="/JSP5-JDBC-CliPool" docBase="/JSP5-JDBCCliPool/CliPool" debug="0" reloadable="true" crossContext="true">


<Resource name="jdbc/dsAgenda"
auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/dsAgenda">
Parametros
</Context>

41

Ejemplo JSP5-JDBC-CliPool
Ficheros de configuracin (2)


Parmetros de conexin en server.xml


<parameter>
<name>username</name>
<value>curso_java</value>
</parameter>
<parameter>
<name>password</name>
<value>curso_java</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@10.1.1.36:1521:DESA</value>
</parameter>
</ResourceParams>

42

Limitaciones del Modelo 1




Tiene cierta separacin entre contenido y


presentacin, por lo que es buena para pequeas
aplicaciones Web.
El hecho que la lgica de presentacin normalmente
conduzca a una considerable cantidad de cdigo Java
embebido en el JSP en el formato de scriptlets, hace
que sea una pesadilla para los desarrolladores Java
experimentados el mantenimiento de estos sistemas.
Fjate que en el Modelo 1, JSP es responsable de:


Procesar la peticin y la respuesta al cliente (lgica de


presentacin)
Problema sobretodo para los diseadores de pginas JSP
que no programan cdigo en Java
43

Arquitectura del Modelo 2

44

Componentes en el Modelo 2


Se implementa al igual que en el Modelo 1,





la vista con pginas JSP


el modelo con clases Java o JavaBeans

En el Modelo 2 adems se implementa un


sistema de controladores (MVC)


En ste modelo, un controlador maneja las


solicitudes del usuario, en lugar de lidiar con otro
JSP.
El controlador o controller es implementado
como un servlet.
45

Misin del servlet Controlador




Aqu el servlet acta como el


Controlador y est al cargo



del procesamiento de las peticiones


de la creacin de cualquier JavaBean u
objeto usado por el JSP
as como, dependiendo de las acciones del
usuario, a qu pgina JSP redirigir la
peticin
46

Pasos en el Modelo 2


Los siguientes pasos son ejecutados cuando el usuario enva


una solicitud:
1. El servlet Controlador atiende la solicitud.
2. El servlet Controlador instancia el JavaBeans apropiado,
basado en los parmetros de la solicitud.
3. El JavaBeans se comunica con la base de datos para retirar
los datos requeridos.
4. El Controlador ajusta el JavaBeans resultante, en uno de los
siguientes contextos: request, session o aplicacin.
5. El Controlador entonces despacha la solicitud a la siguiente
vista basado en la URL solicitante.
6. La vista usa el JavaBeans del paso 3, para desplegar los
datos.
47

Ejemplo de Modelo 2


Esta pequea aplicacin ejemplifica el


uso del Modelo 2
Descripcin:



Tienda en Internet de venta de cds


El usuario dispone de un carrito de compra
donde se almacenan, usando una sesin,
los cds que este compra

48

Ejemplo de Modelo 2
Componentes


Los componentes son:




Modelo: un JavaBean que representa el


objeto del negocio CD.java
Controlador: un servlet ServletCompra.java
que realiza las redirecciones a las vistas y
la creacin de los Beans necesarios
Vista: varios ficheros .jsp que permiten al
usuario interactuar con la aplicacin
49

Ejemplo JSP8-Modelo2


Modelo: CD.java


Es una clase java que representa un CD de


msica con las propiedades siguientes:


Album, artista, pas, precio, cantidad

Mtodos: como en todo JavaBean se


proporcionan los mtodos getXXX y setXXX
Cdigo: c:\java\JSP8-Modelo2\WEBINF\src\shopping\cd.java
50

Ejemplo JSP8-Modelo2


Controlador: ServletCompra.java



Comprueba la accin a realizar


Realiza la accin insertando los valores
necesarios en la sesin, si existe
Redirige la salida a la vista adecuada

51

Ejemplo JSP8-Modelo2


Funcionamiento del controlador


ServletCompra.java:


Accin Agregar: Aade el cd seleccionado a la


sesin y redirige la salida a Tienda.jsp
Accin Borrar: Borra el cd seleccionado de la
sesin y redirige a Tienda.jsp
Accin Comprar: Calcula el total y redirige a
Comprar.jsp

Cdigo: c:\java\JSP8-Modelo2\WEBINF\src\ServletCompra.java
52

Ejemplo JSP8-Modelo2


Vistas: son las pginas JSP




Tienda.jsp: pgina de entrada, muestra el


catlogo de CDs disponibles


Carrito.jsp: esta pgina se incluye en la anterior y


muestra los cds que el usuario ha ido metiendo
en el carrito


c:\java\JSP8-Modelo2\Tienda.jsp

c:\java\JSP8-Modelo2\Carrito.jsp

Comprar.jsp: muestra el contenido del carrito y el


total a pagar cerrando la sesin
53

Ventajas del Modelo 2




Como no hay lgica de presentacin en el


JSP, no hay necesidad de demasiados
scriptlets.
Se pueden tener mltiples controladores en la
aplicacin Web,


aunque normalmente, se suele usar 1 solo.

Las aplicaciones Web son ms sencillas de


mantener y extender, ya que las vistas no
refieren unas a otras, y no hay lgica de
presentacin en ellas.
54

Accin jsp:include


Accin jsp:include:


<jsp:include page="relative URL" flush="true"/>

Incluye un fichero en el momento en que la


pgina es solicitada.
Aviso: en algunos servidores, el fichero
incluido debe ser un fichero HTML o JSP,
segn determine el servidor (normalmente
basado en la extensin del fichero).
55

Accin jsp:forward


Accin jsp:forward


<jsp:forward page="URL relativa"/>

Reenva la peticin a otra pgina.

56

Accin jsp:plugin


Accin jsp:plugin:


<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.
57

Tags personalizadas


En las pginas JSP se usa cdigo HTML, XML, Java e


incluso se usan etiquetas que encapsulan parte de la
lgica.
El uso de la etiqueta <jsp:useBean> en conjuncin
con los JavaBeans hace que podamos separar la
lgica de presentacin de la de proceso y



consigue unos archivos JSP mas claros,


y lo que es mas importante, el que escribe la JSP, no tiene
por que tener unos conocimientos avanzados de
programacin para crear pginas JSP de funcionalidades
avanzadas.

58

Tipos de etiquetas


Hay dos tipos principales de etiquetas,




etiquetas que no tienen cuerpo. Ejemplo:


<img src=canteras.gif>
etiquetas que si lo tienen. Ejemplo:
<title>Las Canteras</title> que tiene
cuerpo y etiqueta de final.

Estos son dos tipos de etiquetas que


podemos crear en Java
59

Etiquetas personalizadas JSP




JSP sigue una sintxis XML por lo tanto





Para crear etiquetas a medida debemos implementar


o heredar de otras clases




Etiquetas sin cuerpo: <jsp:etiqueta/>


Etiquetas con cuerpo: <jsp:etiqueta> </jsp:etiqueta>

Interface Tag interface general


Clase TagSupport creacin de etiquetas sin cuerpo
Clase BodyTagSupport creacin de etiquetas con cuerpo

En los ejemplos siguientes trabajaremos extendiendo


la clase TagSupport y BodyTagSupport que son
simplificaciones del interface Tag
60

Clase TagSupport


Las clase TagSupport suministra una serie de


mtodos que sobreescribiremos para crear
una etiqueta. Estos son algunos:


doStartTag(): se invoca cuando se encuentra la


etiqueta de apertura
doEndTag(): se invoca cuando se encuentra la
etiqueta de cierre
doAfterBody(): se invoca una vez se ha obtenido
el contenido del cuerpo, cuando ste existe
61

Primer ejemplo JSP6HolaMundoTag




Disearemos una etiqueta sin cuerpo que


escribir el mensaje Hola Mundo en el
cliente:



<JSP6:holamundo/>
Siguiendo la sintxis XML, de documentos bien
formateados

Cdigo y configuracin:


Clase de la etiqueta: c:\java\JSP6HolaMundoTag\WEBINF\src\ejemplos\HolaMundoTag.java


62

JSP6-HolaMundoTag


Ficheros de configuracin:


Definir el descriptor de librera de etiquetas


(Tag Library Descriptor) o TLD, en este
caso JSP6.tld: c:\java\JSP6HolaMundoTag\WEB-INF\JSP6.tld
web.xml: c:\java\JSP6HolaMundoTag\WEB-INF\web.xml

63

Tag Library Descriptor (TLD)


JSP6.tld


Este fichero de configuracin, situado en


<contexto>/WEB-INF, describe el formato del
conjunto de las etiquetas una librera.
En este caso la librera recibe el nombre de JSP6 y
describe una etiqueta de nombre holamundo
<tag>
<name>holamundo</name>
<tagclass>HolaMundoTag</tagclass>
<bodycontent>empty</bodycontent>
<info>Saludo</info>
</tag>

64

JSP6-HolaMundo
web.xml



El descriptor de despliegue de la aplicacin


JSP6-HolaMundo: web.xml
Asigna un uri a la localizacin de la librera,
para poder referirnos a ella en las pginas
JSP, en este caso mediante el uri = /JSP6
<taglib>
<taglib-uri>/JSP6</taglib-uri>
<taglib-location>/WEB-INF/JSP6.tld
</taglib-location>
</taglib>

65

JSP6-HolaMundo
HolaMundo.jsp


HolaMundo.jsp: c:\java\JSP6HolaMundoTag\HolaMundo.jsp
<!-- HolaMundo.jsp -->
<%@ taglib uri="/JSP6" prefix="JSP6"
%>
<HTML>
<HEAD>
<TITLE>Tag Hola Mundo</TITLE>
</HEAD>
<JSP6:holamundo/>
</BODY>
</HTML>
66

Pgina HolaMundo.jsp
Directiva taglib


Una directiva taglib declara las libreras de etiquetas


usadas por el JSP. Un directiva corta se declara en
una sola lnea. Si tenemos varias directivas taglib se
deben almacenar juntas en la misma localizacin
dentro del cuerpo JSP:



<%@ taglib uri=/JSP6" prefix=JSP6" %>, en este ejemplo


Slo deberamos importar libreras de etiquetas que
realmente se van a utilizar en la pgina JSP.

Desde JSP 1.2, esta altamente recomendado utilizar


la JSP Standard Tag Library en nuestra aplicacin
web para reducir la necesidad de scriptlets JSP en
nuestras pginas. Las pginas que usan JSTL son, en
general, ms fciles de leer y de mantener.
67

Constantes de las etiquetas


personalizadas





SKIP_BODY : indica en el mtodo que la


etiqueta no tiene cuerpo o que no quiere
seguir evalundolo
EVAL_PAGE : indica en el mtodo doEndTag()
que se procede a evaluar el resto de la
pgina JSP
SKIP_PAGE : indica que no se siga evaluando
la pgina JSP
EVAL_BODY_AGAIN: indica que se vuelva a
evaluar el cuerpo, en caso de bucles
68

Etiquetas personalizadas con


parmetros


Vamos a ver una etiqueta con parmetros del


tipo


<JSP6:suma num1=2 num2=3/>, que suma los


nmeros 2+3

Por cada parmetro que queremos que


soporte la etiqueta, se proporciona un
mtodo set como en un javabean
El cdigo de la clase SumaTag lo veremos a
continuacin
69

SumaTag.java


Esta etiqueta no tiene cuerpo por lo que ser


igual que la anterior excepto que se aaden
los mtodos set
Cdigo: c:\java\JSP6-HolaMundoTag\WEBINF\src\ejemplos\SumaTag.java
Mediante los mtodos set los valores de los
parmetros son cargados automticamente
en la clase
70

Modificacin del Tag Library


Descriptor (TLD)


JSP6.tld: c:\java\JSP6-HolaMundoTag\WEBINF\JSP6.tld
Uso de etiquetas para describir parmetros:
<attribute>
<name>num1</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue> </attribute>
</attribute>

<rtextprvalue> indica si tiene o no que ser


evaluada en tiempo de ejecucin
71

Etiquetas personalizadas con


cuerpo


Vamos a crear una etiqueta con cuerpo


y parmetro que realice un bucle.
<JSP7:bucle veces=7>
<JSP7:holamundo/>
</JSP7:bucle>

 cuerpo

La clase BucleTag extender la clase


BodyTagSupport

72

Ejemplo JSP7-BucleTag



BucleTag.java :c:\java\JSP7-BucleTag\WEBINF\src\ejemplos\BucleTag.java
JSP7.tld: c:\java\JSP7-BucleTag\WEBINF\JSP7.tld






<bodycontent>JSP</bodycontent>
Indica que el contenido del cuerpo puede ser
HTML, texto o etiquetas JSP

Bucle.jsp: c:\java\JSP7-BucleTag\Bucle.jsp
web.xml: c:\java\JSP7-BucleTag\WEBINF\web.xml
73

S-ar putea să vă placă și