CLIENTE/SERVIDOREN INTERNET
Programación: Clientes Delgados
Dr. Víctor Jesús Sosa Sosa
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)
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.
CLIENTE/SERVIDOREN INTERNET
Programación CGIs
Dr. Víctor Jesús Sosa Sosa
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.
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).
• 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).
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.
• 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.
• 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>
• 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.
� 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.
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
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 &.
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.
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
• 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.
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.
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
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");
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).
• 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.
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).
• 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
• 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
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.
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é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í.</a></small>
<p>
El Html estándar para el resto de la página de la tienda en Internet.
</body>
</html>
• 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.)
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