Cargando



Paginas Jsp como enviar parámetros, método GET y POST en Servlets

Toda web dinamica envia y recibe parámetros que son la forma de que el usuario pueda enviar información al servidor Http. Por ejemplo en una típica pantalla de login necesitamos enviar el usuario y la clave al servidor para que la valide.


mar 13 2014 16:32
Profesional
mar 14 2014 12:28

jsp.jpg


Toda web dinámica envía y recibe parámetros que son la forma de que el usuario pueda enviar información al servidor Http. Por ejemplo en una típica pantalla de login necesitamos enviar el usuario y la clave al servidor para que la valide.

Como hace el navegador para enviar estos parámetros usando el método GET o POST esta explicado en el tutorial Servidor Web o Servidor HTTP. Lo que vamos a ver en este tutorial es como recuperar informacion de login en el servidor usando el API Servlet.

Lo primero que vamos a hacer es crear en nuestro sitio una página login.html con el siguiente contenido:


<html>
<body>
<form action="login" method="get">
<table>
<tr>
<td>Usuario</td>
<td><input name="usuario" /></td>
</tr>
<tr>
<td>Clave</td>
<td><input name="clave" /></td>
</tr>
</table>
<input type="submit" value=”Enviar”/>
</form>
</body>
</html>

Lo siguiente es crear un Servlet que reciba la petición en /login que es la dirección indicada en el atributo action de la etiqueta <form> de login.html.


package com.login.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String user = req.getParameter("user");
String pass = req.getParameter("password");
if ("login".equals(user) && "login".equals(pass)) {
response(resp, "login ok");
} else {
response(resp, "Error de login");
}
}

private void response(HttpServletResponse resp, String msg)
throws IOException {
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<t1>" + msg + "</t1>");
out.println("</body>");
out.println("</html>");
}
}


Compilamos este Servlet e incluimos LoginServlet.class en el directorio /WEB-INF/classes.

Modificamos web.xml para enlazar /login con este Servlet.
<web-app>
<servlet>
<servlet-name>login-servlet</servlet-name>
<servlet-class>com.login.servlets.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login-servlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
</web-app>

Reiniciamos el servidor, abrimos la pagina login.html, colocamos una x en usuario, una x en password y oprimimos el boton submit.


El problema aquí es que la password secreta queda visible en el URL …/login?user=admin&password=atx123, quedará en el historial del navegador y cualquiera que acceda al navegador después de nosotros podrá obtenerla fácilmente, salvo que usemos navegacion privada o puede ser solucionado cambiando el método de envío del formulario a POST en login.html.

<html>
<body>
<form action="login" method="post">
<table>
<tr>
<td>Usuario</td>
<td><input name="usuario" /></td>
</tr>
<tr>
<td>Clave</td>
<td><input name="clave" /></td>
</tr>
</table>
<input type="submit" value=”Enviar” />
</form>
</body>
</html>


Lo que sucede aquí es que no hemos implementado el método doPost (solo implementamos doGet) por lo que nuestro Servlet no esta capacitado para recibir peticiones POST. El siguiente código muestra la modificación necesaria para que funcione.

package com.login.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String user = req.getParameter("usuario");
String pass = req.getParameter("clave");
if ("admin".equals(user) && "atx123".equals(pass)) {
response(resp, "login ok");
} else {
response(resp, "Error de login");
}
}

private void response(HttpServletResponse resp, String msg)
throws IOException {
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<t1>" + msg + "</t1>");
out.println("</body>");
out.println("</html>");
}
}

El único cambio es que reemplacé doGet por doPost. Después de recompilar y desplegar el Servlet, reiniciar el servidor y volver a utilizar login.html, vuelve a funcionar normalmente.

¿Te ayudó este Tutorial?


Sin comentarios, sé el primero!

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!

X