Buenas gente,
El motivo por el que posteo este tema es porque no encontré nada en Internet que hablara específicamente sobre este tema (si alguien tiene material, bienvenido!)...
Resulta que tengo los siguientes elementos:
- Una página JSP
- Un Bean de Java
- Un Servlet
Explico cómo es el procedimiento que he implementado (encarecidamente les pido que si hay algo que he hecho mal desde el punto de vista del buen desarrollo, me lo comenten así aprendo):
En la JSP tengo dos input text en donde ingreso "nombre de usuario" y "contraseña". A través de los tags de acción (los <jsp:acción .../>) creo la instancia de mi Bean y le seteo todas las propiedades. El problema está en que (imagino porque no lo encuentro por otro lado) que el seteo de propiedades del Bean se debe hacer cuando se responde al cliente... Por qué pienso esto? Porque cuando instancio el Bean en el Servlet para obtener los parámetros del mismo que deberían ya haber sido seteados por el motor gracias al tag <jsp:setProperty ... /> en función de los parámetros ingresados en la página JSP tengo un error en tiempo de ejecución. Precisamente
NullPointerException.
He modificado el código para que me muestre en la salida del browser alguno de los atributos del Bean y me muestra la referencia al mismo...
Necesito que me digan qué es lo que estoy haciendo mal o en definitiva el porqué de este comportamiento para que pueda corregir este error que me ha tenido desde la mañana y no le he encontrado solución.
Adjunto el código de mi JSP:
Código:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<jsp:useBean id="usuario" class="beans.BeanUsuario" scope="session"></jsp:useBean>
<jsp:setProperty name="usuario" property="*"></jsp:setProperty>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Liceo Bufano Web</title>
</head>
<body>
<form action="ServletLogin" method="GET">
<input type="text" name="usuario">
<br>
<input type="text" name="password">
<br>
<input type="submit" value="Aceptar">
</form>
</body>
</html>
Adjunto también el código de mi Servlet:
Código:
public class ServletLogin extends HttpServlet {
datos.Conexion conexion = null;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
conexion = new datos.Conexion();
}
@Override
public void destroy() {
conexion.cerrarConexion();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
BeanUsuario u = new BeanUsuario();
request.setAttribute("usuario", u.getPassword());
javax.servlet.RequestDispatcher rd = null;
rd = request.getRequestDispatcher("prueba.jsp");
rd.forward(request, response);
//corroborarDatos(new BeanUsuario());
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return "Desarrollado por Leonardo Manrique";
}
private void corroborarDatos(BeanUsuario usuario) {
javax.servlet.RequestDispatcher rd = null;
/*String sql = "SELECT * FROM user WHERE user = ? AND password = ?"; //Se debe modificar con la nueva implementación de la BD
PreparedStatement ps;
ResultSet result;
boolean bandera = false;
try {
ps = conexion.getConexion().prepareStatement(sql);
ps.setString(1, usuario.getUsuario());
ps.setString(2, usuario.getPassword());
result = ps.executeQuery();
if (result.first()) {
bandera = true;
}
} catch (SQLException e) {
System.err.println(e.getMessage());
}
return bandera;*/
}
}
Aclaro que lo que está comentado era el código real y funcional del Servlet. Lo que no está comentado es una prueba para ver qué era lo que tenía mi Bean guardado mostrando a la salida de "prueba.jsp" . Lo dejo por si alguien lo quiere correr y ver de qué hablo. No adjunto el código de mi Bean porque es un JB común y corriente.
Espero por favor que alguien me lo solucione.
Gracias.
Atte.,
Leonardo