HTTP, CGI, Applets, Servlets y SOAP

Slides:



Advertisements
Presentaciones similares
Java Enterprise Edition (Java EE)
Advertisements

Curso de Java “Java para Web” Rogelio Ferreira Escutia.
Nau Gran dHivern Intr. a la creación y gestión de páginas web Introducción a la web.
Internet y tecnologías web
Fernando Alonso Blázquez Sesiones 06 de Mayo de 2004.
Fernando Alonso Blázquez Formularios en lenguaje HTML 26 de Febrero de 2004.
Servlets 22 de Abril de 2004 Fernando Alonso Blázquez.
Jorge de Nova Segundo UD 6:
Programación Interactiva Aplicaciones Cliente-Servidor
CI-2413 CGI & Compañía.
CI-2413 Desarrollo de Aplicaciones para Internet
CGI I La mayor parte de los elementos HTML de que disponemos permite al visitante visualizar los contenidos de un sitio, pero no interactuar con él. Dicho.
Características generales de un servicio web
Servicios Web.
"java del lado del servidor" Servlet y JSP Java Server Pages.
OBJETO REQUEST. El objeto Request Por qué el objeto request Funcionamiento Colecciones: – Transferencia de variables por URL –Transferencia de variables.
CGI Common Gateway Interface (interfaz de pasarela común)
Servlets Servlets.
JSP Copyright ISIPE – Instituto de Servicios Informáticos para Empresas – Universidad Siglo 21 – Cualquier copia u otro uso debe ser autorizado expresamente.
Java 2 Platform Enterprise Edition
Características generales de un servicio Web.
Mecanismo de petición y respuesta Prof. Manuel Blázquez Ochando
Formularios en lenguaje HTML 7 de Abril de Índice Generalidades Definición en HTML Elementos Formas de envío: métodos GET y POST Recepción y tratamiento.
Sesión en Servlets 31 de Marzo de Índice ¿Por qué seguir la trayectoria de usuarios? Formas de seguir la trayectoria de usuarios –Cookies –Reescritura.
La estructura básica de los programas en java, algo a tener en cuenta y que debemos recordar siempre es el archivo debe llevar el nombre de la clase con.
CGI.   Cuando el World Wide Web inició su funcionamiento como lo conocemos, empezando a tomar popularidad aproximadamente en 1993, solo se podía apreciar.
Borland User Group - Guatemala Desarrollo de Servlets con Borland JBuilder 2006 Mario Enríquez Open Consult Diciembre 2006.
Tecnologías para el desarrollo de aplicaciones Web
Ingeniero Anyelo Quintero
Servlets, JSP, JavaBEANS,JDBC
Introducción Publicación en Internet con Microsoft Office Sevilla, junio de 2004 SalirIniciar.
Sistemas Distribuidos basados en la web
Una java servlet es un programa que se ejecuta en un servidor. Por lo general son aplicaciones Java que corren en un entorno de servidor web. Los Java.
POP3 UCLV Mapas Conceptuales para la enseñanza de Redes de Computadoras.
Servicios Web. Servicios web Son programas con funcionalidad accesible a través de protocolo http que permiten la ejecución remota de métodos y funciones.
PHP TODO SOBRE PHP.
Prof. José T. Cadenas. Aplicación Web La Internet y la Web hacen que sea fácil y atractivo poner toda la información en el cyberespacio, y la hace accesible.
Diseño de Aplicaciones Web * En las aplicaciones web el diseño es muy diferente de las aplicaciones tradicionales dado que hay que dividir la aplicación.
Servlets 18 de Marzo de Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Estructura básica de un HttpServlet Servlet simple que genera.
TEMA 6. Applets y servlets
PROTOCOLO H T T P.
La Web y el HTTP. Antes del año 1990 Internet era usado por InvestigadoresAcadémicosEstudiantes Transferir archivos logearse remotamente Enviar/recibir.
“SERVLETS”. Paola Rojas Contreras Juan Villarroel Leiva José Miguel Perez V. Departamento de Electrónica.
Unidad didáctica 6 Diseño de páginas Web.
Aplicaciones Web M.C. Jorge Eduardo Ibarra Esquer
PROTOCOLO HTTP ALGUNAS DEF.-
Ihr Logo PHP Parte 4 “manejo de formularios”. Your Logo Formularios  El proceso para el manejo de FORMULARIOS html requiere generalmente dos páginas,
Conceptos básicos sobre Internet
      Protocolo de transferencia de Hipertexto, empleado para acceder a documentos de hipermedia  El protocolo nació en el CERN, como base.
Desarrollo con Servlets. Servlets: Introducción  Módulos que amplían los servidores orientados a petición/respuesta.  La respuesta en el lenguaje Java.
Mario Osvaldo Bressano Servlets. Mario Osvaldo Bressano Arquitectura de 2 Capas.
Servlets Servlets son módulos que extienden a servidores “java-enabled” orientados a request/response, como por ejemplo Servidores Web Un servlet puede.
© Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.
Servlets 10 de Mayo de 2006.
IS2Objetos Distribuidos - J2EE,RMI1 Ingeniería del software II Ingeniería Web.
Los siguientes términos y acrónimos son un resumen de las tecnologías web actuales: ASP (Active Server Pages)  Páginas de servidor activas.  Tecnología.
Punto 5 – Estructura de los Mensajes de Correo Juan Luis Cano.
Introducción al Lenguaje. ¿ Qué es PHP ? O Hypertext Pre-processoes (PHP) es un lenguaje de "código abierto" interpretado, de alto nivel, embebido en.
MIME EXTENSIONES DE CORREO INTERNET MULTIPROPÓSITO. SERIE DE ESPECIFICACIONES DIRIGIDAS AL INTERCAMBIO TRANSPARENTE DE TODO TIPO DE ARCHIVOS A TRAVÉS DE.
Sun Microsystems. Los servlets son objetos que corren dentro del contexto de un contenedor de servlets y extienden su funcionalidad. También podrían correr.
Prof. Carlos Arca Alarcón
Confidential // Neoris 1 Confidential // Do Not Reproduce without prior written permission from Neoris Servlets.
File Transfer Protocol.
Punto 4 – Configuración de un Servidor Web Juan Luis Cano.
Práctica Profesional PHP.
Colegio de Bachilleres Plantel 13 Xochimilco - Tepepan
Manual PHP Básico Camilo Cartagena.
Servicios Web Conjunto de aplicaciones o de tecnologías con capacidad para interoperar en la Web. Estas aplicaciones o tecnologías intercambian datos entre.
HTML.
Temario Java 2 Enterprise Edition Arquitectura Especificación Servlets Contenedores Cookies Sesiones.
Transcripción de la presentación:

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ágina web</title> </head> <body> <center> <h1>Mi pá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> tu@tuDireccion.com</para> <de>yo@miDireccion.com</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: 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: <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: Códigos de estado: <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 Cliente web <<id=12345>> <<ingresos=30000>> <<id = 12345>> <<ingresos=30000>> Sistema de Base de datos

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”> 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%20mundo&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 Web Server Navegador Form2.cgi Form1.cgi Petición de formulario.html Formulario.html Form1.cgi?id=1234 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

Set-Cookie:nombre=Juan Ejemplo uso cookies Script web Web Server Navegador Form1.cgi 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 Form2.cgi?nombre=Juan Nombre=Juan id=1234 Set-Cookie:nombre=Juan Form3.html (dinámico) Nombre=Juan id=1234 Form3.cgi?... id=1234 nombre=Juan nombre=Juan

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: Set-Cookie: CLIENTE=COYOTE; path=/ Cuando el cliente solicita un URL en la ruta </>, envía: Cookie: CLIENTE=COYOTE 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: NUMERO_PARTE=LANZACOHETES_01 Set-Cookie: ENVIO=FEDEX; path=/area Cuando el cliente solicita un URL en la ruta </> del servidor, envía: 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. 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. Servidor HTTP Petición HTTP Applet Respuesta HTTP Cliente HTTP

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ón-respuesta.

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 1 Cliente 2 Código servlet 2 Servidor 2 Cliente 3 Código servlet 3

Tiempo de vida Servidor Cliente Cliente Servidor Cliente Servidor Código servlet Servidor Cliente Cliente Código servlet Servidor Cliente Código servlet Servidor Cliente

Diagrama de interacción Contenedor servlet Cliente 1 Cliente 2 Servidor Servlet carga servlet init ( ) petición HTTP 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, 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 Servlet HTTP Navegador 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"/> <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> </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. Objeto del servicio Servidor WEB Cliente WEB Nombre del método, Lista de parámetros Valor devuelto Petición HTTP Respuesta HTTP

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 Cuerpo SOAP Cuerpo del Mensaje Bloque de Cabecera opcional requerido

SOAP Mensaje de Request Ejemplo de un mensaje (Request) SOAP: Importante Colocar el Tipo del Contenido como XML 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>

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>     </m:GetStockPrice> </soap:Body> </soap:Envelope> Nombre del Método Remoto 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> <m:Price>34.5</m:Price> </m:GetStockPriceResponse> </soap:Body> </soap:Envelope> Nombre del Método Remoto (Nota: se agrega la palabra Response al final) 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,”33-180”,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???