Creación de sitios web dinámicos con Delphi e InterBase, primera parte

El entender y dominar el desarrollo de aplicaciones para internet requiere del conocimiento de las distintas tecnologías en las que se basan. Aquí presento una introducción a este tipo de desarrollos usando herramientas Borland.


En sus comienzos, los documentos en internet han sido archivos de texto escritos en el conocido lenguaje

de descripción de páginas HTML. Este lenguaje es interpretado por el navegador y mostrados en la pantalla de

la computadora de quien los consulta. Los documentos pueden contener imágenes, sonidos, texto y vídeo,

siempre y cuando las capacidades del navegador y la velocidad de la línea de transmisión lo permitan.


 


Esto se realiza bajo un esquema cliente/servidor, donde el cliente es el navegador de páginas web (o

browser) y el servidor es la computadora que tiene el software del servidor de HTTP (servidor de páginas

web).


 


Hace algunos años, la mayoría de los servidores de páginas web (HTTP) se limitaban a ser simples

servidores de archivos; claro, con las capacidades de transmitir por el puerto 80 de TCP y de comunicarse

mediante el protocolo HTTP (HyperText Transfer Protocol). Los sitios web desarrollados de esta forma se

limitan a un conjunto de archivos HTML los cuales tienen hiperenlaces entre ellos y hacia archivos que se

encuentran en otros servidores. Si deseamos cambiar la información que se encuentra en los archivos del sitio

tenemos que abrir físicamente el archivo, modificar los datos y volver a guardar el archivo. Algo parecido a la

manera en que utilizamos un procesador de palabras para modificar archivos de texto.


 


Pero los sitios web han ido evolucionando, y parte de esta evolución es que la información cambie

periódicamente, y que haya una buena organización de la información en el sitio. Esto se vuelve crítico en los

sitios que cuentan con mucha información de diversos tipos y que debe ser actualizada casi a diario. Crear un

sitio web de estas dimensiones utilizando solamente archivos HTML sería casi imposible.


 


La respuesta está en el desarrollo de una aplicación que esté basada en una base de datos, la cual

contendrá la información a desplegar. De esta manera podemos hacer que nuestras páginas web tomen la

información de esa base de datos cada vez que se solicite una página al servidor. Después podemos modificar

los datos de la base de datos y así cambiarán los datos que el servidor web entregue a los navegadores. Otra

gran ventaja es que le damos al sitio un diseño uniforme, ya que el cambio de la información a desplegar no

interferirá con el diseño original.


 


Tecnologías


 


Pero ahora la pregunta es: ¿Qué tecnología utilizo para esto? Bueno, en un principio debemos tener claro

las partes que conforman este esquema.


 


En primer lugar, tenemos un servidor HTTP, o servidor web. Este servidor es un software que se ejecuta

en una computadora servidor y que manda las páginas a los clientes o navegadores que se lo solicitan.


 


En segundo lugar tenemos a los clientes o navegadores. Estos son aplicaciones que solicitan las páginas a

los servidores HTTP y que muestran la información formateada en la pantalla de la computadora en la cual son

ejecutados. Ambos deben tener alguna conexión de red, por medio de la cual se comunicarán e intercambiarán

los datos.


 


Este es el esquema más básico, pero para que podamos crear un sistema de páginas dinámico debemos de

tener un servidor HTTP que sea capaz de ejecutar un programa que a su vez mande los datos de salida a los

navegadores. Este programa será capaz de obtener la información de la base de datos del sitio, darle un formato

adecuado e integrarlo en el diseño de una página web que será la que se enviará al navegador.


 


¿Cómo realizar esto? Veamos. Como expliqué anteriormente, en un esquema tradicional, el servidor web

recibe la petición, localiza el archivo y lo devuelve al navegador que se lo solicito. En un esquema de páginas

dinámicas, el servidor HTTP recibe una solicitud que hace referencia a un archivo pero que tiene la

particularidad de que es un pequeño programa, el cual dependiendo de la tecnología que se use puede ser

compilado o interpretado. Este programa se ejecuta en el servidor y da por salida un resultado el cual es

enviado al navegador que realizó la solicitud de página. Entonces en ese pequeño programa podremos procesar

las entradas, hacer los accesos a la base de datos, formatear la salida, y finalmente devolver los datos a quien

los solicitó.


 


Un pequeño ejemplo


 


Voy a plantear el esquema para hacer un ejemplo práctico, utilizando a InterBase como base de datos y

creando los programas con Delphi.


 


Necesitamos en primer lugar una computadora que tenga instalado un software de servidor HTTP. Este

servidor HTTP debe tener ciertas características para poder trabajar con los programas escritos con Delphi,

pues debe poder ejecutar archivos WinCGI, CGI, o ISAPI/NSAPI, que son tecnologías creadas por Microsoft y

que permiten procesar la información que va a responder el servidor al cliente o navegador.


 


Para nuestro ejemplo, podemos utilizar el Personal Web Server que viene integrado en las versiones más

recientes de Windows. Si utilizas Windows NT, entonces se puede utilizar el Internet Information Server que

es un servidor web completo y robusto, utilizado en sitios web en producción. También se debe aclarar que la

tecnología NSAPI es utilizada por el servidor de Netscape, y es compatible con la tecnología ISAPI que utiliza

el servidor IIS y PWS de Microsoft.


 


Obviamente, necesitamos una base de datos. En este caso utilizaré la base de datos InterBase 6, por lo que

deberemos también tenerla instalada en la computadora.


 


Tipos de aplicaciones Delphi para servidor web


 


Como mencioné anteriormente, existen varios tipos de aplicaciones de servidor web: ISAPI/NSAPI, CGI

independiente y WinCGI independiente.

Haga Clic para ver la Imagen original en una ventana nueva


ISAPI/NSAPI es una aplicación que se encuentra en una DLL (Biblioteca de enlace dinámico) la cual es cargada por el servidor web. En este tipo de aplicación cada solicitud que recibe el servidor web es manipulada por una hilo de ejecución independiente.


 


Una aplicación CGI independiente es una aplicación de consola que recibe la solicitud por medio de la entrada estándar y la devuelve la salida al servidor web por medio de la salida estándar. Cada solicitud es manejada por una instancia de la aplicación.


 


Una aplicación WinCGI independiente es una aplicación Windows que recibe solicitudes del cliente por medio de un archivo de configuración INI creado por el servidor y que devuelve el resultado por medio de un archivo que el servidor devuelve al cliente. Cada solicitud es manejada por una instancia separada de la aplicación.


 


Como vemos, tenemos varias opciones, aunque para nuestro ejemplo utilizaremos únicamente la tecnología ISAPI/NSAPI.

Haga Clic para ver la Imagen original en una ventana nueva


En una aplicación ISAPI/NSAPI la solicitud del cliente es pasada a la DLL como una estructura y es evaluada por un objeto de la clase TISAPIApplication, la cual crea a su vez un objeto de clase TISAPIRequest y otro de la clase TISAPIResponse.


 


En la figura 1 vemos cómo crear una nueva aplicación ISAPI. Primero debemos seleccionar New… del menú File de Delphi y luego seleccionar el icono de Web Server Application. En la figura 2 se aprecia la ventana de selección del tipo de aplicación web, seleccionamos ISAPI/NSAPI y nos crea una estructura para una aplicación de ese tipo.


 


Una aplicación ISAPI/NSAPI consta de un WebModule el cual nos muestra las acciones que tendrá nuestra aplicación. Cada acción realiza una tarea específica en repuesta a una solicitud HTTP. Por ejemplo, podemos tener varias acciones, donde una puede insertar un registro en una tabla, por ejemplo, mientras que otra acción puede realizar una consulta y regresar los datos formateados en una tabla HTML.


 


Para efectos de nuestro ejemplo, crearé una única acción que devuelva un mensaje al navegador. El mensaje será “Prueba de funcionamiento de ISAPI”. El texto deberá ir formateado como una página HTML, por lo que se deberán agregarse las etiquetas de HTML para que el navegador lo interprete adecuadamente.


 


Para ello se debe hacer clic con el botón derecho del ratón sobre el elemento Actions de la parte izquierda del WebModule1, y seleccionar Add Item del menú desplegable. Esto creará una acción llamada WebActionItem1. El nombre puede ser cambiado, aunque para este ejemplo lo dejaremos tal como está.


 


La única propiedad a modificar es la propiedad Default, la cual la pondremos a verdadero (true). Esto significa que cuando se invoque el nombre de la DLL, se ejecutará esta acción por default, en caso de que no se indique alguna acción en específico.


 


Después en la sección de eventos del Inspector de Objetos hacemos doble clic sobre el único evento,

OnAction, creando un manejador de eventos.

Haga Clic para ver la Imagen original en una ventana nueva


Si analizamos el encabezado del procedimiento TWebModule1.WebModule1WebActionItemAction,

vemos como se cuenta con un objeto Request del tipo TWebRequest. Este objeto contiene los datos de la

solicitud HTTP, como las variables y sus valores, cookies, fecha del encabezado de la solicitud HTTP, versión

del protocolo HTTP, URL del encabezado HTTP, y muchos datos más que son de mucha utilidad.


 


También existe un objeto Response de la clase TWebResponse. Este objeto tiene propiedades similares a

las del objeto Request, con la diferencia de que este objeto es el que dará la salida hacia el cliente o navegador.

La propiedad que utilizaremos para devolver los datos es la propiedad Content. Esta propiedad puede ser una

cadena con comandos HTML -como en el presente ejemplo- aunque también pude ser el nombre de un archivo

HTML, un gráfico pasado como un stream o cualquier otro contenido MIME. El tipo de contenido se debe

especificar por medio de la propiedad ContentType.


 


En la figura 3 vemos cómo se asigna la cadena de respuesta a la propiedad Content del objeto Response.

Nótese que se anexan las etiquetas HTML para que el navegador interprete correctamente los datos.


 


Para compilar y crear el archivo DLL, debemos ejecutar Build All del menú Project de Delphi. Si

examinamos la carpeta donde guardamos el proyecto, vemos que se ha creado un archivo DLL con el nombre

del proyecto. En esta prueba, he llamado “prueba_isapi.dpr” al proyecto, por lo que se obtuvo un archivo

“prueba_isapi.dll”. Este archivo debe ser copiado a la carpeta scripts del servidor web. Esta carpeta del

servidor web se encuentra comúnmente en C:\inetpub aunque en algunas versiones de Windows se encuentra

en c:\WebShare.


 


Una vez copiado el archivo, podemos ejecutarlo. Para esto debemos arrancar algún navegador de páginas

HTTP. Comúnmente contamos con MS Internet Explorer o con Netscape Navigator.

Deberemos especificar el protocolo (http), el nombre de la computadora (el cual se especifica en el IIS o

en el PWS) y la ruta hacia el archivo DLL. En el caso de la computadora donde realicé este ejemplo, puse la

siguiente línea en la dirección del navegador:


 


http://satellite/scripts/prueba_isapi.dll


 


Donde se observa que la computadora se llama satellite, y se hace referencia al archivo prueba_isapi.dll

que se encuentra en la carpeta scripts. Obviamente, si es un servidor que tiene conexión real a la internet, se

deberá especificar el nombre de la computadora con el dominio de internet, algo parecido a esto:


 


http://www.miservidor.com/scripts/prueba_isapi.dll


 


donde www.miservidor.com es el nombre y dominio de la computadora conectada a la internet.

El resultado del ejemplo lo vemos en la figura 4, donde únicamente obtenemos el mensaje en letras grandes, resultado de

formatearlo como encabezado 1 (<H1>).

Haga Clic para ver la Imagen original en una ventana nueva


Conclusiones


 


Este artículo trata de ser una sencilla introducción a la programación de aplicaciones para internet, en entregas posteriores veremos como crear aplicaciones que tomen y muestren los datos de una base de datos InterBase. Como se vio es muy sencilla la programación de estas aplicaciones y podemos desarrollarlas en nuestra PC de escritorio, sin tener que contar con una conexión a la internet.


 


Es importante aclarar que la combinación de Windows con IIS/PWS e ISAPI no es la única para el desarrollo de aplicaciones para internet, ya que existen muchas tecnologías que permiten hacer este tipo de aplicaciones. En la actualidad el compilador Kylix de Borland en su versión Server Developer permite crear aplicaciones de manera casi idéntica a como se manejan las aplicaciones para internet con Delphi, con la diferencia de que están diseñadas para trabajar con el servidor Apache sobre Linux.