En el Servlet anterior estamos viendo el funcionamento de una Expresión Regular para verificar que una dirección de email sea correcta, tambien surgió la necesidad de verificar que no existan espacios o caracteres especiales en el nombre de usuario y en la contraseña. Para esto podemos hacer uso de otra Expresion Regular, pero como aprendices de programación haremos las cosas por el modo mas largo, asi que crearemos un método para realizar ésta verificacion
He creado un paquete llamado "clases" y dentro de el una Javaclase llamada "Validador.java" que contiene al método
isUsernameOrPasswordValid
Código java:
Ver originalpublic boolean isUsernameOrPasswordValid
(String $cadena
) { char[] cadena = $cadena.toLowerCase().toCharArray();
//Compruebo la longitud
if (cadena.length <= 6) {
return false;
}
for (int i = 0; i < cadena.length; i++) {
//Compruebo que no existan caracteres especiales (solamento los que podrian ser usados para una inyeccion SQL o perjudicar en la consulta);
if (cadena[i] == ' '
|| cadena[i] == '='
|| cadena[i] == '?'
|| cadena[i] == '+'
|| cadena[i] == '*'
|| cadena[i] == '-'
|| cadena[i] == '%'
|| cadena[i] == '/'
|| cadena[i] == '.'
|| cadena[i] == ','
|| cadena[i] == ';'
|| cadena[i] == '!'
|| cadena[i] == '<'
|| cadena[i] == '>'
|| cadena[i] == ':') {
return false;
}
}
return true;
}
servlet
Login.java
Código java:
Ver originalpackage servlets;
import beans.DaoUser;
import clases.Validador;
import java.io.IOException;
import java.util.regex.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class Login extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
/* En este proyecto; este servlet no recibe ni debe recibir nada por GET,
* asi que si se lleva a entrar al servelt
* usando el metodo GET solamente redireccion al index.jsp
*/
response.sendRedirect("index.jsp");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
HttpSession respuesta = request.getSession(true);
String email
= request.
getParameter("email"); String password
= request.
getParameter("password"); Pattern p = Pattern.compile("^([0-9a-zA-Z]([_.w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-w]*[0-9a-zA-Z].)+([a-zA-Z]{2,9}.)+[a-zA-Z]{2,3})$");
Matcher m = p.matcher(email);
Validador v = new Validador();
DaoUser d = new DaoUser();
//campos vacios
if (email.isEmpty() || password.isEmpty()) {
respuesta.setAttribute("error", "Hay campos vacios");
} else {
//No hay campos vacios, veo que la direccion de email sea válida
if (m.find()) {
respuesta.setAttribute("error", "La direccion de email no es correcta");
} else {
//La direccion de email si es correcta, verifico que la contraseña tambien lo sea
if (v.isUsernameOrPasswordValid(password)) {
try {
d.conectar();
if (d.isAcountExists(email, password)) {
//Significa que la cuenta si existe
//OBTENGO EL NOMBRE DEL USUARIO Y LO GUARDO EN UNA SESION
String NombreUsuario
= d.
getNameByEmail(email
); respuesta.setAttribute("sessionNombre", NombreUsuario);
respuesta.setAttribute("sessionEmail", email);
} else {
respuesta.setAttribute("error", "Esta direccion de correo ya fue registrada");
}
d.desconectar();
} else {
respuesta.setAttribute("error", "Contraseña no es válida");
}
}
}
response.sendRedirect("login.jsp");
}
}
Por último falta crear el archivo que invalida las sesiones útil para (Cerrar Sesion), en nuestro ejemplo será un servlet
Logout.java
Código java:
Ver originalpackage 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;
import javax.servlet.http.HttpSession;
public class Logout extends HttpServlet {
//Ya sea que el método sea por GET o POST, cerraremos la sesion.
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
response.setContentType("text/html;charset=UTF-8");
HttpSession sesion = request.getSession(true);
//Cerrar sesion
sesion.invalidate();
//Redirecciono a index.jsp
response.sendRedirect("index.jsp");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
processRequest(request, response);
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------
Conclusión. Hemos visto que la programación esta separada por capas.
* La capas de presentacion son los archivos JSP, no tienen código Java explicito si no que usan Expression Language.
* Las capas de control son los servlets.
* Las capas de datos son los beans (Archivos que nosotros llamamos Dao). Dao son las siglas de
Data Access Object de ahi el nombre.
En una programación orientada a objetos, el orden en el que programemos dará como resultado el tiempo en que lo programemos.
RECOMENDACIÓN: Por eso es que siempre es recomendable plantear el problema antes de comenzar a codificar usando lapiz y papel para identificar los objetos/clases y sus métodos.
Por ello, una de las cosas que en éste tutorial hicimos al comienzo fue crear todos los métodos necesarios.
Espero que a más de uno les sirva este material.
Les mando un saludo.
Éxitos.
---------------------------------------------------------------------------------------------
Descarga el Proyecto completo + archivo SQL:
http://www.megaupload.com/?d=ZVW8BMEH