Servlet

Clientes y Servidores 
Cliente:
Por su versatilidad y potencialidad, en la actualidad la mayoría de los usuarios de Internet utilizan en sus comunicaciones con los servidores de datos, los browsers o navegadores. Esto no significa que nopuedan emplearse otro tipo de programas como clientes e-mail,news, etc. para aplicaciones más específicas. De hecho, los browsers más utilizados incorporan lectores de mail y de news.En la actualidad los browsers más extendidos son Netscape Communicator y Microsoft Internet Explorer. Ambos acaparan una cuota de mercado que cubre prácticamente a todos los usuarios.A pesar de que ambos cumplen con la mayoría de los estándares aceptados en la Internet, cada uno de ellos proporciona soluciones adicionales a problemas más específicos. Por este motivo, muchas veces será necesario tener en cuenta qué tipo de browser se va a comunicar con un servidor, pues el resultado puede ser distinto dependiendo del browser empleado, lo cual puede dar lugar a errores. 

Servidores : 
Los servidores son programas que se encuentran permanentemente esperando a que algún otro ordenador realice una solicitud de conexión. En un mismo ordenador es posible tener simultáneamente servidores de los distintos servicios anteriormente mencionados (HTTP,FTP,TELNET, etc.). Cuando a dicho ordenador llega un requerimiento de servicio enviado por otro ordenador de la red, se interpreta el tipo de llamada, y se pasa el control de la conexión al servidor correspondiente a dicho requerimiento. En caso de no tener el servidor adecuado para responder a la comunicación, está será rechazada.Como ya se ha apuntado, no todos los servicios actúan de igual manera. Algunos, como TELNET y FTP, una vez establecida la conexión, la mantienen hasta que el cliente o el servidor explícitamente la cortan. Por ejemplo, cuando se establece una conexión con un servidor de FTP , los dos ordenadores se mantienen en contacto hasta que el cliente cierre la conexión mediante el comando correspondiente (quit,exit, ...)o pase un tiempo establecido en la configuración del servidor FTP o del propio cliente, sin 
ninguna actividad entre ambos.


CGI
Es una importante tecnología de la World Wide Web que permite a un cliente (navegador web) solicitar datos de un programa ejecutado en un servidor web. CGI especifica un estándar para transferir datos entre el cliente y el programa. Es un mecanismo de comunicación entre el servidor web y una aplicación externa cuyo resultado final de la ejecución son objetos MIME. Las aplicaciones que se ejecutan en el servidor reciben el nombre de CGIs.
Las aplicaciones CGI fueron una de las primeras prácticas de crear contenido dinámico para las páginas web. En una aplicación CGI, el servidor web pasa las solicitudes del cliente a un programa externo. Este programa puede estar escrito en cualquier lenguaje que soporte el servidor, aunque por razones de portabilidad se suelen usar lenguajes de script. La salida de dicho programa es enviada al cliente en lugar del archivo estático tradicional.


Java Servlet
El servlet es una clase en el lenguaje de programación Java, utilizada para ampliar las capacidades de un servidor. Aunque los servlets pueden responder a cualquier tipo de solicitudes, éstos son utilizados comúnmente para extender las aplicaciones alojadas por servidores web, de tal manera que pueden ser vistos como applets de Java que se ejecutan en servidores en vez de navegadores web. Este tipo de servlets son la contraparte Java de otras tecnologías de contenido dinámico Web, como PHP y ASP.NET.
La palabra servlet deriva de otra anterior, applet, que se refiere a pequeños programas que se ejecutan en el contexto de un navegador web.




Diferencias entre las tecnologías CGI y Servlet 
La tecnología Servlet proporciona las mismas ventajas del lenguaje Java en cuanto a portabilidad (“ write once, run anywhere”) y seguridad, ya que un servlet es una clase de Java igual que cualquier otra, y por tanto tiene en ese sentido todas las características del lenguaje. Esto es algo de lo que carecen los programas CGI, ya que hay que compilarlos para el sistema operativo del servidor y no disponen en muchos casos de técnicas de comprobación dinámica de errores en tiempo de ejecución.Otra de las principales ventajas de los servlets con respecto a los programas CGI , es la del rendimiento, y esto   pesar de que Java no es un lenguaje particularmente rápido. Mientras que los es necesario cargar los programas CGI tantas veces como peticiones de servicio existan por parte de los clientes, los servlets , una vez que son llamados por primera vez, quedan activos en la memoria del servidor hasta que el programa que controla el servidor los desactiva. De esta manera se minimiza en gran medida el tiempo de respuesta.



Características de los servlets:
 Además de las características indicadas en el apartado anterior, los servlets tienen las siguientes características:

1. Son independientes del servidor utilizado y de su sistema operativo, lo que quiere decir que a pesar de estar escritos en Java, el servidor puede estar escrito en cualquier lenguaje de programación, obteniéndose exactamente el mismo resultado que si lo estuviera en Java.

2. Los servlets pueden llamar a otros servlets , e incluso a métodos concretos de otros servlets. De esta forma se puede distribuir de forma más eficiente el trabajo a realizar. Por ejemplo, se podría tener un servlet encargado de la interacción con los clientes y que llamara a otro servlet para que
a su vez se encargara de la comunicación con una base de datos.

3. Los servlets pueden obtener fácilmente información acerca del cliente (la permitida por el protocolo HTTP), tal como su dirección IP , el puerto que se utiliza en la llamada, el método utilizado (GET,POST,...), etc.

4. Permiten además la utilización de cookies y sesiones , de forma que se puede guardar información específica acerca de un usuario determinado, personalizando de esta forma la interacción cliente- servidor. Una clara aplicación es mantener la sesión con un cliente.

 5. Los servlets pueden actuar como enlace entre el cliente y una o varias bases de datos en arquitecturas cliente-servidor de 3 capas (si la base de datos está en un servidor distinto).


 6. Asimismo, pueden realizar tareas de proxy para un applet . Debido a las restricciones de seguridad, un applet no puede acceder directamente por ejemplo a un servidor de datos localizado en cualquier máquina remota, pero el servlet sí puede hacerlo de su parte.


7. Al igual que los programas CGI , los servlets permiten la generación dinámica de código HTML dentro de una propia página HTML . Así, pueden emplearse servlets para la creación de contadores, banners, etc.





Ciclo de Vida de un Servlet

1. Inicializar el servlet
Cuando un servidor carga un servlet, ejecuta el método init del servlet. El proceso de inicialización debe completarse antes de poder manejar peticiones de los clientes, y antes de que el servlet sea destruido.
Aunque muchos servlets se ejecutan en servidores multi-thread, los servlets no tienen problemas de concurrencia durante su inicialización. El servidor llama sólo una vez al método init al crear la instancia del servlet, y no lo llamará de nuevo a menos que vuelva a recargar el servlet. El servidor no puede recargar un servlet sin primero haber destruido el servlet llamando al método destroy.
2. Interactuar con los clientes
Después de la inicialización, el servlet puede dar servicio a las peticiones de los clientes. Estas peticiones serán atendidas por la misma instancia del servlet, por lo que hay que tener cuidado al acceder a variables compartidas, ya que podrían darse problemas de sincronización entre requerimientos simultáneos.
3. Destruir el servlet
Los servlets se ejecutan hasta que el servidor los destruye, por cierre del servidor o bien a petición del administrador del sistema. Cuando un servidor destruye un servlet, ejecuta el método destroy del propio servlet. Este método sólo se ejecuta una vez y puede ser llamado cuando aún queden respuestas en proceso, por lo que hay que tener la atención de esperarlas. El servidor no ejecutará de nuevo el servlet hasta haberlo cargado e inicializado de nuevo.



Ejemplo de código básico de un servlet

 Un pequeño servlet de ejemplo es el siguiente:






     ¿Como se escribe código html en un servlet?



Comentarios