You are on page 1of 86

Introduccin a las

Tecnologas Web
Java y Servicios Web I
Master en Ingeniera Matemtica
Manuel Montenegro
Dpto. Sistemas Informticos y Computacin
Desp. 467 (Mat)

montenegro@fdi.ucm.es

Contenidos

Clientes, servidores y puertos.

Comunicacin mediante sockets.

Tecnologas web

HTML

CSS

Applets

Servicios web

SOAP: intercambio de datos

Web scraping

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

Clientes y servidores

Un servidor es un programa que proporciona


recursos o servicios.
Un cliente es un programa que realiza
peticiones al servidor sobre estos servicios.
Clientes
Servidor
Protocolo

Protocolo

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

Puertos

Un servidor puede ofrecer distintos tipos de


servicios. Cada uno de ellos se realiza a travs
de un puerto en la mquina servidor.
Cada puerto est identificado con un nmero
entre 0 y 65535.

Servidor

20
22
25

80
110

31 Mayo-1 Junio, 2012

Puertos 1 1024
Reservados para el S.O. y para
protocolos conocidos.
Puertos 1024 49151
Pueden ser usados para cualquier
aplicacin.
Puertos 49152 65535
Dinmicos/privados.

11. Introduccin a las tecnologas web

Puertos
Servidor web

Cliente web
80

Servidor de
correo

Protocolo HTTP

Cliente de
correo
110
25
143

Protocolo POP3

Protocolo SMTP
Protocolo IMAP

Driver JDBC

Servidor
MySQL
3306

31 Mayo-1 Junio, 2012

SQL

11. Introduccin a las tecnologas web

Contenidos

Clientes, servidores y puertos.

Comunicacin mediante sockets.

Tecnologas web

HTML

CSS

Applets

Servicios web

SOAP: intercambio de datos

Web scraping

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

Comunicacin mediante sockets

Los sockets conforman el mtodo ms rudimentario


de comunicacin sobre los protocolos TCP/IP.
Para que un cliente pueda conectarse a un servidor,
necesita:

Direccin IP dnde localizar al servidor.


Cuatro nmeros entre 0 y 255. (Ej: 147.96.80.110)
Nmero de puerto, en el programa servidor est a la
espera.

Tambin sirve un nombre del dominio, en lugar de


una direccin IP: www.ejemplo.com

Servidor DNS: Asocia cada nombre con su IP.

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

Comunicacin mediante sockets

Una vez establecido un socket entre dos


ordenadores, la comunicacin se realiza
mediante dos canales de datos, de la misma
manera en la que se accede un archivo en Java.

Servidor
Cliente
InputStream

OutputStream

OutputStream

InputStream

5555

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

Creacin de sockets en Java

Caso sencillo:

El cliente enva un nmero al servidor.


El servidor devuelve el nmero recibido elevado al
cuadrado.

Servidor
Cliente
InputStream

OutputStream
7

5555

49

OutputStream

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

InputStream

La clase ServerSocket

Paquete java.net
Un objeto ServerSocket espera la conexin de
un cliente a travs de la red.
Constructores:

puerto

ServerSocket(int puerto)
ServerSocket(int puerto, int longCola)

Mtodos:

public Socket accept() throws IOException

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

10

La clase Socket

Representa una conexin particular entre un


cliente determinado y un servidor.
Constructor:

Socket(String host, int puerto)

Mtodos:

public InetAddress getInetAddress()


public InputStream getInputStream()
public OutputStream getOutputStream()

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

11

Ejemplo
public class ServidorCalculo implements Runnable {
public void run() {
ServerSocket server = null;
Socket s = null;
Scanner sc = null;
PrintWriter pw = null;
try {
server = new ServerSocket(5555);
System.out.println("Escuchando en el puerto 5555");
while (true) {
s = server.accept();
System.out.println("Recibida conexin desde " + s.getInetAddress());
sc = new Scanner(s.getInputStream());
int n = sc.nextInt();
System.out.println("He recibido un " + n);
pw = new PrintWriter(s.getOutputStream());
pw.print(n*n);
pw.flush();
pw.close();
sc.close();
}
} catch (IOException e) { e.printStackTrace(); }
finally {
if (s != null) try { s.close(); } catch (IOException e) {}
if (server != null) try {server.close();} catch (IOException e) {}
}
}

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

12

Ejemplo
public class ServidorCalculo implements Runnable {

public static void main(String[] args) {


Thread t = new Thread(new ServidorCalculo());
t.setDaemon(true);
t.start();
System.out.println("Pulsa INTRO para terminar.");
Scanner sc = new Scanner(System.in);
sc.nextLine();
}
}

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

13

Ejemplo
public class ClienteCalculo {
public static void main(String[] args) {
Socket s = null;
PrintWriter pw = null;
Scanner sc = null;
try {
s = new Socket("localhost", 5555);
pw = new PrintWriter(s.getOutputStream());
pw.println(7);
pw.flush();
sc = new Scanner(s.getInputStream());
int result = sc.nextInt();
System.out.println("He recibido un " + result);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
sc.close();
pw.close();
try {s.close();} catch (IOException e) {}
}
}
}

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

14

Ejemplo

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

15

Otro ejemplo: servidor


public class UppercaseServer {
public static void main(String[] args) throws Exception {
ServerSocket server = null;
Scanner scIn = null;
PrintWriter pwOut = null;
try {
// Esperar conexin con cliente
server = new ServerSocket(5555);
System.out.println("Esperando conexin");
Socket s = server.accept();
System.out.println("Conexin establecida con " + s.getInetAddress());
// Obtener lneas de texto a partir del cliente,
// hasta recibir una lnea en blanco
scIn = new Scanner(s.getInputStream());
String str;
ArrayList<String> lineas = new ArrayList<String>();
do {
str = scIn.nextLine();
System.out.println("Recibido: " + str);
lineas.add(str);
} while (!str.isEmpty());
..

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

ArrayList para
almacenar las
cadenas recibidas

16

Otro ejemplo: servidor


// Recorrer las lneas de texto recibidas, convertirlas a
// maysculas, y devolverlas al cliente.
pwOut = new PrintWriter(s.getOutputStream());
for (String linea : lineas) {
System.out.println("Envo: " + linea.toUpperCase());
pwOut.println(linea.toUpperCase());
pwOut.flush();
}
} finally {
if (pwOut != null) pwOut.close();
if (scIn != null) scIn.close();
if (server != null) server.close();
}
}

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

17

Otro ejemplo: cliente


public class SingleClient {
public static void main(String[] args) throws Exception {
Socket s = new Socket("localhost", 5555);
Scanner sc = new Scanner(System.in);
PrintWriter pw = new PrintWriter(s.getOutputStream());
String str = null;
do {
Enviar al servidor
System.out.print("CLIENTE >>> ");
las lneas ledas
str = sc.nextLine();
de teclado, hasta
pw.println(str);
encontrar una lnea
pw.flush();
en blanco
} while (!str.isEmpty());
Scanner scOut = new Scanner(s.getInputStream());
while (scOut.hasNextLine()) {
System.out.println(scOut.nextLine());
}
scOut.close();
pw.close();
s.close();

Imprimir la
respuesta del
servidor

}
}
31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

18

Ejemplo

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

19

Y si...?
public class SingleClient {
public static void main(String[] args) throws Exception {
Socket s = new Socket("www.mat.ucm.es", 80);
...
}
}

Servidor web

Cliente web
80

31 Mayo-1 Junio, 2012

Protocolo HTTP

11. Introduccin a las tecnologas web

20

Contenidos

Clientes, servidores y puertos.

Comunicacin mediante sockets.

Tecnologas web

HTML

CSS

Applets

Servicios web

SOAP: intercambio de datos

Web scraping

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

21

Lenguaje HTML

HTML HyperText Markup Language.


Lenguaje para definicin de la estructura y
contenido de pginas web.
Es un lenguaje de marcado: texto sin formato
al que se aaden etiquetas (tags) para definir
su estructura.

Etiquetas de inicio: <etiqueta>

Etiquetas de cierre: </etiqueta>

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

22

Primer ejemplo en HTML


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Primer ejemplo en HTML</title>
</head>
<body>
Sencillo, no?
<!-- Esto es un comentario -->
</body>
</html>

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

23

Primer ejemplo en HTML


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
Tipo de
<head>
documento HTML
<title>Primer ejemplo en HTML</title>
</head>
<body>
Sencillo, no?
<!-- Esto es un comentario -->
</body>
</html>

La primera lnea indica qu tipo de documento HTML se


define con esta pgina.

HTML estndar, versin 4 (W3C)

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

24

Primer ejemplo en HTML


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
Cabecera
<title>Primer ejemplo en HTML</title>
</head>
<body>
Sencillo, no?
<!-- Esto es un comentario -->
</body>
</html>

La cabecera incluye informacin general sobre la pgina:

Ttulo.

Hojas de estilo, etc.

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

25

Primer ejemplo en HTML


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Primer ejemplo en HTML</title>
</head>
<body>
Sencillo, no?
Cuerpo
<!-- Esto es un comentario -->
</body>
</html>

El cuerpo contiene el contenido de la pgina.

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

26

Primer ejemplo en HTML

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

27

Estructurar contenido

Uno o ms saltos de lnea se consideran como


un nico espacio en blanco.
Dos o ms espacios en blanco se consideran
como uno solo.
Para estructurar el texto en prrafos, se utiliza
la etiqueta <p>.
<body>
<p>Sencillo, no?</p>
<p>Esto es otro parrafo</p>
</body>

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

28

Caracteres especiales

Para introducir un carcter especial


(incluyendo tildes), se utilizan las entidades
HTML, precedidas por (&) y acabadas en (;)

&aacute;

&eacute;

&iacute;

&oacute;

&uacute;

&ntilde;

<
&lt;

>
&gt;

<body>
<p>Sencillo, no?</p>
<p>Esto es otro p&aacute;rrafo</p>
</body>

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

29

Encabezados

Desde <h1> </h1> hasta <h6> </h6>

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

30

Resaltado de fragmentos de texto

Se realiza mediante <strong> y <em>.


<body>
<p>La estructura y el contenido de un documento se
define mediante <strong>HTML</strong>, que
agrupa el contenido del texto en <em>etiquetas</em>.</p>
</body>

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

31

Hiperenlaces

Se insertan mediante la etiqueta <a>.


<a href=direccion destino>Texto del enlace</a>

<body>
<p>Haga click <a href=http://www.google.com>aqu&iacute;</a>
para ir al buscador</p>
<p>Mediante <a href=Ej1.html>este enlace</a>
se salta al archivo Ej1.html contenido en el mismo
directorio que &eacute;ste</p>
</body>

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

32

Imgenes
<img src=url imagen></img>
<img src=url imagen/>

Se permiten los formatos JPEG, GIF y PNG.


<body>
<p>Logotipo de la universidad</p>
<p><img src="logoucm.jpg"/></p>
</body>

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

33

Listas numeradas y no numeradas


<ul>
<li>Elemento</li>
<li>Otro elemento</li>
<li>Y otro m&aacute;s</li>
</ul>

<ol>
<li>Elemento</li>
<li>Otro elemento</li>
<li>Y otro m&aacute;s</li>
</ol>

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

34

Tablas
<table>
Fila
<tr>
<th>Nombre</th>
Celda de cabecera
<th>Apellidos</th>
<th>Fecha de Nacimiento</th>
</tr>
<tr>
<td>Ignacio</td>
Celda
<td>Domingo Villanueva</td>
<td>28-08-1970</td>
</tr>
<tr>
<td>Luis</td>
<td>Cid Gallego</td>
<td>20-10-1975</td>
</tr>
</table>

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

35

Contenidos

Clientes, servidores y puertos.

Comunicacin mediante sockets.

Tecnologas web

HTML

CSS

Applets

Servicios web

SOAP: intercambio de datos

Web scraping

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

36

Hojas de estilo en cascada

HTML tiene etiquetas para definir el aspecto de los


elementos de la pgina, pero su uso est desaconsejado.
CSS (Cascading Style Sheets) es un lenguaje utilizado para
definir la presentacin de un documento, mediante hojas
de estilo.
Las hojas de estilo se definen en un documento distinto
al HTML, y se referencian desde este ltimo.
Se pueden referenciar varias hojas de estilo desde un
nico HTML, y hacer que tengan efecto segn el
dispositivo en el que se visualiza el documento.

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

37

Ejemplo

Fuente: http://es.wikipedia.org/wiki/HTML
31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

38

Ejemplo

Una hoja de estilo CSS est formada por una


serie de bloques de la siguientes forma:
etiqueta {
atributo1: valor1;
atributo2: valor2;

atributon: valorn;
}

Lista de atributos:

http://www.w3schools.com/css/default.asp

http://www.w3.org/Style/CSS/

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

39

Ejemplo
body {
font-family: sans-serif;
background-color: #E0FFE0;
}
h1 {
background-color: #0AFF0A;
text-align:right;
padding:8px;
color: #006000;
}
em {
font-style: normal;
color: #00A000;
}
p {
text-align:justify;
margin-left:20px;
margin-right:20px;
}
a {
color: #A0A000;
}
31 Mayo-1 Junio, 2012

Tipo de letra
Color de fondo verde claro
Color de fondo verde
Justificacin a la derecha
Mrgenes interiores
Color de texto
No utilizar cursiva
Color verde

Justificacin a mrgenes
Mrgenes de 20 pxeles

Enlaces de color amarillo

11. Introduccin a las tecnologas web

40

Ejemplo

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

41

Enlaces a hojas de estilo


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Ejemplo con hojas de estilo</title>
<link rel="stylesheet" href="Ej5.css" type="text/css"/>
</head>
<body>

</body>
</html>

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

42

Clases de elementos

Se pueden definir clases en los elementos


HTML, y aplicar un determinado estilo a los
elementos de esa clase.
etiqueta.clase {
atributo1: valor1;
atributo2: valor2;

atributon: valorn;
}

<etiqueta class=clase>

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

43

Clases de elementos
...
p.inicial {
border: 2px dashed green;
margin-left: 50px;
padding: 13px;
font-style: italic;
}

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

44

Contenidos

Clientes, servidores y puertos.

Comunicacin mediante sockets.

Tecnologas web

HTML

CSS

Applets

Servicios web

SOAP: intercambio de datos

Web scraping

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

45

Interactividad en pginas web

El lenguaje de marcador HTML, por s solo, no


tiene etiquetas para generar contenido
dinmicamente.
Aunque proporciona etiquetas para manejo de
formularios, el lenguaje no puede procesar la
informacin introducida por el usuario.

Se enva al servidor, y ste la interpreta y procesa.

Para crear pginas web de contenido no


esttico, hay que complementar HTML con
lenguajes y tecnologas adicionales.

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

46

Tecnologas Web
Servidor web

Cliente
80

Protocolo HTTP

Javascript
Actionscript / Flash
Applets Java

PHP
ASP
Servlets / JSP

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

47

Applets de Java

Los applets son aplicaciones Java integradas


en el contenido de una pgina web.
Requieren un aadido (plug-in) en en
navegador para ejecutar applets.
Con respecto a las aplicaciones autnomas, los
applets tienen ciertas restricciones de
seguridad.

Por ejemplo, no pueden acceder a los ficheros del


cliente.

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

48

Creacin de applets

Para crear un applet hay que extender la clase


JApplet.
La clase utiliza unos mtodos que pueden ser
reescritos en la subclase.

public
public
public
public

31 Mayo-1 Junio, 2012

void
void
void
void

init()
start()
stop()
destroy()

11. Introduccin a las tecnologas web

49

Ejemplo
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class AppletSaludo extends JApplet implements ActionListener {
public JTextField texto;
public void init() {
JPanel p = new JPanel();
texto = new JTextField(10);
p.setLayout(new FlowLayout());
p.add(new JLabel("Nombre:"));
p.add(texto);
JButton b = new JButton("Saludar");
b.addActionListener(this);
p.add(b);
Container content = getContentPane();
content.setLayout(new BorderLayout());
content.add(p);
}
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "Hola " + texto.getText() + "!");
}
}

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

50

Ejemplo

Incrustar applets en pginas web: Etiqueta


<applet>

<p>A continuaci&oacute;n se mostrar&aacute;


el applet <em>AppletSaludo</em></p>
<applet code="AppletSaludo" width="300" height="40"/>

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

51

Contenidos

Clientes, servidores y puertos.

Comunicacin mediante sockets.

Tecnologas web

HTML

CSS

Applets

Servicios web

SOAP: intercambio de datos

Web scraping

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

52

Servicios web

Un servicio web es una aplicacin que


proporciona una funcionalidad a travs del
protocolo HTTP.
Un ejemplo de ello son las aplicaciones web a
las que accedemos a travs de los navegadores
web.
Generalmente, el trmino servicios web hace
referencia al acceso a estas aplicaciones desde
un programa que no sea un navegador web.

y que, a veces, no tiene interfaz grfica.

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

53

Servicios web

Los servicios web fomentan el desarrollo de


aplicaciones distribuidas, posiblemente
escritas en lenguajes distintos.

interoperabilidad

Los datos se transmiten en lenguaje XML.

Servidor web

Cliente
80

31 Mayo-1 Junio, 2012

Protocolo HTTP (leng. XML)

11. Introduccin a las tecnologas web

54

Lenguaje XML

XML Extensible Markup Language.

Generalizacin/simplificacin de HTML.

Desarrollado para el intercambio de datos


entre aplicaciones.
<persona dni=74612153V>
<nombre>Alfonso</nombre>
<apellidos>Prez Fernndez</apellidos>
<fecha-nacimiento>
<dia>26</dia>
<mes>3</mes>
<ao>1974</ao>
</fecha-nacimiento>
</persona>

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

55

Ejemplo de servicio web

Servicio web que devuelve el da actual.

Interfaz:

package fecha;

public interface ServidorFecha {


Fecha getFechaHoy();
String getCadenaFecha();
}

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

56

Ejemplo de servicio web

Servicio web que devuelve el da actual.

Interfaz (SEI Service Endpoint Interface)

package fecha;
import javax.jws.*;

Paquete donde estn definidas


las anotaciones

@WebService
public interface ServidorFecha {
@WebMethod Fecha getFechaHoy();
@WebMethod String getCadenaFecha();
}
Anotaciones

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

57

Ejemplo de servicio web

Servicio web que devuelve el da actual.

Implementacin (SIB Service Implementation Bean):

package fecha;
import java.util.*;
import javax.jws.*;

Nombre de
@WebService(endpointInterface = "fecha.ServidorFecha")
la interfaz
public class ServidorFechaImpl implements ServidorFecha {
public Fecha getFechaHoy() {
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(new Date());
return new Fecha(gc.get(GregorianCalendar.DAY_OF_MONTH),
gc.get(GregorianCalendar.MONTH) + 1,
gc.get(GregorianCalendar.YEAR));
}
public String getCadenaFecha() { return getFechaHoy().toString(); }
}

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

58

La utilidad wsgen

Genera artefactos que sirven para la


publicacin de la clase como servicio web.
En el directorio que contiene el paquete fecha,
teclear lo siguiente desde una terminal:
wsgen -cp . fecha.ServidorFechaImpl
Classpath de
Java. Directorio
donde se encuentra
el paquete raz

31 Mayo-1 Junio, 2012

Nombre de la
clase que implementa
el servicio web (SIB)

11. Introduccin a las tecnologas web

59

La utilidad wsgen

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

60

Publicar el servicio web

Existe software especfico para la publicacin


de servicios web:

BEA WebLogic

JBoss

GlassFish

WebSphere

En entornos de desarrollo, se suele crear una


pequea clase Java que publique el servicio.

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

61

Publicar el servicio web


package fecha;
import javax.xml.ws.Endpoint;
class ServicioFechaPublisher {
public static void main(String[ ] args) {
Endpoint.publish("http://localhost:8888/fecha", new ServidorFechaImpl());
System.out.println("Servicio web publicado correctamente.");
}
}

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

62

Publicar el servicio web


package fecha;
import javax.xml.ws.Endpoint;

Instancia del SIB


class ServicioFechaPublisher { URL de publicacin
public static void main(String[ ] args) {
Endpoint.publish("http://localhost:8888/fecha", new ServidorFechaImpl());
System.out.println("Servicio web publicado correctamente.");
}
}

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

63

WSDL

WSDL Web Services Description Language


Archivo en formato XML que describe la
interfaz pblica a los servicios web.
Define las operaciones que ofrece el servicio
web, as como el tipo de los parmetros y valor
de retorno de cada una de ellas.
Puede ser accedido a partir de la direccin
http://localhost:8888/fecha?wsdl

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

64

WSDL

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

65

Cliente del servicio web

La utilidad wsimport genera automticamente


las clases necesarias para desarrollar clientes
de un servicio web, a partir de la descripcin
WSDL del mismo.
Mantener los .java
de las clases
generadsa

wsimport -p fecha_client -keep http://localhost:8888/fecha?wsdl

Nombre del paquete


donde guardar
las clases creadas
31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

URL del archivo


WSDL

66

Cliente del servicio web

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

67

Cliente del servicio web


import fecha_client.*;
public class ClienteFecha {
public static void main(String[] args) {
ServidorFechaImplService servicio = new ServidorFechaImplService();
ServidorFecha sf = servicio.getServidorFechaImplPort();
System.out.println(sf.getCadenaFecha());
Fecha f = sf.getFechaHoy();
System.out.println("Ao: " + f.getAo());
}
}

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

68

Servicio de tiempo meteorolgico

Informacin en:
http://www.webservicex.net/ws/WSDetails.aspx?WSID=56&CATID=12

Sirve para obtener la temperatura en una


ciudad del mundo determinada.
Mtodos del servicio:

String getCitiesByCountry(String country)


String getWeather(String city, String country)

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

69

Acceso al WSDL

Generamos los artefactos Java:


wsimport -p tiempo -keep -extension
http://www.webservicex.net/globalweather.asmx?WSDL

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

70

Desarrollo del cliente


import tiempo.*;
public class TiempoClient {
public static void main(String[] args) {
GlobalWeather servicio = new GlobalWeather();
GlobalWeatherSoap gw = servicio.getGlobalWeatherSoap();
String cad = gw.getCitiesByCountry("Spain");
System.out.println(cad);
}
}

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

71

Desarrollo del cliente

Formato XML

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

72

Intrpretes XML

Cmo extraer la informacin deseada a partir


de un documento XML?
Dos posibilidades:
1) Extraccin mediante expresiones regulares.
2) Extraccin mediante las libreras de Java para el
manejo de XML: JAXP

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

73

Mtodo 1 Expresiones regulares


import tiempo.*;
import java.util.regex.*;
public class TiempoClientRegEx {
public static void main(String[] args) {
GlobalWeather servicio = new GlobalWeather();
GlobalWeatherSoap gw = servicio.getGlobalWeatherSoap();
String ciudades = gw.getCitiesByCountry("Spain");
Pattern pat = Pattern.compile("<City>(.*)</City>");
Matcher m = pat.matcher(ciudades);
while(m.find()) {
System.out.println(m.group(1));
}
}
}

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

74

Mtodo 2 - JAXP
NewDataSet

Table
Country

City

Vitoria

31 Mayo-1 Junio, 2012

Table
Country

Table

City

Country

Vigo/Peinador

11. Introduccin a las tecnologas web

City

Sevilla / San Pablo

75

Mtodo 2 JAXP
import
import
import
import

tiempo.*;
javax.xml.parsers.*;
org.w3c.dom.*;
java.io.*;

public class TiempoClientJAXP {


public static void main(String[] args) throws Exception {
GlobalWeather servicio = new GlobalWeather();
GlobalWeatherSoap gw = servicio.getGlobalWeatherSoap();
String ciudades = gw.getCitiesByCountry("Spain");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document documento = db.parse(new ByteArrayInputStream(ciudades.getBytes()));
NodeList elems = documento.getElementsByTagName("City");
for (int i = 0; i < elems.getLength(); i++) {
System.out.println(elems.item(i).getFirstChild().getNodeValue());
}
}
}

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

76

Mtodo 2 - JAXP
documento.getElementsByTagName("City");
NewDataSet

Table
Country

City

Vitoria

31 Mayo-1 Junio, 2012

Table
Country

Table

City

Country

Vigo/Peinador

11. Introduccin a las tecnologas web

City

Sevilla / San Pablo

77

Mtodo 2 - JAXP
elems.item(1)
NewDataSet

Table
Country

City

Vitoria

31 Mayo-1 Junio, 2012

Table
Country

Table

City

Country

Vigo/Peinador

11. Introduccin a las tecnologas web

City

Sevilla / San Pablo

78

Mtodo 2 - JAXP
elems.item(1).firstChild()
NewDataSet

Table
Country

City

Vitoria

31 Mayo-1 Junio, 2012

Table
Country

Table

City

Country

Vigo/Peinador

11. Introduccin a las tecnologas web

City

Sevilla / San Pablo

79

Mtodo 2 - JAXP
elems.item(1).firstChild().getNodeValue()
NewDataSet

Table
Country

City

Vitoria

Table
Country

Table

City

Country

Vigo/Peinador

City

Sevilla / San Pablo

Vigo/Peinador
31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

80

Contenidos

Clientes, servidores y puertos.

Comunicacin mediante sockets.

Tecnologas web

HTML

CSS

Applets

Servicios web

SOAP: intercambio de datos

Web scraping

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

81

Web scraping

Poor man's web service.


Extraccin automtica de datos a partir de una
pgina web en formato HTML.
Se utiliza en aquellos casos donde el
proveedor de informacin no proporciona un
servicio de acceso a la misma.
La informacin deseada suele obtenerse
mediante ajustes de expresiones regulares.

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

82

Ejemplo

Acceso a lneas de EMT

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

83

Ejemplo

Acceso a lneas de EMT

import java.net.*;
import java.util.*;
import java.util.regex.*;
public class LineasEMT {
public static void main(String[] args) throws Exception {
URL url = new URL("https://www.emtmadrid.es");
URLConnection con = url.openConnection();
Scanner sc = new Scanner(con.getInputStream());
Pattern p = Pattern.compile("<option value=\"[^\"]*\" linea=\"[^\"]*\" +
title=\"[^\"]*\">(.*)</option>");
while(sc.hasNextLine()) {
String linea = sc.nextLine();
Matcher m = p.matcher(linea);
if (m.find()) { System.out.println(m.group(1)); }
}
}
}
31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

84

Ejemplo

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

85

Referencias

P. Deitel, H. Deitel
Java. How to Program (9th Edition)
Cap. 23, 27
M. Kalin
Java web services: up and running
O'Reilly Media

http://www.w3schools.com/html/

http://www.w3schools.com/css/

31 Mayo-1 Junio, 2012

11. Introduccin a las tecnologas web

86

You might also like