Sólo Programadores Banner 468x60
Este mes en Sólo Programadores
Contenido del CD-ROM
Índice temático
Suscripción

Servlets (II): La cara oculta de la web.

Para empezar con este tema utilizamos un ejemplo sencillo que nos va a servir para entender la forma básica de trabajar. El ejemplo va a consistir en una página HTML en la que aparecerá un campo de entrada con los correspondientes botones Submit y Reset típicos de cualquier formulario de entrada de datos.
Al pulsar sobre el primero de ellos se producirá la ejecución del servlet en el servidor, que procesará la información recibida, y mostrará como resultado una página HTML con el texto introducido con anterioridad.

CÓDIGO HTML
En el listado 1 se muestra el código HTML necesario para implementar el ejemplo que nos hemos propuesto.
Dentro del mismo destacan dos partes: en primer lugar la cabecera del formulario, que indica la acción a desencadenar en el servidor al pulsar el botón Submit, y en segundo lugar la parte en que se define el propio formulario. El fichero que contiene la página en formato de documento HTML se llamará MiPrimerServlet.html, y lo guardaremos en el subdirectorio /public_html dentro del directorio donde hayamos instalado el JWS.

CÓDIGO DEL SERVLET.
Para este primer ejemplo, el código necesario va a ser mínimo, como se puede observar en el Listado 2, lo que significa que es una prueba de la enorme potencia y simplicidad derivada del uso de servlets. En el programa destaca principalmente la utilización de los paquetes javax.servlet.* y javax.servlet.http.*, y la cláusula extends que define el programa de tipo HttpServlet. El fichero que contiene el servlet lo llamaremos MiPrimerServlet.java y tras compilarlo con el compilador del JDK (javac), almacenaremos el fichero .class resultante en el directorio /servlets dentro del directorio donde hayamos instalado el JWS.

CONFIGURACIÓN DEL SERVLET EN EL JWS.
Para que el servlet funcione sin problemas en el JWS es necesario darlo de alta. En primer lugar hay que activar el JWS ejecutando el programa httpd.exe que se encuentra en el directorio /bin. Una vez activado, con el navegador que deseemos accederemos a la parte de administración. Para acceder a la página principal habría que introducir una dirección como http://[nombre_servidor_DNS]:8080/, y desde aquí podremos acceder al applet de Administración. Tras introducir nombre y contraseña del Administrador (por defecto admin/admin), aparecerá una página donde se podrá escoger el servicio que deseamos configurar.
En nuestro caso seleccionaremos Web Service, tras lo cual aparecerá una ventana donde deberemos pulsar sobre el botón Servlets. El programa mostrará una estructura de tipo árbol, donde seleccionaremos Add. A continuación introduciremos los datos, tal y como indica la figura 4 y pulsaremos de nuevo sobre Add. Además será necesario introducir una serie de datos adicionales, tras lo cual pincharemos sobre Save. Tras efectuar los pasos indicados, podremos salir y realizar la ejecución del ejemplo.

EJECUCIÓN DEL SERVLET DE EJEMPLO.
Para ejecutar y comprobar el correcto funcionamiento de nuestro servlet, solamente tendríamos que introducir en nuestro navegador una dirección como http://[nombre_servidor_DNS]:8080/ MiPrimerServlet.html.

El método service.
El servlet más simple posible es aquél que sólo implementa el método service, el cual se encarga de procesar la petición del cliente. Utiliza dos parámetros, uno de petición y otro de respuesta. En el caso particular del protocolo http se utilizan instancias de las clases (o interfaces) HttpServletRequest y HttpServletResponse respectivamente. Estos parámetros encapsulan los datos que son enviados tanto desde el cliente, como desde el servidor. De hecho, normalmente se utilizan input streams para recuperar datos desde el cliente, y output streams para responder. En nuestro caso utilizamos PrintStream para responder al cliente.
Para recuperar los datos que manda el cliente, utilizamos el método getParameter, que es heredado por HttpServletRequest de la interfaz ServletRequest. Finalmente, utilizando el stream de salida se envía la respuesta al cliente. Como puede verse, el programa es muy sencillo, pero la funcionalidad muy alta.

Ejercicio.
Cómo ejercicio para el lector se propone la implementación de un servlet similar al anterior. Deberá aparecer un formulario HTML, con dos campos de entrada. Un primer campo para introducir el nombre, y otro para introducir la dirección e-mail. El servlet deberá responder con los datos introducidos, incluyendo además la dirección IP desde donde está conectado el cliente. Para obtener esta dirección IP se debe utilizar el método getRemoteAddr de la interfaz HttpServletRequest (en la tabla 1 se encuentra toda la información necesaria sobre este método).

UNA DEFINICIÓN MÁS FORMAL
Podríamos definir un Servlet como un programa JAVA que se ejecuta en el marco de un servicio de red, como por ejemplo un servidor web, y que recibe y responde a las peticiones de un cliente.

El Ciclo de Vida
Los servlets al igual que los applets poseen un Ciclo de Vida perfectamente definido controlado por el entorno (una vez más se podría poner como ejemplo un servidor web). La interfaz que se utiliza para implementarlos define una serie de métodos para cada una de sus etapas, y como ya se ha comentado, es el entorno el que se encarga de invocarlos. El orden seguido es el siguiente:

1). Cuando el servidor carga el servlet (solo lo carga ante la primera petición, después ya no hace falta), invoca el método init. Todas las peticiones que lleguen antes de que este método finalice su ejecución habrán de esperar para ser atendidas.

2) Una vez finalizada la ejecución de dicho método, todas las peticiones son atendidas por el método service. Normalmente el servidor puede manejar varias peticiones simultáneamente y asigna un hilo propio (thread) a cada petición.

3) Cuando el servidor quiere descargar el servlet invoca el método destroy.

En un próximo capítulo se estudiarán con mayor detalle estos métodos.

El API de los servlets El API utilizado para la programación de Servlets incluye dos paquetes:
El paquete javax.servlet, que es la base, y que define la interfaz Servlet y su implementación GenericServlet. Es esta la interfaz que define los métodos del Ciclo de Vida. También destacan las interfaces ServletRequest y ServletResponse, que definen la mecánica de las peticiones y las respuestas.
El paquete javax.servlet.http, que es una especialización del paquete anterior, se utiliza con el protocolo http. Este paquete define la clase HttpServlet que es una extensión de GenericServlet. Asimismo incluye las interfaces HttpServletRequest y HttpServletResponse, que son extensiones de ServletRequest y ServletResponse respectivamente.

En un próximo capítulo también se estudiarán en profundidad estos dos paquetes, cuya aportación para el trabajo con servlets es fundamental.



Banner 468x60
Explorer 4.0, Netscape 4.0. Resolución 800 x 600.
©Tower Communications 1.998.
Diseño: GRUPO ALBERTINA DE COMUNICACION.