A la hora de enviar información a un Servlet tenemos dos formas: mediante el método GET y mediante el método POST. Existen una serie de diferencias entre pasarlos de una forma u otra:
Metodo POST. Este método solo esta accesible desde los formularios. Se envían los parámetros de forma implícita junto a la página, es decir, al pasar los parámetros, nosotros no vemos reflejado en ningún sitio qué parámetros son y cual es su valor.
Método GET. Este método envía los parámetros de forma explicita junto a la página, mostrando en la barra de navegación los parámetros y sus valores. Son esas largas cadenas que aparecen en algunas páginas en nuestra barra de navegación, del estilo: buscar?id=1806&valor=0987&texto=todo&…
Las cadenas toman el aspecto parametro1=valor1¶metro2=valor2&….¶metroN=valorN. Es decir es una concatenación a través de & de pares parámetro-valor.
Preparando la página de envío
La página de envío será una simple página HTML. Lo primero que tenemos que hacer es montar las URL de envío. La URL está compuesta por el nombre del servidor, en nuestro caso localhost, el puerto (8080), el nombre de la aplicación web, en nuestro caso «lineadecodigo_j2ee» y el nombre del servlet.
Así la URL quedará de la siguiente forma:
http://localhost:8080/lineadecodigo_j2ee/RecibirParametros
La URL la montaremos en un formulario:
<form action="http://localhost:8080/lineadecodigo_j2ee
/RecibirParametros" method="post">
<label for="texto1">Texto 1</label><input type="text" id="texto1" name="texto1" size=20><br>
<label for="texto2">Texto 2</label><input type="text" id="texto2" name="texto2" size=20>
<input type="submit" value="Enviar">
</form>
y en un enlace:
<a href="http://localhost:8080/lineadecodigo_j2ee/RecibirParametros?texto1=lineadecodigo&texto2=imagen">Mandar parametros por GET</a>
Codificando el Servlet
Lo primero que hay que saber es que la clase que implemente el Servlet extiende de HttpServlet. Así el código será el siguiente:
public class RecibirParametros extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
...
}
Dentro del Servlet hay dos métodos importantes: doGet y doPost. Estos métodos son los que atienden las peticiones POST y GET de la página, respectivamente.
public class RecibirParametros extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
...
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
...
}
}
Ambos métodos reciben como parámetros los datos de la petición HttpServletRequest y el flujo de la salida de respuesta HttpServletResponse.
Podemos codificar los dos métodos para hacer cosas diferentes si viene una petición POST u otra GET. O bien, como en nuestro caso, encaminar una petición a la otra para tratarlas de una misma forma.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
Para recibir los parámetros nos vamos a apoyar en el objeto HttpServletRequest y en concreto en el método .getParameter(). En este método indicaremos el nombre del parámetro que queremos recuperar.
String parametro1 = request.getParameter("texto1");
String parametro2 = request.getParameter("texto2");
En este caso los parámetros se llaman texto1 y texto2.
Lo siguiente que haremos será montar la respuesta. Ahora nos apoyaremos en el objeto HttpServletResponse. Mediante el método .getWriter() obtendremos el stream de salida. Esto lo manejamos mediante el objeto PrintWriter.
PrintWriter out;
out = response.getWriter();
Antes de empezar a volcar texto en el flujo de salida tenemos que indicar el tipo de contenido que se vuelca. En este caso es «text/html». Es lo que se denomina content-type.
response.setContentType("text/html");
Ahora solo quedará el ir volcando información mediante métodos .println(). El cual tiene como parámetro el texto a volcar a la página.
out.println("<html>");
out.println("<head><title>Enviar parametros a un Servlet</title></head>");
out.println("<body>");
out.println("<h1>Enviar parametros a un Servlet</h1>");
out.println("La primera palabra pasada como parámetro es <strong>" + parametro1 + "</strong><br>");
out.println("La segunda palabra pasada como parámetro es <strong>" + parametro2 + "</strong>");
out.println("</body></html>");