Ejemplo guiado de JSP y Servlets
Creando el proyecto
En el siguiente ejemplo vamos a ver un ejemplo de login de usuarios a partir de una página
web dinámica. La página dinámica que crearemos será index.jsp mientras que el Servlet
será LoginServlet.
Primero creamos el proyecto web para nuestro proyecto en Eclipse: File New Dynamic
Web Project y le pondremos un nombre: EjemploJSPServlet.
Ahora vamos a ver la página web dinámica. En la carpeta WebContent dentro de nuestro
proyecto web, botón derecho File New JSP File y le pondremos de nombre index.jsp
En esta página vamos a poner un formulario con una tabla que tenga para ingresar el
usuario, la contraseña y un botón para hacer login.
También necesitaremos mostrar el nombre del usuario logueado, luego de hacer el login; y
un mensaje de error en caso de poner datos incorrectos.
Nuestro index.jsp se verá así:
<%@ page language="java" contentType="text/html; charset=ISO88591"
pageEncoding="ISO88591"%>
<!DOCTYPE html PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta httpequiv="ContentType" content="text/html; charset=ISO88591">
<title>Login</title>
</head>
<body>
<b><a style="color: green">${sessionScope.user}</a></b>
<form id="login" action="LoginServlet" method="post">
<table>
<tr>
<td>Usuario</td>
<td><input id="username" name="username" title="Email"
type="text" value="" size="40" /></td>
</tr>
<tr>
<td>Contraseña</td>
<td><input id="password" name="password" title="Password"
type="password" value="" size="25" /> <input id="submit"
name="submit" type="submit" value="Login"></td>
</tr>
</table>
</form>
<br>
<b><a style="color: red">${param.mensaje}</a></b>
</body>
</html>
Luego creamos el servlet con la validación del login. Solo validaremos que el usuario y
contraseña no sean vacíos.
En el doPost vamos a fijarnos primero si el usuario ya estaba logueado.
Si se ingresa usuario y contraseña, guardaremos el nombre del usuario en la sesión bajo el
nombre de atributo “user”. Por tanto si el user de la sesión tiene contenido, significa que el
usuario ya se había logueado y no debo hacer nada.
En caso de que no exista, debo revisar el contenido de los parámetros del request
username y password y valido que no sean vacíos, en ese caso guardo el nombre de
usuario en la sesión, sino mando un mensaje de error a través del parámetro “mensaje” a la
página de index.jsp.
Dentro del src de nuestro proyecto creamos el servlet LoginServlet. Botón derecho File
New Servlet.
Nuestros métodos del LoginServlet se verán así:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Logueo del usuario
if(request.getSession().getAttribute("user")!=null){
RequestDispatcher requestDispatcher =
request.getRequestDispatcher("index.jsp");
requestDispatcher.forward(request, response);
} else {
login(request, response);
}
}
private void login (HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
//Si vienen datos de usuario y password
if(request.getParameter("username")!=null &&
request.getParameter("password")!=null){
//Ahora debo revisar que el usuario y password sean validos
if(autenticar(request.getParameter("username"),request.getParameter("password"))){
HttpSession session = request.getSession();
//Seteo en la sesión el nombre de usuario logueado
session.setAttribute("user", request.getParameter("username"));
RequestDispatcher requestDispatcher =
request.getRequestDispatcher("index.jsp");
requestDispatcher.forward(request, response);
} else {
RequestDispatcher requestDispatcher =
request.getRequestDispatcher("index.jsp?mensaje=Usuario y/o " +
"contraseña incorrectos");
requestDispatcher.forward(request, response);
}
} else {
RequestDispatcher requestDispatcher =
request.getRequestDispatcher("index.jsp?mensaje=Debe ingresar usuario y contraseña");
requestDispatcher.forward(request, response);
}
}
//Este método llamaría a mi método de servicios donde vaya a consultar el usuario y
password
//contra la base de datos. En este caso validaremos que se ingrese algún contenido
private boolean autenticar(String usuario, String password){
return !usuario.isEmpty()&&!password.isEmpty();
}
Ahora estamos prontos para correr el proyecto! Botón derecho sobre el proyecto Run us
Run on server y seleccionamos el WildFly.
Si ingreso en Usuario: Usuario:
Si trato de hacer login nuevamente no voy a poder ya que mi usuario está logueado. Para
poder iniciar la sesión nuevamente debo esperar a que expire la sesión o republicar la
aplicación en el WildFly.
La solución es hacer un botón de logout donde pueda quitar a mi usuario de la sesión y
volver a comenzar nuevamente.