Servlet vs CGI

Los primeros servidores HTTP no incluían ningún mecanismo para generar respuestas dinámicamente, por lo tanto se desarrollaron interfaces para comunicar el servidor con programas externos que implementan dicha funcionalidad.

La especificación CGI (Common Gateway Interface) describe una interfaz estándar que sirve para que un servidor Web envíe solicitudes del navegador al programa CGI, y para que el programa CGI devuelva datos de respuesta al navegador a través del servidor Web.

Un programa CGI puede ser escrito en cualquier lenguaje de programación que produzca un fichero ejecutable. Entre los lenguajes más habituales se encuentran: C, C++, Perl, Java, Visual Basic… No obstante, debido a que el CGI recibe los parámetros en forma de texto será útil un lenguaje que permita realizar manipulaciones de las cadenas de caracteres de una forma sencilla, como por ejemplo Perl. Perl es un lenguaje interpretado que permite manipulaciones sencillas de ficheros y textos, así como la extracción y manipulación de cadenas de caracteres, unidas a unas búsquedas rápidas y fáciles.

Un servlet es un objeto que se ejecuta en un servidor o contenedor JEE, fue especialmente diseñado para ofrecer contenido dinámico desde un servidor web, generalmente es HTML. Otras opciones que permiten generar contenido dinámico son con los lenguajes ASP, PHP, JSP (un caso especial de servlet) y Python.

Los servlets forman parte de JEE (Java Enterprise Edition), que es una ampliación de JSE (Java Standard Edition).

Un servlet es un objeto Java que implementa la interfaz javax.servlet.Servlet o hereda alguna de las clases más convenientes para un protocolo específico (ej: javax.servlet.HttpServlet). Al implementar esta interfaz el servlet es capaz de interpretar los objetos de tipo HttpServletRequest y HttpServletResponse quienes contienen la información de la página que invocó al servlet.

Entre el servidor de aplicaciones (o web content) y el servlet existe un contrato que determina cómo han de interactuar. La especificación de éste se encuentra en los JSR (Java Specification Requests) del JCP (Java Community Process).

Las tareas encomendadas a un Servlet son las siguientes:

Leer los datos enviados por un usuario

  • Usualmente de formularios en páginas Web
  • Pueden venir de applets de Java o programas cliente HTTP.

Buscar cualquier otra información sobre la petición que venga incluida en esta

  • Detalles de las capacidades del navegador, cookies, nombre del host del cliente, etc.

Generar los resultados

  • Puede requerir consults a Base de Datos, invocar a otras aplicaciones, computar directamente la respuesta, etc.

Dar formato a los resultados en un documento

  • Incluir la información en una página HTML

Establecer los parámetros de la respuesta HTTP

  • Decirle al navegador el tipo de documento que se va a devolver, establecer las cookies, etc.

Enviar el documento al cliente

Los servlets ofrecen la misma funcionalidad que los CGI pero evitan ciertos problemas que tenían éstos últimos. Entre las ventajas que ofrecen los servlets cabe destacar:

Eficiencia

  • CGI corto: el proceso de arranque de cada proceso puede dominar el tiempo de ejecución
  • N peticiones simultáneas: el código del CGI se carga en memoria N veces
  • Al terminar el proceso, el CGI se cierra: difícil persistencia de datos (conexiones a BD, caché…)

Conveniencia

  • Los Servlets tienen una infraestructura muy amplia para la tratar automáticamente datos de formularios HTML, gestionar sesiones y otras utilidades de alto nivel.

Potencia

  • Los Servlets pueden comunicar directamente con el navegador Web
  • Pueden mantener datos entre peticiones, simplificando el seguimiento de sesiones y operaciones de caché
  • Varios Servlets pueden compartir datos

Portabilidad

  • Los Servlets están escritos en Java y siguen una API estándar.
  • Pueden funcionar sin ningún cambio en diferentes servidores

Seguridad

  • CGI adolecen de vulnerabilidades porque:
    • Se ejecutan en el shell del SO
    • Pueden sufrir overflows por el lenguaje (C, C++, …)
  • Los Servlets no sufren estos problemas

Economía

  • Añadir soporte para Servlet a un servidor Web ya disponible tiene muy poco coste extra
  • Existen ciertos servidores web y servidores de servlet gratuitos para tráficos pequeños

Referencias

    Anuncios

    Responder

    Introduce tus datos o haz clic en un icono para iniciar sesión:

    Logo de WordPress.com

    Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

    Imagen de Twitter

    Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

    Foto de Facebook

    Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

    Google+ photo

    Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

    Conectando a %s

    A %d blogueros les gusta esto: