HTTP, CGI, Applets,
Servlets y SOAP
Sistemas de Operación II
CI-4821 Sep-Dic 2005
Abreu Román 97-29181
García Irene 01-33903
Osers Pablo 01-34232
Otero M. Cristina 01-34234
Teja Carolina 01-34483
Aplicaciones de
Internet
World Wide Web



Es un sistema de hipertexto que funciona sobre Internet.
Nació gracias a Tim Berners-Lee en 1990.
Combina tres tecnologías:

Documentos hipertexto.
 Recuperación de información a través de la red.
 SGML (Lenguaje Estandarizado de Marcado General).
HTML (Hipertext Markup Language)




Es un lenguaje de marcas diseñado para estructurar textos y
presentarlos en forma de hipertexto.
Fue definido por Tim Berners-Lee y luego desarrollado por la IETF.
Está basado en SGML.
Las etiquetas son breves instrucciones de comienzo y final que
determinan la forma como aparece el texto y las imágenes en el
navegador.
HTML

Ejemplo
<html>
<head>
<title>Ejemplo de una p&aacute;gina
web</title>
</head>
<body>
<center>
<h1>Mi p&aacute;gina principal</h1>
<img src=“/imágenes/miFoto.gif”>
<a href=“/doc.miCV.html”>Mi curriculum
vitae</a>
</center>
</body>
</html>
XML (Extensible Markup Language)




Es un lenguaje de marcas cuyo propósito es facilitar el
compartir datos a través de diferentes sistemas.
Es desarrollado por el World Wide Web Consortium
(W3C).
Se basa en SGML.
Se utiliza en protocolos tales como SOAP para llamadas
a procedimientos remotos basados en la web.
XML

Ejemplo
<mensaje>
<para> [email protected]</para>
<de>[email protected]</de>
<tema> Esto es un mensaje</tema>
<texto>
¡Hola mundo!
</texto>
</mensaje>
HTTP (Hiper Text Trnasfer Protocol)



Es un protocolo orientado a conexión, sin estado y de
petición-respuesta.
Está basado en el modelo cliente-servidor.
Cada petición y cada respuesta están compuestas por
las siguientes partes:
1.
2.
3.
4.
La línea de petición/respuesta.
Una sección de cabecera.
Una línea en blanco.
El cuerpo.
HTTP
La petición del cliente
Formato:

<método HTTP><espacio><URI solicitado><espacio><especificación del
protocolo>\r\n
Método HTTP:
GET  para solicitar un URL específico
 HEAD  para solicitar la cabecera del servidor
 POST  para enviar datos al servidor
 PUT  para subir archivos a un URI en el servidor web

HTTP
La petición del cliente
URI solicitado:

/<nombre de directorio>.../<nombre de directorio>/<nombre de fichero>
Especificación del protocolo: compuesto por el nombre y la
versión del protocolo usado por el cliente.
HTTP
Cabecera de la petición
Formato:
<clave>: <valor>\r\n
Claves:

Accept  tipo de contenido aceptado por el cliente
 User-Agent  tipo de navegador
 Connection  para especificar <<Keep-Alive>>
 Host  nombre de la máquina servidor

HTTP

Ejemplo
GET /invest/default.html HTTP/1.0
Accept: text/plain
Accept: text/html
Accept: audio/*
Accept: video/mpeg
.. .. ..
User-Agent: Mozilla/3.0 (WinNT; I)
Línea en blanco
HTTP

La respuesta del servidor
1. Línea de estado.
2. Una sección de cabecera.
3. Una línea en blanco.
4. El cuerpo.
HTTP
La línea de estado
Formato:

<protocolo><espacio><código de
estado><espacio><descripción>\r\n
Códigos de estado:





100-199: Informativo
200-299: Petición del cliente satisfactoria
300-399: Petición del cliente redirigida
400-499: Petición del cliente incompleta
500-599: Errores del servidor
HTTP

Ejemplos

HTTP/1.0 200 Ok
 HTTP/1.1 403 Forbidden
 HTTP/1.0 404 Not Found
 HTTP/1.0 503 Service Unavailable
HTTP
Cabecera de la respuesta
Formato:
<clave>: <valor>\r\n
- Líneas de respuesta:

Age: segundos
Location: URI
Retry-After: fecha|segundos
Server: cadena
WWW-authenticate: método de autenticación
HTTP

Cabecera de la respuesta
- Líneas de entidad:
Content-Encoding
Content-Length
Content-Type: tipo/subtipo
Expires: fecha
Last-Modified: fecha
HTTP

Cuerpo de la respuesta
Date: Mon, 30 Oct 2002 18:52:08 GMT
Server: Apache/1.3.9 (Unix) ApacheJServ/1.0
Last-Modified: Mon, 17 June 2001 16:45:13 GMT
Etag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Content-Length: 1255
Connection: close
Content-Type: text/html
<html>
…
</html>
HTTP

Tipos de contenido y
MIME (Multipurpose
Internet Mail Extension)
Es un protocolo para
especificar el tipo de
contenido.
TIPO
SUBTIPO
text
Plain, rich text, xml
message
Email, news
application
Adobepostscript,
xml, .class
image
Jpeg, gif
audio
basic, midi, mp3
video
mpeg, quicktime
HTTP

Un cliente sencillo
public class ClienteHTTP {
public static void main (…) {
…
MiSocketStream mi socket = new MiSocketStream(
maquina, puerto);
…
miSocket.enviarMensaje(peticion);
String respuesta = miSocket.recibirMensaje();
…
}
}
HTTP

Un cliente sencillo escrito con la clase URL
public class navegadorURL {
public static void main (…) {
…
URL elURL = new URL(“http”, maquina, puerto, cadenaURL);
inputStream enStream = elURL.openStream();
BufferedReader entrada = new BufferedReader (
new InputStreamReader(enStream));
String respuesta = entrada.readLine();
…
while(){ respuesta = entrada.readLine(); }
}
}
Contenido web dinámico
Máquina con cliente web
Máquina con servidor web
Servidor web
<<id=12345>>
<<ingresos=30000>>
<<id = 12345>>
<<ingresos=30000>>
Sistema de
Base de datos
Cliente web
Common
Gateway
Interface
CGI Common Gateway Interface
Definición

Protocolo que proporciona una interfaz o pasarela entre
un servidor de información y un proceso externo.

Utilizando el protocolo CGI, un cliente web puede
especificar un programa, conocido como Script CGI,
como objeto web de destino de una petición HTTP.
Ejemplo de una aplicación CGI
Script CGI Servidor HTTP
Cliente Web
petición de hola.html
contenido de hola.html
petición de hola.cgi
datos, si hay, del cliente
respuesta del servidor, incluyendo páginas generadas dinámicamente
CGI Common Gateway Interface
Código de “hola.html”
<!Ejemplo de página web que invoca a un CGI>
<HTML>
<HEAD>
…
<H1>Esta página muestra el uso de un script web</H1>
<HR>
<FORM METHOD=“post” ACTION=“hola.cgi”>
<HR>
Presione <input type=“submit” value=“”aquí> para enviar su petición
</FORM>
</HR>
…
CGI Common Gateway Interface
Código de “hola.cgi”
* Este programa es un script CGI que genera la salida
* de una página web.
#include <stdio.h>
main(int argc, char *argv[]) {
printf(“Content-type:text/html%c%c”, 10, 10);
printf(“<font color = blue>”);
printf(“<H1>Hola mundo</H1>”);
printf(“</font>”);
}
Formulario Web
Características

Proporciona una interfaz gráfica de usuario que permite
al usuario introducir datos.

Cuando el usuario pulsa el botón de envío, invoca la
ejecución de un programa externo en la máquina del
servidor web.
Ejemplo de Formulario
Formulario Web
Código del Formulario
<html>
<head>
<title>Un ejemplo de formulario sencillo</title>
</head>
<body>
<H1>Esto es un formulario sencillo</H1>
<form method="get"
action="formulario.cgi">
<h2>Cuestionario:</h2>
Introduce tu nombre: <input
name="nombre"><p>
Cual es tu pregunta?: <input
name="pregunta"><p>
…
…
Presiona <input type="submit"
name="sBoton" value="aqui"> para
enviar
</form>
</body>
</html>
Formulario Web

Action=<URL> es una cadena de caracteres que
contiene el URL absoluto o relativo del programa
externo que será iniciado por el servidor web al enviar el
formulario.

Method=<una palabra reservada>, donde la palabra
reservada es el nombre del método, POST o GET, que
especifica la forma en la que el programa externo
espera recibir los datos enviados por el usuario.
Cadena de Interrogación

La colección de todos los datos de los elementos de
entrada es una cadena de caracteres denominada
cadena de interrogación (query string).

Ejemplo:
nombre=Juan%20Nadie&pregunta=paz%20en%20mu
ndo&color=azul&…

El empaquetado de los datos en la cadena de
caracteres, incluyendo la codificación de los valores, la
realiza el navegador.
Procesamiento de la Cadena
Envío de la cadena al Servidor

EL método GET en los formularios

La cadena se transmite al servidor web en una petición HTTP con una
línea de método GET.
 El URI del objeto web solicitado por el cliente es especificado por la
petición HTTP GET.
 La cadena de interrogación se adjunta al final del URI, delimitándola por
el carácter “?”


GET /cgi/hola.cgi?nombre=Juan%20Nadie&pregunta=…
El método POST en los formularios


La cadena de interrogación se transmite al servidor web en una
cabecera HTTP con una línea de método POST.
La petición POST tiene un cuerpo de petición, que contiene el texto que
se va a enviar al servidor.
Procesamiento de la Cadena
Envío de la cadena al Servidor
... continuación

El método POST en los formularios

Utilizando este método, el URI del script CGI se especifica con la línea
de petición POST, seguida por la cabecera de la petición, una línea en
blanco y por último la cadena de interrogación.
POST /cgi/hola.cgi HTTP/1.0
Accept: */*
Connection: Kepp-Alive
Host: miHost.algo.edu
User-Agent: Generic
nombre=Juan%20Nadie&pregunta=…
Procesamiento de la Cadena
Envío de la cadena al programa externo

El método FORM GET

EL URI es adjuntado a la petición HTTP.
 EL programa externo recibe el formulario codificado en una variable de
entorno llamada QUERY_STRING.
 EL programa recupera la cadena de interrogación de la variable de
entorno.

El método FORM POST

EL navegador pasa la cadena en el cuerpo de la petición.
 El programa externo recibe el formulario codificado por la entrada
estándar.
 La cadena de interrogación es decodificada y el programa externo
hace uso de los valores de los parámetros durante la ejecución.
Codificación y decodificación

Perl  biblioteca CGI-lib con la estructura de datos
vector asociativo.

NCSA (National Center for Supercomputing Applications)
 biblioteca de rutinas en C.
Variables de Entorno usadas en CGI



Es un parámetro del entorno de trabajo de un usuario,
en un computador.
CGI utiliza variables de entorno que son escritas por el
servidor HTTP para pasar información sobre las
peticiones a los programas externos.
Algunas de estas variables son:




REQUEST_METHOD: tipo de método con el que se ha
realizado la petición.
QUERY_STRING: contiene la cadena de caracteres codificada.
CONTENT_TYPE: el tipo de contenido de los datos.
CONTENT_LENGTH: la longitud de la cadena de interrogación
en número de bytes.
Sesiones Web y Datos de Estado
Script Web
Script Web
Servidor Web
Navegador
petición de formulario.html
formulario.html
id=12345
formulario1.cgi?id=12345
form2.html(dinámico)
formulario2.cgi?compra=TV
compra=TV
formulario2.html, contenido
«cliente 12345 tiene una TV en el carrito»
Sesiones Web y Datos de Estado


Mecanismos del lado del servidor:
 Se puede usar almacenamiento secundarios (ficheros o BD) en la
máquina servidora como un repositorio para los datos de estado de la
sesión.
 Desventaja: sobrecarga involucrada y la necesidad de administración
del repositorio para un gran número de sesiones concurrentes.
Mecanismos del lado del cliente:
 Basado en pasar los datos de estado del script web al cliente, que a su
vez pasa esos datos al siguiente script web.
 Esta operación puede ser repetida durante toda la sesión web.
Mecanismos de
mantenimiento de
sesión del lado del
cliente
Uso de campos ocultos

Elemento de tipo IMPUT en un formulario Web que se
especifica con TYPE=HIDDEN y su valor debe de ser
especificado en el atributo VALUE dentro del campo.

Es de fácil uso.
 El cliente HTTP se convierte en un repositorio temporal de la
información de estado.
 Los datos de sesión se envían utilizando el mecanismo normal de
transmisión de cadenas de interrogación.

Posee el riesgo de privacidad y seguridad, los datos de
estado se transmiten como campos de un formulario sin
proteger
Ejemplo uso campo oculto
Script web
Script web
Form2.cgi
Form1.cgi
Web Server
Navegador
Petición de formulario.html
Formulario.html
id=1234
Form1.cgi?id=1234
Form2.html (dinámico) contiene
<input type=“HIDDEN” name=“id“ value=“1234”>
Form2.cgi?id=1234&compra=tv
id=1234&compra=tv
“cliente 1234 tiene tv en carrito compra”
Uso de cookies

Este esquema hace uso de una extensión del http básico
que permite que una respuesta del servidor pueda
contener información de estado que el cliente deberá
almacenar en un objeto.


Las cookies se almacenan en la máquina cliente, de forma
temporal o persistente.
Líneas de cabecera HTTP

Set-Cookie
 Cookie
Ejemplo uso cookies
Script web
Web Server
Form1.cgi
Navegador
Petición de formulario.html
Formulario.html
Script web
Form2.cgi
Form1.cgi?id=1234
id=1234
Script web
Form3.cgi
Set-Cookie: id=1234
Form2.html (dinámico)
id=1234
id=1234
Nombre=Juan
id=1234
Form2.cgi?nombre=Juan
Nombre=
Juan
Set-Cookie:nombre=Juan
Form3.html (dinámico)
id=1234
id=1234
nombre=Juan
nombre=Juan
Form3.cgi?...
Línea de cabecera de respuesta:
HTTP Set-Cookie
Set-Cookie: NOMBRE=VALOR; expires=FECHA;
path=CAMINO; domain=NOMBRE_DOMINIO; secure





Nombre: par nombre-valor.
Expires: especifica una fecha que define el tiempo de validez de
una cookie.
Domain: establece el dominio de la cookie, para saber que
cookies deben de ser enviadas a un servidor en particular.
Path: se utiliza para especificar el subconjunto de direcciones
dentro de un dominio donde la cookie es válida.
Secure: si está marcada como segura, solo será transmitida si
el canal de comunicación es seguro.
Línea de cabecera de petición:
HTTP cookie

Cuando se solicita un URL a un servidor, el navegador
comparará el URI (Uniform Resource Identifier, identificador
unificado de recursos) con todas las cookies almacenadas en el
cliente. Si encuentra alguna cookie coincidente, se incluirá una
línea con los pares nombre-valor de dichas cookies en la
cabecera de petición http.
Cookie: NOMBRE=VALOR; NOMBRE2=VALOR2;
NOMBRE3=VALOR3

El servidor extrae todos los valores y los sitúa en una variable
de entorno HTTP_COOKIE
Ejemplo de secuencia de
transacciones

El cliente solicita un documento y recibe la siguiente respuesta:


Cuando el cliente solicita un URL en la ruta </>, envía:


Set-Cookie: ENVIO=FEDEX; path=/area
Cuando el cliente solicita un URL en la ruta </> del servidor, envía:


Cookie: NUMERO_PARTE=LANZACOHETES_01
El cliente recibe la siguiente respuesta:


Set-Cookie: NUMERO_PARTE=LANZACOHETES_01; path=/
Cuando el cliente solicita un URL en la ruta </> del servidor, envia:


Cookie: CLIENTE=COYOTE
El cliente recibe la siguiente respuesta:


Set-Cookie: CLIENTE=COYOTE; path=/
Cookie: CLIENTE=COYOTE; NUMERO_PARTE=LANZACOHETES_01
Cuando el cliente solicita un URL en la ruta </area>, envía:

Cookie: CLIENTE=COYOTE; NUMERO_PARTE=LANZACOHETES_01;
ENVIO=FEDEX
Privacidad de los datos y
consideraciones de seguridad
Controversia de las Cookies:

Las cookies pueden ser escritas en la máquina del usuario sin
el conocimiento o aprobación explícita de él.

Aunque las cookies son de tamaño pequeño, su acumulación
ocupa recursos del sistema.

Pueden ser utilizadas para recoger información personal de los
usuario web sin su conocimiento.

Las cookies persistentes, almacenadas en carpetas fácilmente
accesibles, pueden revelar información personal a usuarios que
comparten un computador.
Applets y Servlets
Applets

Son clases de Java solicitadas por el navegador a un servidor
web utilizando el protocolo http y ejecutadas a continuación por
la máquina virtual de Java en el entorno del navegador del
cliente.
Servidor HTTP
Petición HTTP
Applet
Respuesta HTTP


Cliente HTTP
Se coloca con etiquetas <applet></applet> dentro del código
HTML. Cuando el navegador analiza la etiqueta applet lanza la
petición al servidor que diga en la etiqueta o del cual se haya
bajado la página, si el campo no esta lleno.
Una vez recibida la clase el navegador lo ejecuta con su JMV y
muestra su resultado.
Ejemplo: Sesión Web con Applet
Máquina Servidora
Máquina Cliente
servidor web
petición pagina.html
Navegador
pagina.html
...
<applet
code=“Hola.class”>
</applet>
petición hola.class
hola.class
hola.class
...
hola.class
Seguridad en Applets



Debido a que los appets se descargan de una máquina
remota y se ejecutan en la máquina local, su ejecución
está sometida a restricciones por razones de seguridad.
Un applet no tiene permitido leer o escribir en la máquina
del cliente donde se ejecuta.
No tiene permitido la conexión de red excepto a la
máquina de la cual proviene.
Servlets



A diferencia de los Applets, los Servlets son extensiones
del servidos ejecutados en el mismo.
Similar a los CGI se ejecutan en el servidor como una
acción iniciada por la petición del cliente.
Pero a diferencia de CGI este se puede extender a
cualquier servidor con protocolo del tipo peticiónrespuesta.
Servlets


Un servlet es un objeto de la clase javax.Servlet, parte
de la clase javax.
Existen dos implementaciones libres que proporcionan
la arquitectura servlet:

JSWDK (Java Server Web Development Kit).
 Apache Tomcat.

Igualmente hay varias implementaciones comerciales
como: Weblogic, iPlanet y WebSphere.
Soporte Arquitectónico

Requieren de la existencia de un módulo llamado “motor
de servlets” o “contenedor de servlets”.
Código servlet 1
Servidor 1
Cliente 2
Código servlet 2
Servidor 2
Código servlet 3
Cliente 1
Cliente 3
Tiempo de vida
Código servlet
Servidor
Cliente
Cliente
Código servlet
Servidor
Cliente
Código servlet
Servidor
Cliente
Diagrama de interacción
Cliente 1
Cliente 2
Servidor
Contenedor
servlet
carga servlet
petición HTTP
Servlet
init ( )
service ( )
respuesta HTTP
petición HTTP
service ( )
respuesta HTTP
terminar
destroy ( )
apagar
Principales métodos de un servlet
HTTP
void connect (InetAdress, dirección, int puerto)
Crea una conexión lógica entre este socket y un socket en la dirección
y puerto remotos.
void disconnect( )
Termina la conexión actual, si existe, de este socket.
protected void doGet(HttpServletRequest req,
HttpServletResponse resp)
Llamado por el servidor (a través del método service) para permitir a
los servlets manejar la petición GET.
protected void doPost(HttpServletRequest req,
HttpServletResponse resp)
Llamado por el servidor (a través del método service) para permitir a
los servlets manejar la petición POST.
Formulario que invoca a un servlet
<html>
<head>
<title> Formulario que invoca a un servlet</title>
…
…
…
…
<form method=“post”
action=“http//localhost::8080/servlet/formularioServlet”>
…
…
…
</html>
doPost y doGet en un Servidor HTTP
Navegador
Servidor HTTP
Servlet HTTP
doGet( )
service( )
doPost( )
Algunos métodos del objeto
HttpServletRequest
public String getHeader(String name)
Devuelve el valor de la cabecera de la petición especificada.
public String getMethod( )
Devuelve el nombre del método HTTP con el que fue realizada la
petición. Por ejemplo GET, POST.
public String getQueryString( )
Devuelve la cadena de interrogación enviada con la petición.
public String getParameter(String name)
Devuelve el valor de un parámetro de la petición, o null si el parametro
no existe.
public String getParameterValues(String name)
Devuelve el vector de objetos con todos los valores que tiene el
parámetro solicitado, o null si el parametro no existe.
Algunos métodos del objeto
HttpServletResponse
public void setContenType(String type)
Establece el tipo de contenido de la respuesta a ser enviada al cliente.
Este método debe ser llamado antes de que se obtenga el objeto
PrintWriter de la respuesta
void setHeader (String name, String value)
Establece una cabecera de respuesta con el nombre y el valor dados.
public ServletOutputStream getOutputStream()
Devuelve un objeto ServletOutputStream adeacuado para escribir datos
binarios en la respuesta.
public PrintWriter getWriter()
Devuelve un objeto ServletOutputStream adeacuado para enviar
carácteres de texto al cliente.
Mantenimiento de la información de
estado en la programación de servlets


Los servlets cuentan con una amplia selección de
mecanismos para permitir la compartición de
información entre ellos.
Algunos de ellos son:

Variables servlet
 Campos ocultos de formulario
 Cookies
 Objetos session
Variable servlet




Como se mencionó las servlets son persistentes.
Es posible almacenar información de estado en las
variables del servlet.
Pero no es común que se utilice este método porque el
programador no tiene control sobre el ciclo de vida del
servlet.
Además en un determinado momento solo se está
ejecutando una copia única del servlet para todos los
clientes, y sus variables de estado serán globales a
todos ellos.
Variable servlet
import java.io.*;
import javax.servlet.*;
import javax.servlet.htttp.*;
public class Contador extends HttpServlet {
int contador = 0;
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(“text/plain”);
PrintWriter salida = response.getWriter ( );
contador ++;
salida.println(“Este servlet ha sido accedido” +
contador + ”veces”);
} // fin doGet
;} // fin class
Variable servlet (thread safe)
public class Contador extends HttpServlet {
int contador = 0;
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(“text/plain”);
PrintWriter salida = response.getWriter ( );
incremento(salida);
} // fin doGet
;} // fin class
private synchronized void incremento(PrintWriter output){
output.println(“Este servlet ha sido accedido” +
contador + ”veces”);
output++;
} //fin incremento
} //fin class
Campos ocultos de formulario



Se utiliza exactamente igual que con scripts CGI para
pasar información de estado
Las sentencias HTML que contienen el campo oculto se
escriben a un stream de salida de un PrintWriter
asociado a el HttpServletResponse para almacenar los
datos de enviado a ser enviado al siguiente servlet.
Ejemplo:
response.setContentType(“text/plain”);
PrintWriter salida = response.getWriter( );
salida.println(“<INPUT TYPE=\”HIDDEN\” NAME=ID VALUE=“ +
valor);
Cookies

Las cookies tambien pueden aplicarse de la misma
manera que en los scripts CGI para pasar información
de estado.
Se utiliza la clase HttpCookie.

Algunos de los principales Métodos que provee son...

Cookies
public Cookie(String name, String value)
Construye una cookie con el nombre y valor especificado.
public String getName( )
Devuelve el nombre de esta cookie.
public String getValue( )
Devuelve el valor de la cookie.
public void setMaxAge(int expiry)
Establece el atributo expiración de esta cookie al periodo de tiempo
especificado en segundos.
public void setValue(String newValue)
Asigna un valor a la cookie.
El método getCookie de la clase HttpRequest:
public Cookie[] getCookies( )
Devuelve un vector con todos los objetos Cookie enviados por el
cliente en la petición.
Cookies
…
…
…
// Recoger el valor del parámetro del formulario
valor = request.getParameter(nombre);
// Crea una cookie
C = new Cookie(nombre, valor);
//Establecer expiración en un día
c.setMaxAge(1*24*60*60);
response.addCookie(nombre, valor);
…
…
…
//Realiza una redirección para enviar las cookies e
invocar otro servlet que muestre los objetos del carrito
response.sendRedirect(“Carrito2”);
Cookies
…
…
…
Cookie cookies[];
cookies. = request.getCookies();
if (cookies != null){
for(int i=0; i < cookies.length; i++){
// Identifica las cookies por su nombre
if(cookies[i].getName().startsWith(“objeto”)){
salida.pritnln(cookies[i].getName() + ”\t” +
cookies[i].getValue());
…
…
…
Objeto Session





Mantiene información de estado específica de una
sesión particular de un cliente HTTP.
Un objeto session implementa la interfaz HttpSession.
Un servlet puede crear este objeto y despues utilizarlo
como un repositorio de datos de estado a lo largo de la
sesión del cliente.
Para identificar sesiones diferentes cada objeto de
sesión debe tener un identificador único.
Este identificador se asigna automáticamente por el
contenedor de servlets.
Objeto Session




A lo largo de la sesión del cliente el identificador se pasa
entre el servidor y el cliente utilizando una cookie o
algun otro mecanismo.
Una vez que se ha creado el objeto sesión, un servlet
puede depositar en el objetos que contienen información
de estado.
Cada objeto añadido se especifica con un nombre, más
adelante puede ser accedido por otro servlet o incluso
por el mismo servlet.
El objeto sesión persistira durante un intervalo de
inactividad que puede ser especificado en el código.
Objeto Session
public Object getAttribute(String name) throws
java.lang.IllegalStateException
Devuelve el objeto de esta sesión con el nombre especificado
public Enumeration getAttributeNames( ) throws
java.lang.IllegalStateException
Devuelve una enumeración con el nombre de todos los objetos de esta
sesión
public Object setAttribute(String name, Object value)
throws java.lang.IllegalStateException
Enlaza un objeto con esta sesión usando el nombre especificado.
public void invalidate( ) throws
java.lang.IllegalStateException
Invalida esta sesió y a continuación elimina el enlace con los objetos de
la misma.
public void getMaxInactiveInterval( )
public void setMaxInactiveInterval(int interval)
Devuelve/especifica el tiempo del intervalo máximo en segundos
public String getId( )
Objeto Session
El método getSession de la clase HttpRequest
public HttpSession getSession(boolean create)
Devuelve el HttpSession actual asociado con esta petición o si no hay
una sesión actual y el parametro contiene true, devuelve una nueva
sesión.
Objeto Session
…
…
HttpSession session = request.getSession(true);
…
…
contadorObjetos = new Integer(contador);
session,.putValue(“contadorObjetos”, contadorObjetos);
If (objetos != null)
session.setAttribute(“objetos”, objetos);
// Realiza la redirección para invocar el otro servlet
Objeto Session
…
…
//Recoge el objeto sesión, si existe
HttpSession session = request.getSession(false);
Integer contadorObjetos;
Vector objetos = null
if (session == null){
contadorObjetos = new Integer(0);
}
else{
contadorObjetos = (Integer= session.getValue(“contadorObjetos”);
objetos = (Vector) session.getValue(“objetos”);
…
// Recoger los objetos sesion dejados por el otro servlet
for (int i = 0; i < contador; i++)
salida.println(objetos.get(i));
Simple
Object
Access
Protocol
Web Services
Definición



Servicios de red transportados
sobre HTTP.
Basado en el paradigma
Cliente-Servidor.
Para poder establecer la
comunicación a nivel de la capa
de aplicación, se utilizan los
siguientes protocolos:

UDDI: Universal Description,
Discovery and Integration
(Descubrimiento del Servicio).
 WSDL: Web Service Description
Language (Descripción del
Servicio).
 XML. (SOAP) (Mensajería).
 HTTP, FTP, SMTP (Transporte).
Web Services
UDDI y WSDL


UDDI es un framework que no depende de ninguna plataforma
para describir, crear e integrar servicios de negocios usando
Internet.
 Utiliza WSDL para publicar todas estas reglas y servicios de
negocios.
 Estas reglas son accedidas utilizando SOAP.
WSDL describe la interfaz pública a los servicios Web.


Está basado en XML y describe la forma de comunicación, es decir,
los requisitos del protocolo y los formatos de los mensajes para
interactuar con los servicios listados en su catálogo.
Las operaciones (métodos) y mensajes se describen de forma
abstracta y se ligan después al protocolo concreto de red y al
formato del mensaje.
WSDL
Ejemplo
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
<binding type="glossaryTerms" name="b1">
<soap:binding style="document“ transport="http://schemas.xmlsoap.org/soap/http”/>
<operation>
<soap:operation soapAction="http://example.com/getTerm"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
SOAP
Definición

Protocolo simple, sencillo y liviano para poder acceder a
objetos remotos a través de la red (ej. Internet).

Utilizado para realizar llamadas a Métodos
implementados en diferentes arquitecturas, lenguajes y/o
sistemas operativos.
SOAP
Aplicaciones Distribuidas vs. SOAP


Las tecnologías para
aplicaciones
distribuidas necesitan
de puertos abiertos
para poder
comunicarse (ej DCOM
Puerto 135).
Comúnmente dichos
puertos están cerrados
o protegidos del
exterior por Firewalls.
El puerto para HTTP (80) es
permitido normalmente.
 SOAP puede traspasar
Firewalls, ya que corre sobre el
modelo HTTP.

SOAP
Ventajas de SOAP



SOAP es liviano.
Puede ser interpretado por cualquier sistema operativo o
lenguaje ya que esta basado en XML.
Pasa a través de los firewalls por el puerto 80, por lo que
puede ser utilizado a nivel MUNDIAL.
SOAP
Cómo funciona?


Los mensajes se envían bajo el paradigma
Request/Response o bien conocido como modelo de
mensajes HTTP.
SOAP define una estructura en XML para:



Llamar y pasar parámetros a métodos remotos.
Recibir o retornar valores a cualquier petición.
Manejar errores en caso de no poder ejecutar la llamada.
Servidor WEB
Objeto
del servicio
Nombre del método,
Lista de parámetros
Valor devuelto
Petición HTTP
Respuesta HTTP
Cliente WEB
SOAP
Desventajas

Qué NO brinda SOAP:

Cómo se envían y reciben los mensajes.
 La implementación para envío y recepción de mensajes se
deja en manos del programador.
 No define como ni cuando se instancia un objeto para
luego ejecutar el método.
SOAP
Paquetes
Recubrimiento SOAP
Cabecera SOAP
opcional
Bloque de Cabecera
Bloque de Cabecera
Cuerpo del Mensaje
requerido
Cuerpo SOAP
SOAP
Mensaje de Request

Ejemplo de un mensaje (Request) SOAP:
Importante Colocar el
POST /InStock HTTP/1.1
Tipo del Contenido como XML
Host: www.stock.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.stock.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
SOAP
Mensaje de Request

Ejemplo de un mensaje (Request) SOAP:
POST /InStock HTTP/1.1
Host: www.stock.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.stock.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
Sobre del mensaje SOAP
SOAP
Mensaje de Request

Ejemplo de un mensaje (Request) SOAP:
POST /InStock HTTP/1.1
Host: www.stock.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.stock.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
Cuerpo del mensaje SOAP
SOAP
Mensaje de Request

Ejemplo de un mensaje (Request) SOAP:
POST /InStock HTTP/1.1
Host: www.stock.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.stock.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
Nombre del
</m:GetStockPrice>
Método Remoto
</soap:Body>
</soap:Envelope>
Parámetros y Valores
SOAP
Mensaje de Response

Ejemplo de un mensaje (Response) SOAP:
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.stock.org/stock">
<m:GetStockPriceResponse>
<m:Price>34.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
</soap:Envelope>
Sobre del mensaje SOAP
SOAP
Mensaje de Response

Ejemplo de un mensaje (Response) SOAP:
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.stock.org/stock">
<m:GetStockPriceResponse>
<m:Price>34.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
</soap:Envelope>
Cuerpo del mensaje SOAP
SOAP
Mensaje de Response

Ejemplo de un mensaje (Response) SOAP:
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.stock.org/stock">
<m:GetStockPriceResponse>
Nombre del
<m:Price>34.5</m:Price>
Método Remoto
</m:GetStockPriceResponse>
(Nota: se agrega la palabra Response al
</soap:Body>
final)
</soap:Envelope>
Parámetro y Valor
de Retorno
SOAP
Ejemplo de Implementación


Apache Software Foundation, provee de un API simple y
sencillo llamado Apache SOAP, para realizar llamadas a
WebServices utilizando dicho protocolo.
Posee de varias Clases con las que se implementa el
protocolo.

Call: Clase que representa la llamada a un método remoto.
 Parameter: Clase que representa parámetros de ida y vuelta.
 Response: Clase que representa el mensaje devuelto por el servidor.
 Fault: Contiene los errores que puedan ser generados durante la
llamada.
SOAP
Ejemplo de Implementación (Cliente)
Call call = new Call();
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
call.setTargetObjectURI(“urn:xmethods-Temperature”);
call.setMethodName(“getTemp”);
Parameter param = new Parameter(“zipcode”,String.class,”33180”,null);
Vector params = new Vector();
params.add(param);
call.setParams(params);
Response response =
call.invoke(“http://localhost:8080/soap/Services”);
SOAP
Ejemplo de Implementación (Servidor)
public interface ITemp{
float getTemp(String zipCode);
}
public class Temp implements ITemp{
public float getTemp(String zipCode){
return DB.getTemp(zipCode);
}
}
PREGUNTAS???
Descargar

Applets, Servlets, CGI, HTTP y SOAP