Aprender a usar HttpServletRequest

(Enero de 2005)

Introducción

Para empezar a entender la gestión de peticiones vamos a ver la página HTML y después el resultado final que genera el servlet (enlace a código fuente). Empezamos por el código HTML, que contiene un sencillo formulario, que nos permite enviar una cadena de texto al servlet (si tienes dudas a este respecto te remitimos a alguno de los miles de manuales de HTML que pululan por la web:


		<form action="../../servlet/InformeContexto" method="get">
		<p>Teclee su nombre y pulse 'Enviar' para llamar al servlet miser</p>
		Su nombre:<INPUT TYPE="text" NAME="nombre" size="30">
		<p><input type="submit" name="enviar" value="Enviar">
		</form>
    

El método de envío de parámetros es "get", por ello verá más adelante que el método que gestiona las peticiones será doGet(). Este código simplemente muestra el siguiente formulario, que envía al servlet el nombre que tecleas. Lo envía como un parámetro, cuyo nombre es "nombre" y cuyo valor es la expresión que tecleas:

Teclee su nombre y pulse 'Enviar' para llamar al servlet InformeContexto

Su nombre:

¿Qué hace la función doGet para imprimir el resultado del servlet?

  1. Para empezar tenemos que indicar el tipo MIME al objeto responsable de la salida (response):
    
    	response.setContentType( "text/html; charset=iso-8859-1" );
        
  2. Necesitamos un objeto (out) que nos permitirá escribir en un flujo de salida. Lo conseguimos a partir del parámetro 'response':
    
    	PrintWriter out = response.getWriter();
        
  3. A partir de aqui empezamos a definir la salida ,poniendo el comienzo de la página HTML:
  4. 
    	out.println("<html><head>");
    	out.println("<title>Ejemplo de servlet</title>");
    	....
        
  5. A continuación ponemos en una lista la enumeración de parámetros. Observar como se obtiene de manera muy sencilla el valor de un parámetro por medio de request.getParameter( nom_parametro ), si no existe el parámetro la llamada devuelve null:
  6. 
    	out.println( "<OL>");
    	for ( Enumeration e= request.getParameterNames(); e.hasMoreElements(); ) {
    	    /* Obtenemos el nombre del parámetro */
    	    String nom_par = (String) e.nextElement();
    	    out.print("<LI>Parámetro: " + nom_par);
    	    /* Se obtiene el valor del parametro enviado */
    	    out.println(". Valor: " + request.getParameter( nom_par ) );
    	}
    	out.println( "</OL>");
       
  7. El último bloque de código nos da información bastante variada del entorno (cabeceras, URI, URL, servidor, etc.)

Lo veremos en siguientes capítulos, esta tecnología resulta interesante cuando es anidable, es decir un servlet crea un formulario que llama a un servlet, que a su vez crea un formulario que llama a otro servlet, etc. Hay un aspecto digno de tener en cuenta: la respuesta a la petición se ejecuta en un entorno multihilo con una única instancia del servlet. ¿Cómo mantengo la información de la sesión del usuario cuando éste navega por numerosas páginas? El ejemplo más sencillo es el de un carrito de la compra: necesito mantener información de sesión para dar un servicio de información adecuado. No puedo recurrir a los atributos de clase, ya que sólo hay una instancia del servlet (no hay tantas instancias como peticiones o usuarios). Veremos más adelante como se puede salvar este problema. Por ahora apuntamos la forma de obtener la sesión:


	request.getSession()
   

Volver al índice