PROGRAMACIÓN DE SERVLETS
Las servlets han revolucionado el concepto de cómo los datos de páginas Web pueden ser interpretados por el servidor de Internet. Una tecnología que hasta hace bien poco no existía, pero que promete acercarse cada vez más al usuario doméstico.

¿En cuantas páginas Web hemos visto el típico formulario preguntando el nombre de usuario y contraseña? Esta es una manera muy sencilla de proteger la entrada a distintas páginas Web a usuarios no autorizados. Pero, ¿qué ocurre cuando el usuario rellena los datos del formulario y pulsa el botón para que éstos sean enviados? ¿Cómo son estos datos interpretados por el servidor?

En la página Web de HotMail (www.hotmail.com), por ejemplo, puede verse que hay dos pequeñas áreas de texto (una para el nombre de usuario y la otra para la contraseña) y un botón para enviar los datos. Estas páginas Web que requieren la entrada de datos por parte del usuario se denominan formularios.

En cuanto el usuario ha rellenado el formulario y pulsa el botón para enviar los datos, éstos son encriptados y enviados al servidor. Este proceso lo realizan automáticamente todos los navegadores de Internet y, hasta este punto, las no intervienen en el proceso.

Pero cuando los datos llegan al servidor debe haber algún programa que interprete los datos del formulario y realice las acciones pertinentes.

Interpretación por parte del servidor

En este punto es donde existen diversas opciones: hasta hace bien poco existía un lenguaje, denominado CGI, que permitía de forma sencilla obtener los datos enviados a través de Internet y elaborar respuestas, las cuales eran enviadas de nuevo al usuario. CGI fue, y aún es, muy utilizado en páginas Web... hasta que llegaron las servlets.

Las servlets no son más que aplicaciones escritas en Java que permiten obtener de forma muy fácil datos de formularios enviados por los usuarios a través de Internet y elaborar respuestas. Para entender el funcionamiento de una servlet, primero hay que entender, no muy detalladamente, cómo funciona un servidor de Internet.

Funcionamiento del servidor

Un servidor de Internet no es más que un ordenador normal con el hardware necesario para conectarse a Internet. Este ordenador dispone de un software que lee los datos procedentes del cable que conecta el ordenador a la Red. Este programa, puede a su vez, llamar a otras aplicaciones y compartir los datos recibidos del usuario.

Esto es exactamente lo que pasa con las servlets. El programa que recibe los datos de la Red (denominado WebServer ) llama a una determinada servlet cuando el formulario de donde proceden los datos lo requiere. Cuando el WebServer llama a una servlet, no solamente pasa los datos del formulario, sino que además le pasa los objetos necesarios para que la servlet pueda, independientemente, enviar las respuestas.

¿Cómo sabe el WebServer a qué servlet llamar? Muy sencillo: a través del propio formulario. Veámoslo a través del Ejemplo 1.

EJEMPLO 1: Un formulario simple

<HTML>

<FORM ACTION="
http://www.servidor.com/servlets/demo_servlet">

?<INPUT TYPE="text" NAME="area_de_texto1">

?<INPUT TYPE="text" NAME="area_de_texto2">

?<INPUT TYPE="submit" NAME="Enviar datos al servidor">

</FORM>

</HTML>

Si cargamos el código en HTML del Ejemplo 1 a través de un navegador de Internet, veremos que el navegador muestra un formulario muy simple, tal y como muestra la Figura 1.

La dirección especificada en la etiqueta ACTION especifica la dirección de Internet a la cual el navegador intentará enviar los datos. En el caso de que el servidor no exista, o de que haya algún error durante el envío de los datos, el navegador mostraría un mensaje de error indicando que los datos no han podido ser enviados.

Si el navegador encuentra el servidor, enviará los datos del formulario. A partir de este momento, el trabajo del navegador ha terminado. Ahora es el WebServer el que tiene que decidir qué hacer con los datos.

Si la servlet se encuentra correctamente configurada en el servidor bajo el nombre "demo_servlet" el WebServer pasará los datos y objetos pertinentes a la servlet.

Una servlet por dentro

Una servlet no es nada más que un programa en Java. Existen, pues, métodos que serán llamados por el WebServer cuando la servlet tenga que ser inicializada o cuando los datos le tengan que ser transferidos. Realmente existen sólo tres métodos de los que haremos uso en una servlet. El primer método tiene como nombre "init" y, como su nombre bien indica, se encarga de inicializar la servlet.

El proceso de inicialización de la servlet puede hacerse de dos modos: el primero es cuando el WebServer es inicializado. En este caso, el WebServer, inicializará las servlets que están configuradas en el sistema. El otro modo de inicialización ocurre cuando la servlet recibe datos por primera vez. Es importante destacar, a pesar de que es muy lógico, que cada servlet sólo se inicializa una vez.

En el método init() será necesario colocar todo aquel código referente a inicialización de otros objetos, etc.

El otro método que debemos tener en cuenta es "doPost". Este método es llamado cuando los datos enviados pertenecen a un formulario. A este método se le pasa un objeto como parámetro, que veremos más adelante, que permite a la servlet acceder de forma independiente a cada uno de los datos enviados.

Por último, existe otro método que resulta relativamente más complicado de entender. Se trata de "doGet". El objetivo de una llamada al método doGet es básicamente la misma que "doPost", es decir, transferir datos a la servlet. Pero, así como doPost es llamado cuando los datos son enviados a través de un formulario, doGet es llamado cuando la servlet es llamada directamente por el navegador de Internet. Un buen ejemplo de ello es cuando la servlet es llamada directamente al pulsar un link dentro de una página Web. Un link no es más que una línea de texto dentro de una página Web que conduce a otra página Web. Asimismo, es posible que el link, en lugar de referenciar otra página Web, haga referencia a una servlet. Cuando el usuario pulse sobre el link, el navegador establecerá una conexión con el servidor y el WebServer llamará al método doGet de la servlet en cuestión.

En el Ejemplo 2 se puede apreciar cómo se llama a una servlet desde un link.

EJEMPLO 2: Llamar a una servlet desde un link estándar:

<A HREF=http://www.servidor.com/servlets/demo_servlet> Pulsa aquí para acceder a la servlet</A>

Acceder a los datos enviados por el navegador de Internet

Los métodos doGet and doPost tienen dos parámetros. El primero de ellos es una instancia de la clase HttpServletRequest que permite acceder a los datos enviados por el navegador. El otro objeto es una instancia de la clase HttpServletResponse que, como su nombre indica, contiene métodos para elaborar las respuestas.

Para acceder a cada uno de los campos del formulario, simplemente tendremos que realizar una llamada al método getParameterValues de la clase HttpServletRequest. Al llamar a este método tendremos que pasar como parámetro el nombre del campo al que queremos acceder, el cual está especificado en la propia página Web que contiene el formulario.

El siguiente ejemplo muestra el código de una sencilla servlet. Los tres métodos más importantes de una servlet están descritos en el código. El ejemplo ilustra, a su vez, cómo acceder a un campo determinado del formulario.

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.util.*;

import java.net.URLEncoder;

public class DemoServlet extends HttpServlet

{

?public void init ( ServletConfig sConfig ) throws ServletException

?{

? super.init ( sConfig );

?}

public synchronized void doGet ( HttpServletRequest req, HttpServletResponse resp ) throws ServletException

?{

?}

public synchronized void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException

?{

??String valor = req.getParameterValues("area_de_texto_1")[0];

?}

}

En próximos artículos comentaremos mucho más sobre las servlets y, en concreto, analizaremos cómo elaborar respuestas en código HTML que serán devueltas al usuario e interpretadas por su navegador.

Página principal de HotMail en la que se puede contemplar la petición de los datos de usuario.
Un formulario simple.
Java Developer Connection.