27
CLIENTE/SERVIDOR EN INTERNET Programación: Clientes Delgados Dr. Víctor Jesús Sosa Sosa [email protected] Programación: Clientes Delgados GENERACIÓN DINÁMICA DE PÁGINAS CGI (Common Gateway Interface) Módulos compilados: Servlets, ISAPI (Internet Information Server API), NSAPI (Netscape Server API) Information Server API), NSAPI (Netscape Server API) Páginas con scripts de servidor: ColdFusion, PHP (Hypertext Preprocesor), ASP (Active Server Pages), JSP (Java Server Pages)

GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

CLIENTE/SERVIDOREN INTERNET

Programación: Clientes Delgados

Dr. Víctor Jesús Sosa Sosa

[email protected]

Programación: Clientes Delgados

GENERACIÓN DINÁMICA DE PÁGINAS

� CGI (Common Gateway Interface)

� Módulos compilados: Servlets, ISAPI (Internet

Information Server API), NSAPI (Netscape Server API)Information Server API), NSAPI (Netscape Server API)

�Páginas con scripts de servidor: ColdFusion, PHP

(Hypertext Preprocesor), ASP (Active Server Pages),

JSP (Java Server Pages)

Page 2: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

Cliente/Servidor en 3 Planos Estilo Web

HTML y

formas

Visualizador

Web

HTTP TCP/IP

DBMS

HTTPHTTP

Cliente Web

TCP/IP

de InternetDocumentos

HTML

Servidor Web

Plano 2

3

Aplic.Aplic.Aplic.

Lotus

-otes

Monitores

De TP

Plano 3Plano 1

CGI

HTML 1.0

HTML + Formas

JavaScript VBScript

FORMAS• Introducidas en HTML 2, ahora estandar en todos los

visualizadores (browser)

• Diseñadas para la Interacción entre Usuario y Servidor

Servidor Browser

Datos de la Forma

Página -ueva

Asistentes

Plugins ActiveX Java

Página -ueva

• Una forma es llenada en el browser y emitida al servidor para

que sea procesada por ejemplo por un script CGI.

• En general, los formularios incluyen un botón que, al ser

pulsado por el usuario, permite enviar los datos del formulario al

servidor Web para su procesamiento.

• Existen diferentes tecnologías para procesar formularios, las

cuales permiten la generación dinámica de contenido HTML a

partir de los datos de entrada mediante la ejecución de lógica de

trabajo.

Page 3: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

CLIENTE/SERVIDOREN INTERNET

Programación CGIs

Dr. Víctor Jesús Sosa Sosa

[email protected]

Programación CGIs

CGI: Common Gateway Interface

�Una de las formas más comunes de crearpáginas dinámicas Web es usando CGI, laInterfaz de Pasarela Común (Common GatewayInterface).

�Usando programas CGI, el servidor puedeinteractuar con aplicaciones para realizarconsultas en bases de datos, búsqueda dedocumentos y procesamiento de solicitudes,entre otras.

Page 4: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

CGI: Programación

�Normalmente, un servidor Web responde apeticiones de documentos referenciados porun URL.

�Ocasionalmente, el cliente Web envía unURL al servidor Web que apunta no a unURL al servidor Web que apunta no a undocumento Web sino a una aplicación.

�En este caso, el servidor activa la aplicaciónla cual responde a la petición del cliente.

• Un aspecto clave en la programación CGI es

la incorporación de formas interactivas en

HTML 2.0

• Las formas colectan datos del cliente,

enviando ésta información a través del URL.

CGI: Programación

enviando ésta información a través del URL.

• La forma requiere del servidor que realice

una acción específica (programa CG I).

Page 5: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

• La información producida por el CGI es

redirigida hacia el cliente como una página Web.

• El programa CGI es una aplicación desarrollada

en un lenguaje que pueda tener acceso a las

CGI: Programación

en un lenguaje que pueda tener acceso a las

variables de ambiente del sistem a operativo.

• PERL se ha convertido en el lenguaje

predominante para escribir programas CGI.

CGI Scripts• Las formas que se someten hacia un servidor, usualmente son procesadas

por scripts CGI corriendo en el servidor.

• Los scripts CGI pueden ser llamados directamente mediante el URL, sin

necesidad de una forma.

• Los scripts CGI peden estar hechos en cualquier lenguaje.

• Los scripts CGI pueden ser invocados por el servidor basado en algún

patrón de nombre de ruta (usualmente /cgi-bin/script).

Paso de Información a los CGIsPaso de Información a los CGIs• Un Script es invocado desde su URL, pero alguna información adicional

pudiera haber sido agregada al URL.

• La información adicional pudiera estar en una variable de ambiente

(QUERY_STRING) o (si no se guardo en esa variable) venir de la entrada de

datos estándar.

• La información está en forma nombre/valor: nombre=valor&nombre=valor...

• La cadena de información tiene que pasar por un parser para extraer cada

valor (librerías en C, Perl, Java, Tcl, existen para hacer este trabajo, no hacerlo

otra vez).

Page 6: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

Un Escenario Cliente/Servidor con CGI

Submit

Visualizador Web Servidor Web Variables

de Entorno

Ejecución

Método POSTEntorno de

Escritura

2

1

Envío

34

5

Cliente Servidor

Regresa un

Archivo HTML

Salida Estandar

Entrada Estandar

Entorno de Lectura

6

7

9

8

10

1) El cliente acumula datos de la forma HTML y losprepara para su uso en la aplicación enviándoloshacia el servidor en el URL usando el protocolo HTTP.

2) El servidor lee el URL que acompaña a la petición,determina la aplicación que debe ejecutar y entoncesla activa.

CGI: Funcionamiento

la activa.

3) El servidor pasa la información del URL a laaplicación.

4) El programa CGI procesa los datos de la forma yprepara la respuesta. Generalmente, la respuesta seformatea como un documento HTML, de acuerdo alprotocolo HTTP.

5) El programa CGI pasa la respuesta al servidor quien laredirige hacia el cliente.

Page 7: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

• Los datos se pasan al servidor Web devarias formas:�Como argumentos en la línea de comandos.

�Como variables de entorno del sistema

CGI: Obtención de Datos del Servidor

�Como variables de entorno del sistemaoperativo.

�Como entrada de datos estándar a unprograma.

� La mayoría de los lenguajes deprogramación trabajan con los datos que sepasan en la línea de comandos y la entradaestándar.

• Los argumentos en la línea de comandos

son parámetros que usan los programas a

través de mecanismos propios del

lenguaje:

Argumentos en la Línea de Comandos

lenguaje:� public void static main(String[]argv) en Java

� Void main(int argc,char *argv[]) en C.

• Las consultas HTTP ISINDEX indican que

los datos se pasan como argumentos de

la línea de comandos.

Page 8: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

• El siguiente programa usa la línea de

comandos para recibir los parámetros de

la aplicación.

CGI: Ejemplo

• El programa ejecutable Echo.exe puede

residir en el directorio /cgibin/ para

ejecutarse como programa CGI.

// Echo.java

public class SysProps

{

public static void main(String[] args)

{

String argv;

if (args.length > 0)

argv = args[0];

else

CGI: Ejemplo

else

argv = new String("CGI!");

System.out.println("Content-Type: text/html\n\n");

System.out.println("<HTML><BODY>");

System.out.println("<H1>”+argv+"</H1>");

System.out.println("</BODY></HTML>");

}

} Este programa puede producir el texto HTML siguiente:

Content-Type: text/html

<HTML><BODY><H1>Hola!</H1></BODY></HTML>

Page 9: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

• El programa se activa con el siguiente URL en el lado del cliente (browser):http://www.miservidor.com/cgi-bin/Echo.exe?Hola!

• El directorio cgi-bin/ puede ser subdirectorio de

CGI: Ejemplo

• El directorio cgi-bin/ puede ser subdirectorio de htdocs en el servidor: Apache (para ambos Unix y Windows).

• El programa Echo.exe también puedeactivarse usando telnet dando la siguiente línea:

telnet www.miservidor.com 80

• Al responder telnet (frecuentemente, no redirige

CGI: Ejemplo

• Al responder telnet (frecuentemente, no redirigela entrada del teclado hacia la pantalla), seenvía la petición HTTP directamente:GET /cgi-bin/Echo.exe?Hola! HTTP/1.1 crlfcrlf

• Telnet mostrará el texto HTML generado por elprograma.

Page 10: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

� La forma de comunicación más común es

mediante las variables de entorno del sistema

operativo:

• Las variables son externas a la ejecución del

programa.

CGI: Variables de entorno

programa.

• El tamaño de los datos no pueden exceder los 40 Kb.

� Las variables de entorno se pueden usar

independientemente de si la ejecución es

resultado de una petición ISINDEX, por el envío

de un formulario o por seguir un hiperenlace.

• Las variables de entorno se pueden usar

independientemente de si la ejecución es

resultado de una petición ISINDEX , por el

envío de un formulario o por seguir un

CGI: Variables de entorno

envío de un formulario o por seguir un

hiperenlace.

Page 11: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

Variable Descripción

CONTENT_LENGTH Número de caracteres que se pasan a través de una

entrada estándar

CONTENT_TYPE Tipo MIME asociado a los datos

GATEWAY_INTERFACE Versión de la ción CG I del servidor

CGI: Variables de entorno

HTTP_* Contenido de los cam pos recibidos en el encabezado

HTTP.

HTTP_ACCEPT Contenido del campo HTTP_ACCEPT recibido en el

encabezado HTTP

PATH_INFO Inform ación extra que se añade a la URL que

corresponde a un CGI

PATH_TRANSLATED Ruta que el servidor Web extrae del URL

QUERY_STRING Parte de la URL corresponde a la petición

CGI: Variables de entorno

Variable DescripciónREMOTE_ADDR Dirección IP del cliente

REMOTE_HOST Dirección IP del servidor

REMOTE_IDENT Nombre del cliente

REMOTE_USER Nombre del asociado al cliente

REQUEST_METHOD Método requerido por el cliente: GET, POST,

HEAD, etc.

SCRIPT_NAME Ruta y nombre del CGI

SERVER_NAME Nombre del servidor Web

SERVER_PROTOCOL Nombre y versión del protocolo que se usa en la

petición

SERVER_SOFTWARE Nombre y número de versión del servidor Web

Page 12: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

Variables de Ambiente

• SERVER_SOFTWARE

• SERVER_NAME

• GATEWAY_INTERFACE

• SERVER_PROTOCOL

• SERVER_PORT

• REQUEST_METHOD

• HTTP_ACCEPT

• PATH_INFO • PATH_INFO

• PATH_TRANSLATED

• SCRIPT_NAME

• QUERY_STRING

• REMOTE_HOST

• REMOTE_ADDR

• REMOTE_USER

• REMOTE_IDENT

• AUTH_TYPE

• CONTENT_TYPE

• CONTENT_LENGTH

QUERY_STRING

contiene información codificada de la

siguiente forma:

� Los espacios se substituyen por signos +.� Los espacios se substituyen por signos +.

� Los demás caracteres se pueden substituir

por %xx (dos dígitos hexadecimales).

�Los datos de un formulario se codifican como

secuencia de pares name=value separados por

el signo &.

Page 13: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

El programa de comandos Echo.bat obtiene

la variable QUERY_STRING y la pasa en lalínea de comandos al programa Echo.exe :

@ECHO OFF

Paso de Variables de Entorno

@ECHO OFF

Echo.exe %QUERY_STRING%

• El programa Echo.bat se activa desde el

cliente:

HTTP://www.miservidor.com/cgi-bin/echo.bat

• Los programas CGI procesan la

información de un formulario

dependiendo del método usado GET o

POST.

CGI: Formularios

POST.

• Si el formulario usa GET, los datos se

obtienen de QUERY_STRING.

• Si el formulario usa POST, los datos se

obtienen de la entrada estándar.

Page 14: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

La forma FORM.HTML invoca a un CGI:

<HTML>

<BODY>

<H1>Hello Apache CGI!</H1><FORM METHOD="GET" ACTION="/cgi-bin/Echo.bat">

CGI: Formularios, Ejemplo

<FORM METHOD="GET" ACTION="/cgi-bin/Echo.bat">

<INPUT TYPE="TEXTFIELD" NAME="USER"

VALUE="CGI Application">

<INPUT TYPE="SUBMIT" NAME="SEND" VALUE="OK">

</FORM>

</BODY>

</HTML>

• El URL http:/www.miservidor.com/cgibin/form.html

produce la invocación de la acción echo.bat

cuando se oprime el botón SEND (SUBMIT).

• El programa echo.exe se invoca con el valor

CGI: Formularios, Ejemplo

• El programa echo.exe se invoca con el valor

USER=CGI+Scripting&SEND=OK de la variableQUERY_STRING.

• La página Web vista en el browser sería:

USER=CGI+Scripting&SEND=OK

Page 15: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

• Durante la recopilación de datos de una

forma, el programa CGI no almacena

información intermedia ya que no ofrece

un estado persistente (stateless).

CGI: Estado de la Sesión

un estado persistente (stateless).

• La falta de persistencia se puede resolver

de dos formas:� Usando campos ocultos en la forma

� Usando persistencia de objetos

� Usando galletas (cookies)

• El browser evita que los campos ocultosse muestren en la forma, aunque puedenusarse para almacenar información entretransacciones.

Campos Ocultos

<INPUT TYPE="hidden" NAME=".." VALUE="..">

• Usando concatenación de caracteres, elatributo VALUE se usa para acumular losdatos obtenidos en la sesión.

Page 16: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

CGI: Manteniendo el EstadoEstado

• Las sesiones en HTTP son sin estado.

• Las sesiones en HTTP solo duran desde la petición del visualizador a la

respuesta del servidor

• Para manejar cosas como tarjetas de compras, se necesita mantener alguna

información de la sesión o restaurarse de algun sitio

Cookies• Las Cookies son identificadores con ningún significado en particular

• Son emitidas desde los servidores a los clientes• Son emitidas desde los servidores a los clientes

• Los clientes las almacenan por un periodo de tiempo

• En cada petición al mismo servidor, la cookie es incluida en la petición

• El servidor puede utilizar la cookie para restaurar el estado que colecto

recientemente, indexado por la cookie.

Campos Ocultos• Un campo en una forma HTML puede ser etiquetado como “oculto”

• Este no aparecera en la forma

• El valor del campo será asignado por el servidor

• Cuando la forma es enviada, el campo será retornado al servidor

• Información de estado puede ser ubicada en esos campos

• Por privacidad, esto no debiera contener información personal.

• Un objeto se dice persistente cuando

extiende su duración más allá que la del

programa que lo originó.

• Los objetos persitentes requieren de un

Persistencia

• Los objetos persitentes requieren de un

medio de almacenamiento estable para

guardar su estado interno.

• Los objetos serializables más simples

son las cadenas de caracteres.

Page 17: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

Para lograr persistencia, se necesita:

1.- Convertir la estructura y el contenido de

un objeto en memoria principal a una

forma secuencial de bytes que sea

Persistencia

forma secuencial de bytes que sea

apropiada para su almacenamiento o

trasmisión a través de una red

(serialización).

2. Crear un objeto idéntico al original a partir de suforma serializada.

3. Un mecanismo para convertir a un objeto a odesde su forma serializada, controlado ya seaen forma automática o por programación.

Persistencia

en forma automática o por programación.

• Java posee un conjunto de clases paraimplementar persistencia:

ObjectOutputStream,

ObjectInputStream, Serializable,

Externalizable

Page 18: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

Seguridad en CGIs: Servidor

• Temas importantes de seguridad en el Servidor

• El procesamiento de la forma es realizado con algún acceso al

sistema del servidor

• Lenguajes típicos utilizados son Perl, Shell, Tcl -lenguajes de

scripts que validan tipos débilmente, con capacidades de evaluación

• Los CGIs pueden ser atacados vía las Formas, o directamente.

Seguridad en CGIs: Cliente• No hay mucho problema de seguridad en el Cliente

• Información muy limitada la que se transmite hacia el servidor

• El Identificador del Host del Cliente es conocido

• El Identificador del usuario en el Cliente es desconocido

• Si el cliente pasa información importante al servidor, la

seguridad en los servidores es el tema a preocuopar por parte del

cliente

• A los usuarios se les puede solicitar información importante, ej.

Numeros confidenciales - y pueden proveerlos -

Seguridad en CGIs: Cliente

/* ***************************************************************

Programa Espia

compilar en unix con: gcc -i espia.c -o espia.cgi

Este programa se da solo como ejemplo de programacion

de CGIs y el autor no se responsabiliza en modo alguno

por la utilizacion del mismo

*************************************************************** */

#include <stdlib.h>

void imprimeVariable( char *Nombre );

int main(){

/* *********************************** */

printf("Content-Type: text/html\n\n");printf("Content-Type: text/html\n\n");

printf("<html><body bgcolor=#ffffff text=#ffffff>\n");

printf("<p align=center><table cellpadding=4 bgcolor=000000>\n");

printf("<tr><td color=000080 align=center>");

printf("<b>Variables del Sistema</b></td></tr>\n");

imprimeVariable("AUTH_TYPE");

imprimeVariable("CONTENT_LENGTH");

imprimeVariable("CONTENT_TYPE");

imprimeVariable("DOCUMENT_ROOT");

imprimeVariable("GATEWAY_INTERFACE");

imprimeVariable("HTTP_ACCEPT_LANGUAGE");

imprimeVariable("HTTP_COOKIE");

Page 19: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

imprimeVariable("HTTP_REFERER");

imprimeVariable("HTTP_UA_COLOR");

imprimeVariable("HTTP_UA_CPU");

imprimeVariable("HTTP_UA_OS");

imprimeVariable("HTTP_UA_PIXELS");

imprimeVariable("HTTP_USER_ACCEPT");

imprimeVariable("HTTP_USER_AGENT");

imprimeVariable("HTTP_USER_CONNECTION");

imprimeVariable("PATH_INFO");

imprimeVariable("PATH_TRANSLATED");

imprimeVariable("QUERY_STRING");

imprimeVariable("REMOTE_ADDR");

imprimeVariable("REMOTE_HOST");

imprimeVariable("REMOTE_IDENT");

imprimeVariable("REQUEST_METHOD");

void imprimeVariable( char *Nombre ){

/* *************************************

recibe el nombre de la variable y

la imprime formateada como celdas de

una tabla

************************************* */

printf("<tr>\n");

printf("<td bgcolor=\"#9999FF\" valign=top>%s</td>\n",Nombre);

printf("<td bgcolor=\"#DDDDFF\" valign=top><font color=#000000>");

/*imprimeVariable("REQUEST_METHOD");

imprimeVariable("REMOTE_USER");

imprimeVariable("SCRIPT_FILE_NAME");

imprimeVariable("SCRIPT_NAME");

imprimeVariable("SERVER_NAME");

imprimeVariable("SERVER_SOFTWARE");

imprimeVariable("SERVER_PORT");

imprimeVariable("SERVER_PROTOCOL");

printf("</table>\n");

printf("</body></html>");

return( 0 );

}

/*

*********************

aqui toma la variable

y la imprime

*********************

*/

printf("%s",getenv(Nombre));

printf("</td>\n");

printf("</tr>\n");

}

• Además de la falta de persistencia, otro

problema importante es que el servidor

Web corre como proceso separado.

• La falta de interacción impide a los

CGI: Desventajas

• La falta de interacción impide a los

programas CGI obtener información

importante del servidor (p.ej. el CGI no

puede escribir en el archivo histórico

(log) del servidor).

Page 20: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

• OpenMarket (www.fastcgi.com) ha

desarrollado FastCGI, un estándar

alternativo que permite crear un sólo

proceso persistente por cada petición.

CGI: Alternativas

proceso persistente por cada petición.

• Sin embargo, no reduce la proliferación

de procesos durante peticiones

concurrentes.

• Tampoco mejora la interacción servidor ni

es suficientemente portable.

• mod_perl es un módulo del servidor

Apache que mejora el rendimiento de

CGI.

• El programa demonio httpd contiene un

Alternativas CGI: PERL

• El programa demonio httpd contiene un

intérprete de Perl que ofrece acceso total

a la funcionalidad del servidor Apache.

• Los CGI son precompilados y ejecutados

en el servidor corriendo eficientemente.

Page 21: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

CGI: Optimizaciones

Petición1 a CGI A

Petición1 a CGI B

Petición1 a CGI C

Servidor Web

Proceso Principal1 proceso/petición

Proc. Hijo de CGI A

Proc. Hijo de CGI B

Proc. Hijo de CGI C

CGI Básico

Petición1 a CGI C Proc. Hijo de CGI C

Petición1 a CGI A

Petición1 a CGI B

Petición2 a CGI A

Servidor Web

Proceso Principal1 proceso/CGI

(único) Proc. Hijo de CGI A

(único) Proc. Hijo de CGI B

Fast CGI

Procesos persistentes.

• Varias empresas han desarrollado APIspara extender sus servidores Web: ISAPIde Microsoft y NSAPI de Netscape.

• Los APIs extienden la funcionalidad

Alternativas CGI: Extensiones al

Servidor

• Los APIs extienden la funcionalidadbásica del servidor para manejar tareasrelegadas a programas CGI.

• Las extensiones son difíciles dedesarrollar, mantener, portar y brindarseguridad y confiabilidad (pueden hacercaer al servidor).

Page 22: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

• Netscape ofrece JavaScript como

lenguaje interpretado de comandos en el

lado del servidor.

• JavaScript se inserta en páginas HTML

Alternativas CGI: JavaScript en el

Servidor

• JavaScript se inserta en páginas HTML

para generar contenido dinámico.

• Las páginas son precompiladas para

mejorar la eficiencia.

CGI: Optimizaciones

Petición1 extensión A

Servidor Web

Proceso Principal

Uso de APIs del ServidorNSAPI: Netscape/Sun

ISAPI: MS IIS

Módulo de Apache Extensión A

Petición1 extensión B

Petición2 extensión A

Extensiones parte del proc. servidor

Extensión B

Page 23: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

• Java Servlets. Un servlet es una extensión

genérica (clases cargadas dinámicamente) que

extiende la funcionalidad del servidor.

• Cada servlet se maneja por un proceso ligero

Alternativas CGI: Java Servlets

• Cada servlet se maneja por un proceso ligero

(thread) dentro del servidor Web por lo que el

nivel de interacción es mayor que el conseguido

por CGI.

• Los servlets son más portables, escalables y

eficientes que la mayoría de las soluciones

anteriores.

CGI: Optimizaciones

Petición a servlet A

Servidor Web

Proceso Principal

Servlet ATrhead

JVM

Servlets

Petición servlet B

Petición servlet A

Servlet: 1 trhead/petición

Servlet A

Servlet B

Trhead

Trhead

Page 24: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

Servlets• Usan clases e interfaces de 2 paquetes: javax.servlet (servlets genericos),

javax.servlet.http (añade funcionalidad particular http)

• No tienen método main() como en Java.

• Cada vez que el servidor pasa una petición a un servlet se invoca el método service(),

que habrá que reescribir (override).

• El método service() acepta 2 parámetros: objeto petición y objeto respuesta.

• Los servlets http, tienen ya redefinido el método service(), y llama a doXXX(), donde

XXX es el nombre de la orden que viene en la petición del servidor: doGet(), doPost(),

etc...etc...

Petición GET

Respuesta

Subclase HttpServlet

doGet()

Servlets

Petición POST

Respuesta doPost()

Servidor

Web

service()

Implementar en una subclase:

Servlets

• Ventajas Principales:

• Portabilidad. Usa las mismas llamadas (API), corre sobre Java.

• Potencia. Puede usar todo el API de java (excepto AWT), además

de comunicarse con otros componentes como RMI, CORBA, Java

Beans, Bases de Datos, etc.

• Eficiencia. Queda en la memoria del servidor como una única

instancia. Cada petición genera un trhead. Al estar persistente puede instancia. Cada petición genera un trhead. Al estar persistente puede

mantener su estado con recursos externos (BD).

• Seguridad. Además de la seguridad que da la VM (gestión de

memoria, auscencia de punteros, excepciones), tiene un gestor de

seguridad “security manager” que puede evitar servlets

“malintencionados” o mal escritos que pueden dañar al servidor.

• Integración con el servidor. Puede cooperar con el servidor en

formas que los CGIs no pueden, como cambiar path de url, poner

líneas de log, comprobar autorización, asociar tipos MIME a los

objetos, incluso añadir usuarios y permisos al servidor.

Page 25: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

Código Fuente para el Ejemplo Hola Mundo

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException

{

Servlets

{

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<body>");

out.println("<head>");

out.println("<title>Hello World!</title>");

out.println("</head>");

out.println("<body>");

out.println("<h1>Hello World!</h1>");

out.println("</body>");

out.println("</html>");

}

}

Java Server Pages (JSP)

Tecnología que permite mezclar HTML regular y estático con contenidos

dinámicamente generados a partir de servlets

Se divide en dos partes: La parte estática de HTML y la parte dinámica

generada para JSP <% %>.

<html>

<head> <title> Bienvenido a nuestra tienda </title></head>

<body><body>

<h1> Bienvenido a nuestra tienda </h1>

<small> Si&eacute;ntase bienvenido,

<!-- el nombre del usuario será “usuario nuevo” para los visitantes de primera vez -->

<%= Utils.getNombreUsuarioDeCookie(petición) %>

. Para acceder a su configuración de cuenta, haga clic

<a href=“configurar-cuenta.html”> aqu&iacute;.</a></small>

<p>

El Html est&aacute;ndar para el resto de la p&aacute;gina de la tienda en Internet.

</body>

</html>

Page 26: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

• Microsoft ha desarrollado ASP para

insertar código (VBScript o JScript) en los

documentos HTML del servidor Web.

• El código se lee y ejecuta por el servidor

Alternativas CGI: Active Server Pages

• El código se lee y ejecuta por el servidor

antes de que la página se envíe al cliente.

• ASP corre en IIS (v3.0) pero también en

otros servidores Web con Chili!

(www.chilisoft.com)

Ventajas de JSP

Comparado con:

• ASP. La parte dinámica está escrita en Java y no en VBScript

(transportable a más sistemas)

• PHP. Aunque es gratuito y tanto similar a ASP y a JSP, JSP cuenta con

una API más extensa (para redes, base de datos, objetos distribuidos, etc.)

• Servlets. JSP ahorra escribir muchos “println” , y divide más claramente

el trabajo de presentar contenido, con el trabajo de desarrollo de el trabajo de presentar contenido, con el trabajo de desarrollo de

aplicaciones.

• SSI. Server Side Inclusions. Solo orientado a aplicaciones sencillas. JSP

cuenta con más herramientas de apoyo

• JavaScript. Solo administra situaciones donde la información dinámica

esta en el lado del cliente. Con excepción de cookies, los datos de la

petición http no están disponibles para los procedimientos JavaScript

dellado del cliente. No accede a recursos del servidor (redes, BD, etc.)

Page 27: GENERACIÓN DINÁMICA DE PÁGINAS - CINVESTAV

CGI: Resumen de OptimizacionesOptimizando CGIs

• Ejecutar un script CGI involucra crear un nuevo proceso

• Esto conlleva overheads

• Si el script puede correr dentro del servidor, este overhead es

removido

Ejemplos

• Active Server Pages - corren dentro del Internet Explorer• Active Server Pages - corren dentro del Internet Explorer

• Fast CGI

• Java servlets - corren dentro de Tomcat

• Modulos Apache

Costo/beneficio

• Menos costo de iniciación

• Pueden ser persistentes en el servidor

• Posiblemente podría estar un proceso de iniciación para

mantener la sesión

• Pero, tiene acceso a los interiores del servidor