Leer parámetros desde un servlet

Find a lightweight English version of this post directly in the source code repository.

En este post veremos cómo un servlet puede leer los parámetros que vienen encapsulados en la petición HTTP que realiza un usuario a nuestra aplicación web. La configuración de dicho servlet la haremos mediante anotaciones para tener un proyecto más sencillo.

Se puede ver el código fuente de la demostración en el directorio request-parameters del repositorio de las demos en github.

Demo

La demostración va a ser muy sencilla: crearemos en servlet, lo configuraremos para que responda cuando un usuario envíe los campos de un formulario de login, y haremos que responda con una página HTML que incluye una lista con los valores de los campos de dicho formulario.

Para ejecutar la demo, simplemente hay que descargase el código fuente y ejecutar mvn jetty:run desde el directorio raiz de la demo. Visitar la página de login http://localhost:8080/login.html, introducir unos valores cualquiera y enviar los datos del formulario. Veremos el resultado que devuelve el servlet al leer los parámetros de la petición HTTP que hemos enviado al servidor.

Respuesta del servlet

Dependencias

Para esta demostración usaremos Apache Maven para la gestión de dependencias. Esto nos facilitará enormemente nuestra labor de programación. Si echamos un vistazo al fichero pom.xml de la demo, podremos ver que solamente existe una dependencia externa, javax-servlet-api, que es la que nos permitirá crear nuestro servlet.

Página de login

Respuesta del servlet

La entrada a nuestra demo será la página de login, la cual contiene un formulario muy simple, con dos campos principales: email del usuario y contraseña.

En el código HTML de la página, se ha establecido la acción del formulario a RequestParametersServlet. Ésta va a ser la URL a la que nuestro servlet deberá responder.

<form action="RequestParametersServlet">
	<input type="text" name="email" placeholder="Email address" autofocus />
	<input type="password" name="password" placeholder="Password" />
	
	<button type="submit">Log me in</button>
</form>

El servlet

Nuestro servlet se trata de un servlet HTTP, luego heredará de javax.servlet.http.HttpServlet. Lo configuraremos mediante anotaciones, con @WebServlet. Y retornará un sencillo código HTML que mostrará al usuario el valor de los parámetros enviados desde el formulario de login.

La definión del servlet quedaría así:

@WebServlet(urlPatterns = {"/RequestParametersServlet"})
public class RequestParametersServletDemo extends HttpServlet {
    //...
}

Mientras que el código que lee los parámetros de la petición HTTP estaría agrupado en un método con esta pinta:

private String outputParametersList(HttpServletRequest request) {
    Enumeration<String> names = request.getParameterNames();
	if(!names.hasMoreElements()) return "";
	
	StringBuilder sb = new StringBuilder();
	
	sb.append("<ul>");
    while(names.hasMoreElements()) {
    	String name = names.nextElement();
    	String value = request.getParameter(name);
    	
    	sb.append("<li>");
        sb.append(name + ": " + value);
        sb.append("</li>");
    }
    sb.append("</ul>");
	
	return sb.toString();
}

Para echar un ojo al código fuente, visitar el directorio request-parameters.

Enlaces relacionados