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:
Adjunto también el código de mi Servlet:<%@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>
Código:
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.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;*/ } }
Espero por favor que alguien me lo solucione.
Gracias.
Atte.,
Leonardo