You are on page 1of 63

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Interfaces de Usuario Avanzadas


Arquitecturas de software

Qu es la Arquitectura de Software?
La arquitectura de software es el conjunto de decisiones de diseo que, si son tomadas de forma equivocada, pueden provocar que su proyecto sea cancelado Eoin Woods

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Qu es la Arquitectura de Software?
La arquitectura de un sistema de software define al sistema en trminos de componentes computacionales e interacciones entre esos componentes

Estructura y Topologa

Arquitectura de Software
Componentes:

clientes y servidores bases de datos filtros niveles en un sistema jerrquico llamadas a procedimientos compartimiento de variables protocolos cliente servidor protocolos de acceso a BB.DD. transmisin asncrona de eventos piped streams

Interacciones:

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Arquitectura de Software
La AdS muestra la correspondencia entre los requisitos del sistema y los elementos del sistema construido (design rationale). La AdS refleja requisitos no funcionales
Capacidad Rendimiento Consistencia Compatibilidad de componentes

Diseo de Software
Ocurre en diferentes niveles Cada nivel tiene sus
Componentes: simples y complejos. Reglas de composicin: para construir componentes complejos. Reglas de comportamiento: proveen semntica para el sistema.

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Niveles de un diseo de software


Cada nivel tiene sus propios
Notacin Problemas Tcnicas de anlisis

Estn relacionados

Niveles de un diseo de software


Diseo pp. dicho

Arquitectura
Asociacin

de capacidades del sistema con componentes; los componentes son mdulos, que se pueden relacionar de distintas formas. Se utilizan operadores para guiar la composicin de subsistemas en sistemas.

Diseo bajo nivel

Cdigo Ejecutable

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Por qu es importante la AdS?


Forma la columna vertebral para construir un sistema de software. Es en gran medida responsable de permitir o no ciertos atributos de calidad del sistema (p.e. confiabilidad y rendimiento). Es un modelo abstracto reutilizable

Puede transferirse de un sistema a otro. Representa una inversin.

Representa un medio de comunicacin y discusin entre participantes del proyecto.

Estilos arquitectnicos
Patrones de diseo de AdS

Cliente-Servidor Pipes and filters Blackboard Invocacin implcita (eventos) Modelo de tres capas (multicapas) Orientado a objetos (componentes) Orientado a Servicios Intrpretes Sistemas basados en reglas

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Cliente-Servidor
Objetivo: proveer arquitectura escalable

Cada ordenador o proceso en la red es o bien cliente o bien servidor. Pasivo (esclavo). Espera peticiones. Cuando recibe una peticin, la procesa y enva respuesta. Puede conservar o no el estado de la comunicacin. Activo (maestro). Enva peticiones. Espera hasta que llega la respuesta.

Servidor:

Cliente:

Cliente-Servidor
Ejemplo: WWW
El cliente realiza una peticin utilizando el protocolo http. El servidor responde con un documento escrito en html.

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Cliente-Servidor
Escalable?

Total servidores WWW (abril 2007 [Netcraft survey]): Total ordenadores conectados : ~ 1000 M ?

165,719,150

Cliente-Servidor: variacin

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Cliente-Servidor: variacin
Arquitectura de 2 capas

Arquitectura de 3 capas

Cliente-Servidor: 3 tier architecture

16

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Arquitectura Three-tier
Capa de presentacin la capa superior es la IU. La funcin principal de la IU es traducir tareas y resultados a algo que el usuario pueda entender Capa lgica Coordina la aplicacin, procesa comandos, toma decisiones lgicas y evaluaciones y ejecuta clculos. Tambin mueve y procesa datos entre las otras dos capas. Capa de datos Aqu la informacin es almacenada y recuperada desde una base de datos o sistema de archivos. La informacin es luego devuelta a la capa lgica para ser procesada.

Arquitectura Three-tier
Caso especial del estilo multitier. Ventajas:
Componentes modulares. Cualquier componente puede ser reemplazado independientemente.

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Arquitectura de una aplicacin Web


Servidor Back-end Tier Middle Tier (RDBMS, Legacy, ...)

Client Tier
(Browser)

Arquitectura de una aplicacin Web


Servidor Client Tier
(Browser)

HTTP Server PHP Engine

MySQL DBM

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Arquitectura de una aplicacin Web


Servidor Client Tier
(Browser)

HTTP Server

MySQL RDBMS

HTML

PHP

HTML

PHP Interpreter


PHP

File system

Cliente-Servidor con Java

22

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Aplicaciones Distribuidas
Modelo Cliente-Servidor basado en la WWW

Evolucin de los contenidos en la WWW


url (extendida) Web Browser Web browser JVM
HTML Javascripts Applets

Web Server HTML (extendido)


CGI Servlets JSP ASP PHP
24

C, perl, phyton,..

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Aplicaciones Distribuidas
Applets

Pginas web estticas

26

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Pginas web estticas: html


Navegador web Texto con formato Multimedia: imgenes, sonido, plug-ins Hipertexto (links) Ejecucin de programas en el servidor (CGI's) Funcionalidades bsicas de interfaz de usuario: botones, campos, etc. .html

Clientes sin estado

.html

Cliente

Servidor
27

Pginas web dinmicas

28

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Navegador web

Pginas html dinmicas: html + Java


Pginas dinmicas:

Se ejecuta cdigo (clculos, animaciones, etc.) Interfaz grfica plena (botones, mens, dibujar, eventos, etc.) Se evita sobrecargar la CPU del servidor Se evita el trfico de datos y resultados por la red

El cdigo se ejecuta en la mquina cliente


.html

.class applet

.html

.class applet

Cliente

Servidor
29

Applets
Se ejecutan desde un navegador de pginas web (i.e. un browser de html) No requieren definir main (applets vs. aplicaciones stand-alone)

El navegador es quien invoca los mtodos del applet

Se definen creando una subclase de java.applet.Applet


class A extends Applet {...}

El navegador crea objetos de las clases de applets y los gestiona llamando a los mtodos init, start, stop, destroy, paint Programar un applet = sobreescribir estos mtodos Una vez definido un applet A, se puede incluir en un documento html con <applet code="A.class" width=500 height=20> </applet> Directorio del fichero .class: document base, codebase y packages

30

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Los mtodos propios de Applet


init(): inicializacin, papel equivalente a un constructor Invocado al cargar la pgina (en algunos browsers tambin al cargar de nuevo, pero esto no es correcto) start(): ejecuta las acciones del applet (a menudo iniciando hilos) Invocado al cargar y volver a cargar stop(): detener las acciones iniciadas con start() Invocado al abandonar la pgina, minimizar la ventana o cerrar el navegador destroy(): clean-up adicional adems de stop() Invocado al cerrar el navegador Mtodos heredados: paint, update, repaint
31

Ejemplo
HelloWorld.java import java.applet.Applet; import java.awt.Graphics; public class HelloWorld extends Applet { public void paint (Graphics g) { g.drawString ("Hello world!", 50, 25); } }

32

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Ejemplo.html <HTML> <HEAD> <TITLE> A Simple Program </TITLE> </HEAD> <BODY> Here is the output of my program: <APPLET CODE="HelloWorld.class" WIDTH=150 HEIGHT=25> </APPLET> </BODY> </HTML>

Ciclo de vida de un Applet


Carga del Applet

Al abrir la pgina web que lo contiene. Acciones:


Se crea una instancia del controlador del applet (subclase de Applet). El applet se inicializa a s mismo. init() El applet comienza a ejecutar. start() start

init destroy stop

Saliendo de y volviendo a la pgina del applet


Al ir a otra pgina o minimizar la ventana. El applet tiene la opcin de detenerse. stop() Al regresar a la pgina, el applet puede reiniciarse. start()

Recarga del applet.


Algunos navegadores permiten recargar los applets: descargarlo y volverlo a cargar. Antes de descargarlo, se le da la oportunidad de detenerse y hacer una limpieza final.

Cuando el usuario deja el navegador, el applet tiene la chance de detenerse y hacer limpieza final. destroy()
34

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Carga de un applet
La JVM del navegador carga el fichero .class indicado en <applet...>, accediendo a l a travs de la red si no es local El navegador crea una instancia de la subclase de applet definida en el fichero .class El navegador invoca el mtodo init() sobre el objeto creado El navegador invoca el mtodo start() sobre el objeto creado Si el applet utiliza una clase auxiliar: 1. 2. applet
35

El navegador comprueba si la clase ya est cargada en el cliente Si no lo est, la busca en el servidor de la pgina html

Cuando la ventana del navegador se actualiza, invoca al mtodo paint del

Ejemplo
import java.applet.Applet; import java.awt.Graphics; public class Simple extends Applet { StringBuffer buffer; void addItem (String newWord) { System.out.println (newWord); buffer.append (newWord); repaint (); } ...

Standard output: Java-console del navegador

36

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Ejemplo
... public void init () { buffer = new StringBuffer (); addItem ("initializing... "); } public void start () { addItem ("starting... "); } public void stop () { addItem ("stopping... "); } public void destroy () { addItem ("preparing for unloading..."); } public void paint (Graphics g) { //Draw a Rectangle around the applet's display area. g.drawRect (0, 0, getSize () .width - 1, getSize () .height - 1); //Draw the current string inside the rectangle. g.drawString (buffer.toString (), 5, 15); } }
37

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Un applet es una interfaz grfica AWT


Dibujar: paint, update, repaint de java.awt.Component Aadir widgets: add, remove, setLayout de java.awt.Container Un applet no requiere crear una ventana: utiliza la del navegador Un applet tiene tamao fijo, no se puede cambiar Respuesta a input del usuario: implementar p.e. java.awt.event.MouseListener
39

Un applet es una interfaz grfica AWT


Object Component
Funciones de dibujo Respuesta a eventos del usuario

Container

Aadir componentes Gestionar layout

Panel

Layout por defecto: java.awt.FlowLayout (centrado con salto de lnea)

Applet

Respuesta a eventos del navegador


40

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Respuesta a eventos: ejemplo


public class Click extends Simple implements MouseListener { public void init () { addMouseListener (this); buffer = new StringBuffer (); Mtodo de addItem ("initializing... "); Component } public void mouseClicked (MouseEvent event) { addItem ("click!... "); Mtodo de } public void mouseEntered (MouseEvent event) { } public void mouseExited (MouseEvent event) { } public void mousePressed (MouseEvent event) { } public void mouseReleased (MouseEvent event) { } }
41

MouseListener

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Agregando componentes
Applet es una subclase de container...
Luego puede tener componentes! add (Component)

Adds

the specified Component. the specified Component.

remove(Component)
Removes

setLayout (LayoutManager)
Sets

the layout manager

43

Hilos y applets
Un applet puede pertenecer a mltiples hilos. Muchos navegadores asignan un hilo para cada applet de una pgina html. Un applet puede lanzar varios hilos en start() Si un applet tiene una tarea que consume mucho tiempo, conviene realizarla en el mtodo run() de un hilo

44

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Hilos en applets: ejemplo


public class Counter extends Applet implements Runnable { boolean running = false; int counter = 0; public void run () { while (running) { repaint (); try { Thread.sleep (1000); } catch (InterruptedException e) {} } } public void paint (Graphics g) { g.drawString (String.valueOf (++counter), 5, 15); } public void start () { if (!running) { running = true; new Thread (this) .start (); } } public void stop () { running = false; } }
45

Otras funcionalidades de los applets


Parmetros: papel similar a argumentos de main o de constructor
<applet ...> <PARAM NAME=param1 VALUE=valor>... <\applet>

Mtodo getParameter(String) de Applet

Procedencia del applet


getCodeBase() getDocumentBase()

java.net.URL

La interfaz java.applet.AppletContext

Applet: getAppletContext() AppletContext AppletContext: showDocument(URL), showStatus(String), getApplet(String)

Sonido: la interfaz java.applet.AudioClip


Applet: play(URL), getAudioClip(URL) AudioClip AudioClip: play(), loop(), stop()


46

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Seguridad
Restricciones para los applets remotos: the sandbox policy

No pueden leer ni escribir en el disco local (cliente). No pueden cargar clases java locales. No pueden definir mtodos nativos ni arrancar programas en el cliente. Slo pueden realizar conexiones al servidor del que proceden. No pueden leer ciertas propiedades del sistema. Las ventanas que abre un applet tienen diferente aspecto de las que abren las aplicaciones.

Diferencias de unos navegadores a otros Para superar las restricciones: comunicarse con un programa que se ejecute en el servidor y realice las funciones deseadas.
47

Aplicaciones Distribuidas
Servlets

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Servlets
Similares a los CGI

Sintaxis ms sencilla p.e. en C: getenv (QUERY_STRING) "param1=valor1&param2=valor2&..."

Necesitan un servidor (web) especfico, p.e. Tomcat (ver www.apache.org)

Se ejecutan en el servidor Se acceden mediante un URL La sintaxis del URL depende del servidor de servlets Incluidos en Java J2EE: packages javax.servlet....

(no incluido en J2SE)

Tpicamente se utilizan para la generacin dinmica de pginas web


49

Crear un servlet
Definir una subclase de javax.servlet.http.HttpServlet Implementar alguno de los mtodos:

doGet (ServletRequest request, ServletResponse response) doPost (ServletRequest request, ServletResponse response) service (ServletRequest request, ServletResponse response)

Dar de alta el servlet en el servidor de servlets

(Ver documentacin del servidor de servlets)

50

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Ejecutar un servlet
El cliente se conecta al servlet como URL

Directamente tecleado en el navegador En un enlace HTML desde un formulario HTML En un objeto URL de java Se carga la clase del servlet Se crea una instancia Se ejecuta uno de sus mtodos

El servlet se carga (en el servidor)


El servlet se arranca (en el servidor)

El servlet termina El cliente lee la salida del servlet, tpicamente un string con cdigo HTML para una pgina web
51

Comunicacin entre cliente y servlet


Streams de entrada y salida

La salida del servlet se utiliza para generar pginas web que son enviadas al cliente La salida del cliente hacia el servlet es menos frecuente; para enviar datos al servlet normalmente se utilizan parmetros Como parte del URL: http://www.mihost.es/ miservlet? param1=valor1&param2=valor2&... Con un formulario HTML (form + input's)
52

Parmetros HTTP

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Ejemplo: salida de un servlet


public class SimpleServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter (); out.println ( // HTML source here "<HTML><HEAD><TITLE> " + "SimpleServlet Output </TITLE></HEAD>" + "<BODY> <h1> SimpleServlet Output </h1>" + "This is output is from SimpleServlet." + "</BODY></HTML>"); // End HTML source out.close (); } }

53

Salida del servlet

54

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Ejemplo: envo de parmetros


<form action="http://localhost:8080/servlet/Ejemplo"> Su nombre: &nbsp; <input type="field" name="nombre"> <br><br> Tipo de socio <blockquote> <input type="radio" name="tipo" value="individual"> Socio individual <br> <input type="radio" name="tipo" value="institucional"> Socio institucional <br> <input type="radio" name="tipo" value="estudiante"> Socio estudiante <br> </blockquote> <input type="hidden" name="escondido" value="xxx"> <input type="submit" value="Enviar"> </form>

55

Ejemplo: envo de parmetros

56

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

public class Ejemplo extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nombre = request.getParameter ("nombre"); String tipo = request.getParameter ("tipo"); String escondido = request.getParameter ("escondido"); PrintWriter out = response.getWriter (); out.println ( "<html><body>" + "Hola <b>" + nombre + "</b>, socio " + tipo + ".<br>" + "Este input: " + escondido + " era de tipo hidden." + "</body></html>" ); out.close (); } }

Salida del servlet

58

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

JavaServer Pages (JSP)


Generacin dinmica de pginas web Permiten mezclar cdigo HTML y cdigo Java

<%= expresin %> <% sentencia; %> Se pueden utilizar variables implcitas: request, response, y otras

Necesita un servidor web que soporte JSP: p.e. Tomcat Se accede igual que a una pgina html desde un navegador El servidor de JSP compila el documento JSP la primera vez que es accedido

Genera un servlet en un .java (en el servidor) Compila el servlet, lo carga, y lo ejecuta (en el servidor)

En realidad la salida no tiene por qu ser HTML: XML, etc.


59

Ejemplo
ejemplo.jsp
<html><body> Hola <b> <%= request.getParameter ("nombre") %> </b>, socio <%= request.getParameter ("tipo") %>. <br> Este input: <%= request.getParameter ("escondido") %> era de tipo hidden. </body></html>

60

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Sentencias de control
ejemplo.jsp
<html><body> Hola <b> <%= request.getParameter ("nombre") %> </b>, socio <%= request.getParameter ("tipo") %>. <br> Este input: <%= request.getParameter ("escondido") %> era de tipo hidden.<br> <% String tipo = request.getParameter ("tipo"); %> <% if (tipo.equals ("individual")) { %> Te toca pagar 5.000 ptas <% } else if (tipo.equals ("estudiante")) { %> Te toca pagar 2.000 ptas <% } else { %> Te toca pagar 50.000 ptas <% } %> </body></html>
61

Salida del documento JSP

62

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Aplicaciones Distribuidas
eXtensible Markup Language (XML)

XML
www.w3.org/XML Estndar W3C, versin 1.0 en 1998 Lenguaje de meta-marcado Intercambio de datos, grficos vectoriales, serializacin de objetos, XSL, etc. Qumica, msica, propiedades inmobiliarias, matemticas, etc. Etiquetas, elementos y atributos con estructura de rbol Validacin: DTD para restringir sintaxis Parsers: SAX, DOM, JDOM

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Estndares relacionados
XML procede de SGML

Standard Generalized Markup Language, IBM, 70s Complejidad de SGML (150 pginas para su especificacin)

XHTML es una aplicacin XML

HTML mezcla datos y formateo XML se puede ver como una generalizacin de HTML que explicita estructuras de datos

Aplicaciones XML: XSL, SVG, SMIL, MathML, RDF, SOAP...

Sintaxis XML
Estructura de rbol Elementos y atributos Cualquier etiqueta es vlida (por ejemplo, en HTML se pueden usar unos 100 tags)

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Ejemplo
Raz

<Person birth = "1912" death = "1954" > <name> <firstName> Alan </firstName>
Etiqueta

Atributo

Elemento

<lastName> Turing </lastName> </name> <profession> computer scientist </profession> <profession> mathematician </profession> <profession> cryptographer </profession>

</Person>

Validacin con DTD


Document Type Definition No es obligatorio Especifican un sublenguaje de XML

Lista de etiquetas permitidas Etiquetas y atributos permitidos dentro de cada etiqueta

Pueden ser muy complejos


Para SVG (Scalable Vector Graphics) ms de 1000 lneas Para XHTML 1.0 ms de 1,500 lneas Para DocBook ms de 11.000 lneas

Alternativa: XML Schema (versin 1.0, mayo 2001)

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Ejemplo
<!ELEMENT person (name, profession*)> <!ATTLIST person birth CDATA #IMPLIED death CDATA #IMPLIED> <!ELEMENT name (first_name, last_name)> <!ELEMENT first_name (#PCDATA)> <!ELEMENT last_name (#PCDATA)> <!ELEMENT profession (#PCDATA)>

XML en Java
Parsing de XML

Document Object Model: org.w3c.dom Simple API for XML: org.xml.sax JAXP: libreras adicionales a la SDK con extensiones a DOM y SAX

Conversin XML JavaBean: java.beans Procesamiento de XSLT 1.0: javax.xml.transform JavaServer Pages (JSP): javax.servlet.jsp (+ servidor web), slo en J2EE

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Generacin dinmica de documentos web


Generacin dinmica de documentos web

Pginas web dinmicas


En cliente

Tecnologa soportada por navegadores web JavaScript, VBScript, Java Applets, DHTML...

En servidor

URL designa un programa, admite argumentos

http://hostname:port?param1=value1&param2=value2&... - Un proceso por conexin - Sin estado - Unico proceso, un hilo por conexin - Estado: sesin, aplicacin

Estndares

Common Gateway Interface 1.1 (CGI)

C/C++, Fortran, PERL, TCL, Any Unix shell, Visual Basic, AppleScript

Java Servlets 2.3, mediados 1997 JavaServer Pages 1.2 (JSP), finales 1999

Fuente de datos: BD, XML, usuario, plataforma, otras URL's...

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Ejemplo: Yahoo! Weather Forecast

Fuente HTML
<html><head><title>Yahoo! Weather - Harare (Zimbabwe) Forecast </title></head><body><table width=100%> <tr bgcolor=CCCCFF><td><b>Harare Today</b></td></tr> <tr><td>at 1:00 pm CAT</td></tr> <tr><td> <table width=100%><tr align=center> <td rowspan=2 bgcolor=FFCC66>Currently: <br><b><font size=+2>21&ordm;C</font></b></td> <td rowspan=2 bgcolor=EEEEEE><img src=thunderstorm.gif> <br>Thunderstorms</td> <td bgcolor=FF9966>Hi: <b>27</b></td></tr> <tr align=center><td bgcolor=FFFF99>Lo: <b>18</b></td> </tr></table> ...

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

... <p><center><img src=cscale.gif></center> <p><table width=100%> <tr><td><b>Appar Temp:</b></td><td>21&deg;</td> <td><b>Dewpoint:</b></td><td>16&deg;</td></tr> <tr><td><b>Barometer:</b></td><td>1017 mb; falling</td> <td><b>Wind:</b></td><td>SE/10 mph</td></tr> <tr><td><b>Humidity:</b></td><td>73%</td> <td><b>Visibility:</b></td><td>6 mi</td></tr> </table></td></tr> </table> </body></html>

public class WeatherServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter (); out.println ( // HTML source here "<html><head><title>Yahoo! Weather - Harare (Zimbabwe) " + "Forecast</title></head><body><table width=100%>" + "<tr bgcolor=CCCCFF><td><b>Harare Today</b></td></tr>" + "<tr><td>at 1:00 pm CAT</td></tr><tr><td>" + "<table width=100%><tr align=center>" + "<td rowspan=2 bgcolor=FFCC66>Currently:" + "<br><b><font size=+2>21&ordm;C</font></b></td>" + "<td rowspan=2 bgcolor=EEEEEE>" + "<img src=thunderstorm.gif><br>Thunderstorms</td>" + "<td bgcolor=FF9966>Hi: <b>27</b></td></tr>" + "<tr align=center><td bgcolor=FFFF99>Lo: <b>18</b></td>" + "</tr></table> ...

Alvaro Ortigosa

Pgina dinmica con servlet

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

... + "<p><center><img src=cscale.gif></center>" + "<p><table width=100%>" + "<tr><td><b>Appar Temp:</b></td><td>21&deg;</td>" + "<td><b>Dewpoint:</b></td><td>16&deg;</td></tr>" + "<tr><td><b>Barometer:</b></td><td>1017 mb; falling</td>" + "<td><b>Wind:</b></td><td>SE/10 mph</td></tr>" + "<tr><td><b>Humidity:</b></td><td>73%</td>" + "<td><b>Visibility:</b></td><td>6 mi</td></tr>" + "</table></td></tr></table></body></table>" ); // End HTML source out.close (); } }

Datos en XML
<!-- weather.xml --> <weather> <city name = "Harare" country = "Zimbabwe"> <curtemp> 21 </curtemp> <maxtemp> 27 </maxtemp> <mintemp> 18 </mintemp> <appartemp> 21 </appartemp> <dewpoint> 16 </dewpoint> <barometer> 1017 </barometer> <wind> 10 </wind> <humidity> 73 </humidity> <visibility> 6 </visibility> <sky> Thunderstorms </sky> </city> ... </weather>

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Parsing de XML
En el cliente (navegador) vs. en el servidor Procesadores: SAX, DOM, otros...

Xalan: XSLT Xerces: SAX + DOM JAXP: SAX + DOM + XSLT JDOM JOX

www.apache.org www.apache.org java.sun.com www.jdom.org www.wutka.com

Parsing de XML
Aplicaciones XML

JSP

Java Beans
JOX

MathML, XSL... DOM SAX JDOM

DOM

XML

JDBC

BD
80

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Parsing de XML con XSLT


<!-- weather.xsl --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-<xsl:param name="cityName"/> <xsl:template match="weather"> <xsl:apply-templates/> </xsl:template> <xsl:template match="city[@name='$cityName']"> --> ...

... <xsl:template match="city"> <html><head><title>Yahoo! Weather <xsl:value-of select="name"/> (<xsl:value-of select="country"/>) Forecast</title></head><body> <table width="100%"> <tr bgcolor="CCCCFF"><td><b> <xsl:value-of select="name"/> Today</b></td></tr> <tr><td>at 1:00 pm CAT</td></tr> ...

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

... <tr><td><table width="100%"><tr align="center"> <td rowspan="2" bgcolor="FFCC66">Currently: <br/><b><font size="+2"> <xsl:value-of select="curtemp"/> </font></b></td> <td rowspan="2" bgcolor="EEEEEE"><img src="thunderstorm.gif"/> <br/><xsl:value-of select="sky"/></td> <td bgcolor="FF9966">Hi: <b><xsl:value-of select="maxtemp"/></b></td></tr> <tr align="center"> <td bgcolor="FFFF99">Lo: <b><xsl:value-of select="mintemp"/></b></td></tr> </table> <p/><center><img src="cscale.gif"/></center> ...

... <p/><table width="100%"> <tr><td><b>Appar Temp:</b></td><td> <xsl:value-of select="appartemp"/></td> <td><b>Dewpoint:</b></td><td> <xsl:value-of select="dewpoint"/></td></tr> <tr><td><b>Barometer:</b></td><td> <xsl:value-of select="barometer"/> mb; falling</td> <td><b>Wind:</b></td><td> <xsl:value-of select=wind"/> mph</td></tr> <tr><td><b>Humidity:</b></td><td> <xsl:value-of select="humidity"/>%</td> <td><b>Visibility:</b></td><td> <xsl:value-of select="visibility"/> mi</td></tr> </table></td></tr></table></body></html> </xsl:template> </xsl:stylesheet>

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Algunas limitaciones de XSLT


No permite seleccin ms elaborada de templates

p.e. sobre jerarqua de tipos de nodo XML

Slo tiene iteracin sobre listas de nodos (aunque permite recursin) Acceso a BD requiere cdigo Java Control de flujo va tipo por tipo de nodo, p.e. es difcil expresar:

condiciones generales para grupos de tipos de nodos condiciones sobre otros nodos circundantes

...

JDOM
Similar a DOM (documento como un rbol), sintaxis ms sencilla Fcil conversin a DOM y viceversa Clases principales: Document, Element, Attribute, Text, Comment, Namespace, ProcessingInstruction... Las clases no forman jerarqua como en DOM No es un estndar W3C www.jdom.org Document Element Attr En DOM: Node

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Recorrido y modificacin del documento/rbol

Element

Element(String name) getAttribute(String name) Attribute getAttributeValue(String name) String getChild(String name) Element getChildText(String name) String getChildren(String name) List getText() String getParent() Element

Parsing y conversiones
SAXBuilder

build(URL url) Document

Parsing de un fichero XML Conversin DOM JDOM

DOMBuilder

build(URL url) Document build(org.w3c.dom.Document) Document build(org.w3c.dom.Element) Document

DOMOutputter

output(Document) org.w3c.dom.Document output(Element) org.w3c.dom.Element output(Attribute) org.w3c.dom.Attr

Conversin JDOM DOM

XMLOutputter

output(Document doc, OutputStream out) output(Element elt, OutputStream out)

Generacin de un fichero XML

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Parsing de XML con JDOM en Servlet


public class WeatherServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String cityName = request.getParameter ("city"); PrintWriter out = response.getWriter (); Element root; try { SAXBuilder builder = new SAXBuilder(); Document doc = builder.build (new File ("weather.xml")); root = doc.getRootElement (); } catch (JDOMException ex) { ex.printStackTrace (); out.println ("<html><body>Internal error</body></html>"); out.close (); return; } ...

... Element city = null; List cities = root.getChildren ("city"); for (Iterator iter = cities.iterator (); iter.hasNext ();) { city = (Element) iter.next (); if (city.getAttributeValue ("name") .equals (cityName)) break; } if (!city.getAttributeValue ("name") .equals (cityName)) { out.println ("<html><body> City does not exist </body></html>"); out.close (); return; } ...

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

... String country = city.getAttributeValue ("country"); String curtemp = city.getChildText ("curtemp"); String maxtemp = city.getChildText ("maxtemp"); String mintemp = city.getChildText ("mintemp"); String appartemp = city.getChildText ("appartemp"); String dewpoint = city.getChildText ("dewpoint"); String barometer = city.getChildText ("barometer"); String wind = city.getChildText ("wind"); String humidity = city.getChildText ("humidity"); String visibility = city.getChildText ("visibility"); String sky = city.getChildText ("sky"); ...

... out.println ( // HTML source here "<html><head><title>Yahoo! Weather - " + cityName + " (" + country + ") Forecast</title></head>" + "<body><table width=100%>" + "<tr bgcolor=CCCCFF><td><b>" + cityName + " Today</b></td></tr>" + "<tr><td>at 1:00 pm CAT</td></tr><tr><td>" + "<table width=100%><tr align=center>" + "<td rowspan=2 bgcolor=FFCC66>Currently:" + "<br><b><font size=+2>" + curtemp + "&ordm;C</font></b></td>" + "<td rowspan=2 bgcolor=EEEEEE>" + "<img src=thunderstorm.gif><br>" + sky + "</td>" + "<td bgcolor=FF9966>Hi: <b>" + maxtemp + "</b></td></tr>" + "<tr align=center><td bgcolor=FFFF99>Lo: <b>" + mintemp + "</b>" + "</td></tr></table>" ...

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

... + "<p><center><img src=cscale.gif></center>" + "<p><table width=100%>" + "<tr><td><b>Appar Temp:</b></td><td> + appartemp + "&deg;</td>" + "<td><b>Dewpoint:</b></td><td> + dewpoint + "&deg;</td></tr>" + "<tr><td><b>Barometer:</b></td><td> + barometer + " mb; falling</td>" + "<td><b>Wind:</b></td><td>" + wind + " mph</td></tr>" + "<tr><td><b>Humidity:</b></td><td>" + humidity + "%</td>" + "<td><b>Visibility:</b></td><td> + visibility + " mi</td></tr>" + "</table></td></tr></table></body></html>" ); // End HTML source out.close (); } }

Mismo ejemplo en DOM


public class WeatherServletXSL extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String cityName = request.getParameter ("city"); PrintWriter out = response.getWriter (); DOMParser parser = new DOMParser (); try { parser.parse ("weather.xml"); } catch (SAXException ex) { ex.printStackTrace (); out.println ("<html><body>Internal error</body></html>"); out.close (); return; } Document doc = parser.getDocument (); ...

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

... Element city = null; NodeList cities = doc.getElementsByTagName ("city"); for (int i = 0; i < cities.getLength (); i++) { city = (Element) cities.item (i); if (city.getAttribute ("name") .equals (cityName)) break; } if (!city.getAttribute ("name") .equals (cityName)) { out.println ("<html><body>City does not exist</body></html>"); out.close (); return; } ...

... String country = city.getAttribute ("country"); String curtemp = city.getElementsByTagName ("curtemp") .item (0) .getNodeValue (); String maxtemp = city.getElementsByTagName ("maxtemp") .item (0) .getNodeValue (); String mintemp = city.getElementsByTagName ("mintemp") .item (0) .getNodeValue (); String appartemp = city.getElementsByTagName ("appartemp") .item (0) .getNodeValue (); String dewpoint = city.getElementsByTagName ("dewpoint") .item (0) .getNodeValue (); ...

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

... String barometer = city.getElementsByTagName ("barometer") .item (0) .getNodeValue (); String wind = city.getElementsByTagName ("wind") .item (0) .getNodeValue (); String humidity = city.getElementsByTagName ("humidity") .item (0) .getNodeValue (); String visibility = city.getElementsByTagName ("visibility") .item (0) .getNodeValue (); String sky = city.getElementsByTagName ("sky") .item (0) .getNodeValue (); ... // El resto del ejemplo igual que con JDOM...

Parsing de XML con XSLT en Servlet


public class WeatherServletXSL extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String cityName = request.getParameter ("city"); PrintWriter out = response.getWriter (); Element root; try { SAXBuilder b = new SAXBuilder(); Document doc = b.build (new File ("weather.xml")); root = doc.getRootElement (); ...

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

... Element city = null; List cities = root.getChildren ("city"); for (Iterator iter = cities.iterator (); iter.hasNext ();) { city = (Element) iter.next (); if (city.getAttributeValue ("name") .equals (cityName)) break; } if (!city.getAttributeValue ("name") .equals (cityName)) { out.println ("<html><body>City does not exist</body></html>"); out.close (); return; } ...

... XSLTProcessor processor = XSLTProcessorFactory.getProcessor ( new XercesLiaison()); XSLTInputSource xmlSource = new XSLTInputSource ( new DOMOutputter() .output (city)); // doc XSLTInputSource xslSheet = new XSLTInputSource ("weather.xsl"); XSLTResultTarget xmlResult = new XSLTResultTarget (out); // processor.setStylesheetParam ("cityName", // "'" + cityName + "'"); processor.process (xmlSource, xslSheet, xmlResult); } catch (SAXException ex) { out.println ("<html><body>Internal error</body></html>"); ex.printStackTrace (); } catch (JDOMException ex) { out.println ("<html><body>Internal error</body></html>"); ex.printStackTrace (); } out.close (); } }

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Ciclo de invocacin de JSP

Ejemplo
<%@ page import="org.jdom.*" %> <%@ page import="java.util.*" %> <!-- Mas imports... --> <% String cityName = request.getParameter ("city"); Element root; try { SAXBuilder b = new SAXBuilder(); Document doc = b.build (new File ("weather.xml")); root = doc.getRootElement (); } catch (JDOMException ex) { ex.printStackTrace (); %> <html><body> Internal error </body></html> <% return; } ...

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

... Element city = null; List cities = root.getChildren ("city"); for (Iterator iter = cities.iterator (); iter.hasNext ();) { city = (Element) iter.next (); if (city.getAttributeValue ("name") .equals (cityName)) break; } if (!city.getAttributeValue ("name") .equals (cityName)) %> <html><body> City does not exist </body></html> <%

... else { String country = city.getAttributeValue ("country"); String curtemp = city.getChildText ("curtemp"); String maxtemp = city.getChildText ("maxtemp"); String mintemp = city.getChildText ("mintemp"); String appartemp = city.getChildText ("appartemp"); String dewpoint = city.getChildText ("dewpoint"); String barometer = city.getChildText ("barometer"); String wind = city.getChildText ("wind"); String humidity = city.getChildText ("humidity"); String visibility = city.getChildText ("visibility"); String sky = city.getChildText ("sky"); %> ...

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

... <html><head><title>Yahoo! Weather <%= cityName %> (<%= country %>) Forecast</title></head><body> <table width=100%> <tr bgcolor=CCCCFF><td><b> <%= cityName %> Today</b></td></tr> <tr><td>at 1:00 pm CAT</td></tr> <tr><td><table width=100%><tr align=center> <td rowspan=2 bgcolor=FFCC66>Currently: <br><b><font size=+2> <%= curtemp %> &ordm;C</font></b></td> <td rowspan=2 bgcolor=EEEEEE><img src=/thunderstorm.gif> <br> <%= sky %> </td> <td bgcolor=FF9966>Hi: <b> <%= maxtemp %> </b></td></tr> <tr align=center><td bgcolor=FFFF99>Lo: <b> <%= mintemp %> </b></td> </tr></table> <p><center><img src=/cscale.gif></center> ...

... <p><center><img src=/cscale.gif></center> <p><table width=100%> <tr><td><b>Appar Temp:</b></td><td> <%= appartemp %>&deg; </td> <td><b>Dewpoint:</b></td><td> <%= dewpoint %>&deg; </td></tr> <tr><td><b>Barometer:</b></td><td> <%= barometer %> mb; falling</td> <td><b>Wind:</b></td><td> <%= wind %> mph</td></tr> <tr><td><b>Humidity:</b></td><td> <%= humidity %> %</td> <td><b>Visibility:</b></td><td> <%= visibility %> mi</td></tr> </table></td></tr></table></body></html> <% } %>

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Sintaxis JSP
Directivas <%@ page import="java.util.*" %> <%@ include file="abc.html" %> <%@ taglib uri="org.apache.jakarta." prefix="" %> Acciones: beans (use, get, set), include, forward, otras... <jsp:forward

Scope
Page Request Session

Session ID se genera en el servidor Se intercambia con el cliente por medio de Cookies | SSL | URL rewrite (no todos los navegadores lo soportan)

encodeURL (String url) en JSP hace URL rewrite

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Arquitectura de tres niveles


Middle Tier EIS Tier
Business Logic Enterprise Information Services

Web Client

EJB User Interface JSP

Interfaz con Java Beans


<jsp:useBean id="x" class="C" scope="..."/>

Busca un bean de la clase C asociado al nombre x Si no existe crea uno


scope

indica si el bean es visible en la pgina, peticin, sesin o aplicacin

En adelante x es tambien una variable Java que se puede utilizar en scriptlets

<jsp:getProperty name="x" property="p"/>

Devuelve x.getP

()

<jsp:setProperty name="x" property="p" value="valor"/>

Ejecuta x.setP

("valor")

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Ejemplo
// Definir clase de bean public class CityBean { String name, country, curtemp, maxtemp, mintemp, appartemp, dewpoint, barometer, wind, humidity, visibility, sky; public String getName () { return name; } public void setName (String str) { name = str; } public String getCountry () { return country; } public void setCountry (String str) { country = str; } public String getCurtemp () { return curtemp; } public void setCurtemp (String str) { curtemp = str; } ... // Etc. }

<!-- Usar el bean en JSP --> <%@ page import="org.jdom.*" %> ... // Obtener DOM Element 'city' para la ciudad pedida // (igual que en ejemplo anterior) ... // Declarar cityBean <jsp:useBean id="cityBean" class="CityBean" scope="session"/> <% // Meter los datos de city en cityBean (usando JOX) try { new JOXBeanBuilder (city) .readObject (cityBean); } catch (Exception ex) { ex.printStackTrace(); } %> ...

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

... // Usar las propiedades del bean <html><head><title>Yahoo! Weather <jsp:getProperty name="cityBean" property="name"/> (<jsp:getProperty name="cityBean" property="country"/>) Forecast</title></head><body> <table width=100%> <tr bgcolor=CCCCFF><td><b> <jsp:getProperty name="cityBean" property="name"/> Today</b></td></tr> <tr><td>at 1:00 pm CAT</td></tr> <tr><td><table width=100%><tr align=center> <td rowspan=2 bgcolor=FFCC66>Currently: <br><b><font size=+2> <jsp:getProperty name="cityBean" property="curtemp"/> &ordm;C </font></b></td> <td rowspan=2 bgcolor=EEEEEE><img src=/thunderstorm.gif> ... // Etc.

Custom action tags


Tags definidos por el programador Se utilizan en ficheros JSP como los action tags predefinidos Se ejecuta cdigo Java cuando se procesan Se agrupan por libreras de Tags Jakarta Taglibs (jakarta.apache.org/taglibs)

Dates SQL

E-mail String manipulation

XSL Otras...

Comuncacin entre tags anidados Iteracin

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Ejemplo: jakarta XSL taglib


<%@ taglib uri="http://jakarta.apache.org/taglibs/xsl-1.0" prefix="xsl" %> <xsl:apply xml="documento.xml" xsl="plantilla.xsl"/> <xsl:apply xsl="plantilla.xsl"> ... (Cdigo XML aqu) ... </xsl:apply>

Creacin de custom tags


Para cada tag se debe definir una clase java asociada, subclase de TagSupport o BodyTagSupport La clase java hereda y/o sobreescribe mtodos de TagSupport que se ejecutan en distintos momentos del procesamiento del tag Los body tags (BodyTagSupport) permiten ejecutar acciones tambin al procesar el cuerpo del tag Para cada librera de tags (conjunto de tags) se crea un fichero TLD donde se describe para cada tag:

Nombre Clase asociada Atributos que tiene

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Ejemplo de creacin de custom tag


<!-- 1. Crear fichero TLD con descripcin del tag --> <!-- mylib.tld ... <taglib> <shortname> test </shortname> -->

Nombre de la librera Nombre del tag Clase Java asociada (a definir despus) Atributos del tag

Bloque de descripcin de tag

<tag> <name> hello </name> <tagclass> HelloTag </tagclass> <attribute> name </attribute> </tag> </taglib>

// 2. Definir subclase de TagSupport o BodyTagSupport public class HelloTag extends TagSupport { private String name = "World"; // Un mtodo set por cada atributo public void setName (String str) { name = str; } // Se sobreescriben mtodos de TagSupport, como doEndTag () public int doEndTag () { try { pageContext.getOut () .print ("Hello " + name); } catch (IOException ex) { ex.printStackTrace (); } return EVAL_PAGE; } }

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

<!-- 3. Usar tag en fichero jsp --> <%@ taglib uri="mylib.tld" prefix="test" %> <html> <body> <test:hello name="Pepe"/> </body> </html>

Procesamiento de custom tags


<prefijo:nombreAccion atr1="valor1" atr2="valor2" ... > Cuerpo... </prefijo:nombreAccion> 4 doEndTag() 3 doStartTag() 1 2 setAtr1("valor1") setAtr2("valor2")

TagSupport methods

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Custom body tags


<prefijo:nombreAccion atr1="valor1" atr2="valor2" ... > Cuerpo... </prefijo:nombreAccion> 3 4 5 6 7 doStartTag() setBodyContent() doInitBody() doAfterBody() doEndTag() 1 2 setAtr1("valor1")

BodyTagSupport methods

setAtr2("valor2")

Java DataBase Connectivity (JDBC)


Programa Java
JDBC

Driver Access

Driver Oracle

Driver SQL Server

... ...

BD Access

BD Oracle

BD SQL Server
122

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

Ejemplo de programa JDBC


import java.sql.*; class Ejemplo { public static void main (String args[]) throws Exception { // Iniciar conexin con base de datos Class.forName ("ids.sql.IDSDriver"); String url = "jdbc:ids://localhost:12/conn?dsn='ejemplo'"; Connection con = DriverManager.getConnection (url); Statement stmt = con.createStatement (); ...

123

... stmt.executeUpdate ( // Crear tabla Cuentas "CREATE TABLE Cuentas " + "(numero INTEGER, saldo INTEGER, dniTitular VARCHAR(20))"); stmt.executeUpdate (// Crear tabla Clientes "CREATE TABLE Clientes " + "(nombre VARCHAR(40), dni VARCHAR(20))"); // Insertar varios registros en las tablas creadas stmt.executeUpdate ("INSERT INTO Cuentas (numero, saldo, dniTitular) " + "VALUES (123, 1000, '156898')"); stmt.executeUpdate ("INSERT INTO Cuentas (numero, saldo, dniTitular) " + "VALUES (456, 500, '230932')"); stmt.executeUpdate ("INSERT INTO Cuentas (numero, saldo, dniTitular) " + "VALUES (789, 3000, '156898')"); stmt.executeUpdate ("INSERT INTO Clientes (nombre, dni) " + "VALUES ('Juan', '156898')"); stmt.executeUpdate ("INSERT INTO Clientes (nombre, dni) " + "VALUES ('Luis', '230932')"); stmt.executeUpdate ("UPDATE Cuentas SET saldo = saldo * 1.2 " + "WHERE dniTitular = '156898' AND saldo < 2000"); stmt.executeUpdate ("DELETE FROM Cuentas WHERE saldo < 1000"); ...

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

Programacin Orientada a Objetos - Aplicaciones distribuidas

12 mayo 08

... // Realizar una consulta sobre la base de datos ResultSet rs = stmt.executeQuery ( "SELECT Clientes.nombre, Clientes.dni, " + "Cuentas.numero, Cuentas.saldo " + "FROM Cuentas, Clientes " + "WHERE Cuentas.dniTitular = Clientes.dni " + "AND Cuentas.saldo > 2000"); while (rs.next ()) { String nombre = rs.getString ("nombre"); String dni = rs.getString ("dni"); int numero = rs.getInt ("numero"); int saldo = rs.getInt ("saldo"); System.out.println (nombre + " " + dni + " " + numero + " " + saldo); } } // Fin de main }

126

Alvaro Ortigosa

E.P.S., Universidad Autnoma de Madrid

You might also like