Uno de los primeros mecanismos para generar contenido dinámico para la web es el API llamado CGI (acrónimo de common gateway interface, interfaz de pasarelas común). Éste es un mecanismo muy simple que permite que un servidor web ejecute un programa escrito en cualquier lenguaje de programación (ya sea como respuesta a un formulario HTML, a partir de un enlace, etc.), que le pueda pasar unos parámetros (bien provenientes del usuario, vía formularios, bien parámetros de configuración del servidor, del entorno de ejecución, etc.) y, finalmente, hace posible que el resultado de la ejecución de este programa sea enviado al usuario como una página web o cualquier otro tipo de contenido (un gráfico, etc.). Gracias a este sencillo mecanismo, las páginas web, que hasta el momento de la aparición de CGI tenían unos contenidos estáticos e inmutables, son generadas dinámicamente en respuesta a peticiones concretas.
Al contrario de lo que sucede con los Servlets, etc., no existe ningún tipo de limitación al lenguaje de programación que podemos utilizar para escribir un CGI. Podemos usar desde scripts escritos en el lenguaje de la shell del sistema operativo hasta programas escritos en ensamblador, pasando por todo el abanico de lenguajes de programación existentes: C, C++, Perl, Python, etc. Hasta ahora, el lenguaje más popular para la escritura de CGI es Perl, ya que proporciona utilidades al programador que simplifican sobremanera la tarea de escribir programas CGI.
Introducción a los Java Servlets
Los Servlets de Java son la propuesta de la tecnología Java para el desarrollo de aplicaciones web. Un Servlet es un programa que se ejecuta en un servidor web y que construye una página web que es devuelta al usuario. Esta página, construida dinámicamente, puede contener información procedente de bases de datos, ser una respuesta a los datos introducidos por el usuario, etc. Los Servlets Java presentan una serie de ventajas sobre los CGI, el método tradicional de desarrollo de aplicaciones web. Éstos son más portables, más potentes, mucho más eficientes, más fáciles de usar, más escalables, etc.
Con el modelo tradicional de CGI, cada petición que llega al servidor dispara la ejecución de un nuevo proceso. Si el tiempo de vida del CGI (el tiempo que tarda en ejecutarse) es corto, el tiempo de instanciación (el tiempo de arrancar un proceso) puede superar al de ejecución. Con el modelo de Servlets, la máquina virtual de Java, el entorno donde se ejecutan, se arranca al iniciar el servidor, permaneciendo arrancada durante toda la ejecución del mismo. Para atender cada petición no se arranca un nuevo proceso, sino un thread, un proceso ligero de Java, mucho más rápido (de hecho, casi instantáneo). Además, si tenemos x peticiones simultáneas de un CGI, tendremos x procesos simultáneos en memoria, consumiendo así x veces el espacio de un CGI (que, en caso de ser interpretado, como suele ocurrir, implica el consumo de x veces el intérprete). En el caso de los Servlets, hay determinada cantidad de threads, pero sólo una copia de la máquina virtual y sus clases. El estándar de Servlets también nos ofrece más alternativas que los CGI para optimizaciones: caches de cálculos previos, pools de conexiones de bases de datos, etc.
El estándar de Servlets nos ofrece una magnífica infraestructura de desarrollo de aplicaciones web, proporcionándonos métodos para análisis automático y decodificación de los datos de los formularios de HTML, acceso a las cabeceras de las peticiones HTTP, manejo de cookies, seguimiento, control y gestión de sesiones, entre otras muchas facilidades. Potencia Los Servlets Java permiten hacer muchas cosas que son difíciles o imposibles de realizar con los CGI tradicionales. Los Servlets pueden compartir los datos entre sí, permitiendo compartir datos, conexiones a bases de datos, etc. Asimismo, pueden mantener información de solicitud en solicitud, facilitando tareas como el seguimiento de las sesiones de usuario, etc. Portabilidad Los Servlets están escritos en Java y se rigen por un API estándar bien documentado. Como consecuencia de ello, los Servlets pueden ejecutarse en todas las plataformas que nos ofrezcan soporte de Java Servlets, sin tener que recompilar, modificarse, etc., sean estas plataformas Apache, iPlanet, IIS, etc., y además, con independencia de sistema operativo, arquitectura hardware, etc.
Introducción a las Java Server Pages o JSP
Las Java Server Pages (JSP) son una tecnología que nos permite mezclar HTML estático con HTML generado dinámicamente mediante código Java embebido en las páginas. Cuando programamos aplicaciones web con CGI, gran parte de la página que generan los CGI es estática y no varía de ejecución en ejecución. Por su parte, la parte variable de la página es realmente dinámica y muy pequeña. Tanto los CGI como los Servlet nos obligan a generar la página por completo desde nuestro código de programa, dificultando así las tareas de mantenimiento, diseño gráfico, comprensión del código, etc. Los JSP, por otro lado, nos permiten crear las páginas fácilmente.
<HTML> <HEAD> <TITLE>Tienda. Bienvenido.</TITLE> </HEAD> <BODY> <H1>Bienvenido a la tienda</H1> <SMALL>Welcome <% out.println(Utiles.leerNombreDeCookie(request)); %> </SMALL> </BODY> </HTML>
Como podemos ver en el ejemplo, una página JSP no es más que una página HTML donde, merced a unas marcas especiales <% y %> , podemos incluir código Java. Esto presenta una serie de ventajas obvias: por un lado disponemos de prácticamente las mismas ventajas que al usar Java Servlets; de hecho, los servidores JSP traducen éstos a Servlets antes de ejecutarlos. Por otro lado, los JSP nos aportan una simplicidad y una facilidad de desarrollo sustanciales. Resulta mucho más fácil escribir la página del ejemplo que escribir un Servlet o un CGI que imprima cada una de las líneas de la página anterior. No obstante, esta simplicidad es también el inconveniente que presentan los JSP. Si deseamos realizar una aplicación compleja, con multitud de cálculos, accesos a bases de datos, etc., la sintaxis de los JSP, embebida en medio del HTML se torna farragosa. Por ello los JSP y los Servlets no suelen competir, sino que se complementan ya que, por otro lado, los estándares incluyen facilidades de comunicación entre ellos.