FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors Aplicaciones Web Formularios <HTML> <HEAD><TITLE>Formulario Simple</TITLE></HEAD> <BODY> <H2>El formulario más simple</H2> <FORM action="http://localhost/cgi-bin/queryget.exe" method=GET > Introduzca su nombre:&nbsp;&nbsp; <INPUT type="text" name="nombre" size="25"><BR><BR> <INPUT type="submit" value="Enviar">&nbsp;&nbsp;&nbsp; <INPUT type="reset" value="Borrar"> </FORM> </BODY> </HTML> v.2006.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 2 1 Formas de envío Métodos más usados: GET y POST GET – Designado para obtener información (un documento, un gráfico o el resultado de la consulta a una BD) – Usado al escribir una URL en el navegador – Usado cuando se clica en un hiperlink POST – Designado para enviar información (un nº de tarjeta de crédito, nuevos datos o información para guardar en una BD) Cualquiera de los dos puede usarse cuando se envía un formulario HTML FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2006.02 3 Método GET Puede incluir parámetros en el URL http://http://localhost/cgi-bin/queryget.exe?nombre1=valor1&nombre2=valor2 http://http://localhost/cgi-bin/queryget.exe?nombre=Antonia Secuencia de caracteres añadida a la URL: – QUERY STRING v.2006.02 No es muy seguro, ya que los datos viajan junto a la dirección y son vistos por todo el mundo en la barra de direcciones El tamaño de la información enviada estará limitada La URL puede ser guardada o enviada por e-mail FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 4 2 Método POST Técnica diferente de envío de información – En algunos casos se necesita enviar Mb Características: – – – – – – A través de una conexión “socket” Datos como parte del cuerpo de la petición HTTP Longitud ilimitada El intercambio es invisible para el cliente La URL no cambia en absoluto La petición no puede ser guardada ni enviada por e-mail e incluso no puede ser “refrescada” – Ofrece un extra de seguridad puesto que el “access log” del servidor que guarda las URLs no guarda los datos enviados mediante POST. FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2006.02 5 Common Gateway Interface (CGI) Servidor Web pasa la petición a un programa externo La salida de este programa se envía al cliente, en lugar de un archivo estático Permite la creación de páginas dinámicas Puede programarse en cualquier lenguaje Servidor Web basado en CGI Petición al CGI-1 v.2006.02 Proceso Principal Proceso Hijo del CGI-1 Petición al CGI-2 Proceso Hijo del CGI-2 Petición al CGI-1 Proceso Hijo del CGI-1 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 6 3 Common Gateway Interface (CGI) Web server host CGI script web client host HTTP server web client request for hello.html contents of hello.html request for hello.cgi data, if any, from the client HTTP server response, including dynamically generated web page FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2006.02 7 Common Gateway Interface (CGI) Multiproceso: cada proceso atiende una petición Ciclo de vida de una petición – – – – – Se crea proceso, Se carga programa, Se ejecuta (compilado/ interpretado), Se descarga, Se termina proceso. Desventajas multiproceso: – coste memoria e inicio proceso. – Sol: Arrancar varios procesos (Apache), Multithreading v.2006.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 8 4 Java Servlets Misma finalidad que los CGIs Programados en Java Más sencillos de desarrollar Ventajas de rendimiento en el servidor Servidor Web basado en Java Servlet Proceso Principal Petición al Servlet-1 JVM Servlet-1 Petición al Servlet-2 Petición al Servlet-1 Thread Servlet-2 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2006.02 9 Java Servlets Multithread: cada thread atiende una petición – Aunque es posible especificar que solo se permite un hilo extends HttpServlet implements SingleThreadModel Ciclo de vida de una petición – Primera petición: • se carga en JVM • se crea thread • se ejecuta – Segunda y posteriores peticiones: • Se ejecuta v.2006.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 10 5 Java Servlets y formularios <HTML> <HEAD><TITLE>Formulario Simple</TITLE></HEAD> <BODY> <H2>El formulario más simple</H2> <FORM action="http://127.0.0.1:8080/examples/servlet/OneParameters" method=POST > Introduzca su nombre:&nbsp;&nbsp; <INPUT type="text" name="nombre" size="25"><BR><BR> <INPUT type="submit" value="Enviar">&nbsp;&nbsp;&nbsp; <INPUT type="reset" value="Borrar"> </FORM> </BODY> </HTML> v.2006.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 11 Java Servlets y formularios import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; public class OneParameters extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { // Código que se ejecutará con una petición GET de un formulario (ver siguiente transp.) } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Código que se ejecutará con una petición POST de un formulario doGet(request, response); } } v.2006.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 12 6 Java Servlets y formularios public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); // Añadir etiquetas de html: out.println(<HTML>) … PrintWriter out = response.getWriter(); Enumeration paramNames = request.getParameterNames(); while(paramNames.hasMoreElements()) { String paramName = (String)paramNames.nextElement(); out.println( paramName); String[] paramValues = request.getParameterValues(paramName); for(int i=0; i<paramValues.length; i++) { out.println(paramValues[i]); } } } v.2006.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 13 Lenguajes compilados vs interpretados Lenguajes compilados: una vez escrito el programa, éste se traduce a partir de su código fuente por medio de un compilador en un archivo ejecutable para una determinada plataforma (por ejemplo Solaris para Sparc, Windows NT para Intel, etc.). lenguaje interpretado es aquel en el que las instrucciones se traducen o interpretan una a una siendo típicamente unas 10 veces más lentos que los programas compilados. Algunos entornos de programación incluyen los dos mecanismos, primero el código fuente se traduce a un código intermedio que luego se interpreta en una máquina virtual, pero que también puede compilarse justo antes de ejecutarse. La máquina virtual y los compiladores “Just in Time” de Java son un ejemplo de ello. v.2006.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 14 7 Applets Programa en Java diseñado para ser ejecutado en el contexto de una página web Un applet se carga y se ejecuta desde cualquier explorador que soporte Java – utilidad appletviewer de Sun Los applets se implementan creando una subclase de la clase Applet – java.applet.Applet v.2006.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 15 Applets Applet HolaMundo de ejemplo import java.awt.Graphics; import java.applet.Applet; public class HolaMundo extends Applet { public void paint( Graphics g ) { g.drawString( "Hola Mundo!",50,25 ) ; } } v.2006.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 16 8 Applets Cómo ejecutar un applet <HTML> <HEAD> <TITLE> Primer programa </TITLE> </HEAD> <BODY> Salida del programa (Applet): <APPLET CODE=“HolaMundo.class" WIDTH=150 HEIGHT=25> </APPLET> </BODY> </HTML> FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC v.2006.02 17 Applets Una sesión web con un applet Servidor Cliente Petición HolaMundo.html Servidor web HolaMundo.html HolaMundo.class v.2006.02 HolaMundo.html Petición HolaMundo.class Navegador HolaMundo.class HolaMundo.class FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 18 9 Applets Ciclo de vida – Carga del applet • Se crea una instancia a la clase del applet • El applet se inicializa (init) • El applet comienza su ejecución (start) – Abandonar y volver a la página del applet • Si el usuario abandona la página, el applet puede pararse a sí mismo (stop) • Si el usuario vuelve a la página, el applet comenzará de nuevo (start) v.2006.02 FUNDAMENTOS DE SISTEMAS DISTRIBUIDOS Departament d’Arquitectura de Computadors - UPC 19 10