Capa p de p presentación Panorámica de t tecnologías l í Mario Muñoz Organero Departamento p de Ingeniería g Telemática http://www.it.uc3m.es/mario Distribución de la lógica en el servidor Capa de presentación ((PL)) Capa de lógica de negocio g (BLL) Capa de datos ((DL)) Cliente tier Mario Muñoz Organero. tier tier Servidores de información 2 Generación dinámica de páginas Web La página Web se basa en datos enviados por el usuario La página Web se deriva de datos que cambian frecuentemente resultado de robots de búsqueda, q , confirmaciones de compra p p por catálogo, etc. Pronóstico del tiempo, noticias El servidor puede decidir si envía un versión anterior ya existente (timeouts) o si la genera de nuevo La página Web presenta información de las bases de datos de la empresa o accede a otros recursos del servidor Precio actual y disponibilidad de componentes de un catálogo Mario Muñoz Organero. Servidores de información 3 Tecnologías de capa de p presentación Algunas de las más típicas Invocación de aplicaciones externas por el servidor Web y comunicación mediante interfaces definidos: CGIs FastCGI CGIs, Scripts interpretados por el Servidor Web (PHP, ASP, JSP) Componentes ejecutados en el servidor Web: Servlets Mario Muñoz Organero. Servidores de información 4 CGIs CGI es un estandar que define un modelo de interación entre un servidor Web y un programa externo. Desarrollado por el National Center for Supercomputing Applications (NCSA) CGI fue el primer mecanismo para generar contenido dinámico Basedo en el modelo de la shell de Unix Los CGIs se encuentran normalmente en un determinado directorio como: Los parametros se pasan via stdin/stdout y variables de entorno de la shell /cgi-bin/ Se asocian a una URL que selecciona el programa a ejecutar http://host/cgi-bin/programa Mario Muñoz Organero. Servidores de información 5 CGIs (I) El servidor ejecuta externamente un programa binario, a través del S.O. SO El programa binario debe seguir unas reglas específicas (Common Gateway Interface) para comunicarse con el servidor web: Recibir la petición Devolver la respuesta Los resultados del programa son devueltos por el servidor web mediante http Mario Muñoz Organero. Servidores de información 6 CGIs (II) http navegador Petición HTML Respuesta (Form, enlace) MIME I Internet http Servidor web Cabecera + Respuesta Variables entorno [+ Datos del form] MIME CGI BD Servidores de información Mario Muñoz Organero. 7 CGIs (III) Por ser una interfaz no existe dependencia con el lenguaje de programación empleado. Lenguajes usuales: C++, Visual Basic, Perl, Tcl Un CGI puede devolver cualquier tipo de i f información: ió texto t t ASCII, ASCII imagen i GIF código GIF, ódi HTML, HTML etc La cabecera más importante es la que especifica el contenido MIME: Content-type: yp tipo/subtipo p p Entre las cabeceras y el contenido hay que dejar una línea en blanco Mario Muñoz Organero. Servidores de información 8 CGIs (IV) – paso de parámetros Cuando se invoca un GET, la cadena de petición se pasa a través de la variable de entorno: QUERY_STRING Cuando la invocación es un POST, la petición se pasa a ( ) través de la entrada estándar (stdin). El programa CGI debe analizar la cadena. El programa CGI debe leer de dicha entrada estandar y analizar la petición En ambos E b casos ell programa CGI responde d por la l salida lid estándar (stdout) Mario Muñoz Organero. Servidores de información 9 CGIs (V) – Un ejemplo sencillo #!/bin/sh echo “Content-type: text/html\n\n” y p echo “<html><body><p>” echo “Your query string was: $QUERY_STRING” echo “</p></body></html>” </p></body></html> Mario Muñoz Organero. Servidores de información 10 CGIs (VI) Inconvenientes CGIs: Dependen D d de la d l máquina á i Cada petición la ejecuta un programa cgi diferente difícil de mantener Cada llamada supone un proceso de S.O. Al no ejecutar j el p proceso el servidor sino el sistema operativo crea un problema de seguridad Los FastCGIs dan mayor rendimiento Mario Muñoz Organero. Servidores de información 11 Ej – CGIs con Perl Un script en Perl, al igual que en shell script es un conjunto de instrucciones interpretas por un intérprete. Se puede usar para implementar CGIs (se tiene un módulo especial para ello). Veamos primero un ejemplo de script en Perl sencillo: #!/local/bin/perl use strict; my $count; $count++ foreach(<STDIN>); print "There were $count lines of input\n"; Mario Muñoz Organero. Servidores de información 12 Ej – CGIs con Perl #!/usr/bin/perl –w # My Third Perl script. # I call this script like : # http:///www.redbrick.dcu.ie/~username/script.pl?name=something use strict; use CGI; my $query = new CGI; my $name = $query->param(‘name’); print $query->header(); If ($name eq “”)) { print “No Name Specified!\n”; } else { print “Hello, “ . $name . “!\n”; } Mario Muñoz Organero. Servidores de información 13 Scripts de servidor Se incluyen los scripts encapsulados en unas etiquetas especiales, incrustadas en el código html, cuyo contenido será ejecutado en el servidor antes de enviar la página al cliente Tecnologías más usadas: PHP (hypertext processor) ASP (Active Server Pages) JSP (Java Server Pages) Mario Muñoz Organero. Servidores de información 14 Scripts de servidor. PHP Código abierto Puede ejecutarse en plataforma Windows y Linux Primera versión en 1994 por Rasmus Lerdorf Se convierte en lenguaje de scripting para servidores Web en su segunda versión en 1995. Actualmente ((PHP 5)) con amplio p soporte p de p programación g (variables, estructuras condicionales, bucles…) y con multitud de librerías (accesos a bases de datos, servicios Web, manejo de XML…) El código PHP se inserta en una página HTML mediante la etiqueta: <? php .... ?> Otra posiblidad: <script language="php"> Mario Muñoz Organero. Servidores de información 15 Servidores de información 16 PHP – Primer ejemplo <html> <head> <title>Example</title> </head> y <body> <?php echo "Hi, Hi, I'm I m a PHP script!"; script! ; ?> /body </body> </html> Mario Muñoz Organero. PHP – Otro ejemplo <?php $today $ y_dayofweek y = date(“w”); ( ); if ($today_dayofweek == 4){ echo “Today is Thursday!”; } else{ echo “Today is not Thursday.”; } ?> Mario Muñoz Organero. Servidores de información 17 PHP – Añadiendo código externo <?php // header include(“header.php”); ?> Insert content here! ?php <?php // footer include(“footer.php”); ? ?> Mario Muñoz Organero. Servidores de información 18 PHP – Contador mediante ficheros <?php $COUNTER_FILE = “webcounter.txt"; if (file_exists($COUNTER_FILE)) { $fp = fopen("$COUNTER_FILE", "r+"); flock($fp, ( p 1); ) // Adquiere q un bloqueo q $hits = fgets($fp, 4096); $hits += 1; ($ p, ); fseek($fp,0); fputs($fp, $hits); flock($fp, 3); // libera el bloqueo fclose($fp); } ?> Mario Muñoz Organero. Servidores de información 19 Scripts de servidor. ASP (I) Tecnología de Microsoft Ligada al servidor IIS y a la plataforma Windows Utiliza VBScript (subconjunto de Visual Basic) como lenguajes por defecto. También puede utilizar Javascript <% ... %> Mario Muñoz Organero. Servidores de información 20 Scripts de servidor. ASP (II) Pueden hacer uso de objetos COM (Component (Co po e t Object Model) ode ) que so son objetos en algún otro lenguaje (ej.: ejecutables en C++ o Java)) Para conectarse a una base de datos, normalmente se utiliza ADO que es un adaptador universal a bases de datos que se especializa posteriormente para hablar con una base de datos concreta. Mario Muñoz Organero. Servidores de información 21 Servidores de información 22 ASP - Ejemplo <HTML> <BODY> <% For i = 3 To 7 %> <FONT SIZE=<% = i %>> Hello World!<BR> <% Next %> </BODY> /HTML </HTML> Mario Muñoz Organero. ASP – Otro ejemplo <html> <body> <% dim i f i=1 for i 1 tto 6 response.write("<h" & i & ">Header " & i & "</h" </h & i & ">") >) next %> </body> /b d </html> Mario Muñoz Organero. Servidores de información 23 Scripts de servidor. JSP Desarrollado por Sun Utiliza Java El código JSP se puede poner dentro de las páginas á i HTML HTML, <% ... %> Las páginas JSPs generan Servlets Mario Muñoz Organero. Servidores de información 24 JSP - Ejemplo <HTML> <%@ page language="java" imports="java.util.*" %> <H1>Welcome</H1> <P>Today is </P> <jsp:useBean id="clock" id "clock" class="jspCalendar" class "jspCalendar" /> <UL> <LI>Day: <%= clock.getDayOfMonth() %> <LI>Year: <%= clock.getYear() %> </UL> % Check for AM or PM --%> % <%-<%! int time = Calendar.getInstance().get(Calendar.AM_PM); %> <% if (time == Calendar.AM) { %> Good Morning <% } else { %> Good Afternoon %} <% %> <%@ include file="copyright.html" %> </HTML> Mario Muñoz Organero. Servidores de información 25 Servlets (I) Componentes del servidor escritos en Java que se pueden ejecutar en cualquier plataforma y en cualquier servidor Los servlets son a los servidores web como los applets a los navegadores Su rendimiento es tan alto como los programas con FastCGI (reutilizan los procesos) Para poder escribir Servlets es necesario: Paquetes J2EE: Para poder compilar las clases y ejecutar el servidor. Un servidor web con contenedores web integrados o un servidor de aplicaciones como el Tomcat (opensource) Mario Muñoz Organero. Servidores de información 26 Servlets (II) http navegador I Internet Servidor web http JVM Petición HTML Respuesta (Form, enlace) Html S l t API Servlet Servlet l Java Mario Muñoz Organero. Servidores de información 27 Tareas de los servlets 1. Leer los datos enviados por el usuario Típicamente enviados en un formulario en una página Web, pero pueden venir también de un applet o de una aplicación cliente de HTTP 2. Recuperar información de usuario embebida en la petición HTTP 3. Generar resultados Normalmente dentro de una página HTML 5. Poner los parámetros de respuesta HTTP adecuados Cálculo directo de la respuesta, o llamando a otro servidor (posiblemente remoto – accesos con RMI o con CORBA), o accediendo a una base de datos, etc. 4. Formatear los resultados dentro de un documento Capacidades del navegador, cookies, nombre de la máquina del cliente, etc Tipo de documento devuelto (HTML), cookies, parámetros de cache, etc 6 Devolver el documento al cliente 6. En forma de documento textual (HTML), formato binario (GIF), comprimido (gzip)… Mario Muñoz Organero. Servidores de información 28 Comparativa Compañía Lenguaje pro. Coste PHP Zend Php ASP Microsoft VBScript Servlets JAVA JAVA Barato:Puede funcionar sobre Apache Caro: Necesita Microsoft-IIS Barato:Puede funcionar sobre Apache Más robusto y portable Otras Rápidas, fáciles de desarrollar y aprender. Mario Muñoz Organero. Servidores de información 29 Servidores de información 30 Servidores Típicos Mario Muñoz Organero.