Enviar el formulario al Servlet que interactúa con la base de datos da como resultado una página en blanco

Resuelto ken asked hace 13 años • 1 respuestas

Tengo un servlet que verifica el nombre de usuario y la contraseña de la base de datos.

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mvs_user", "root", "pass");
        if (req.getParameter("usrnm") != null && req.getParameter("pwd") != null) {
            String username = req.getParameter("usrnm");
            String userpass = req.getParameter("pwd");
            String strQuery = "select * from user where username='" + username + "' and  password='" + userpass + "'";
            System.out.println(strQuery);
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery(strQuery);
            if (rs.next()) {
                req.getSession(true).setAttribute("username", rs.getString(2));
                res.sendRedirect("adminHome.jsp");
            } else {
                res.sendRedirect("index.jsp");
            }
        } else {
            res.sendRedirect("login.jsp");
        }
        conn.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

El problema es que el navegador sólo muestra una página en blanco y, sin embargo, espero que muestre "Hola mundo" en la página redirigida. ¿Dónde podría estar el problema? Por favor ayúdame a solucionar el problema.

ken avatar May 18 '11 18:05 ken
Aceptado

Necesita manejar adecuadamente las excepciones. No sólo debes imprimirlos sino realmente throwellos.

Reemplazar

    } catch (Exception e) {
        e.printStackTrace(); // Or System.out.println(e);
    }

por

    } catch (Exception e) {
        throw new ServletException("Login failed", e);
    }

Con este cambio, ahora obtendrá una página de error normal con un seguimiento completo de la causa del problema. Por supuesto, también puede simplemente buscar en los registros del servidor para encontrar el seguimiento de la pila que acaba de imprimir en lugar de volver a generar.

Hay varias causas posibles de su problema. Quizás un ClassNotFoundExceptiono un SQLException. Todo lo cual debería ser autoexplicativo y googleable.

Ver también:

  • ¿Cómo debo conectarme a la base de datos/fuente de datos JDBC en una aplicación basada en servlet?
  • Cómo instalar el controlador JDBC en un proyecto web Eclipse sin enfrentar java.lang.ClassNotFoundexception
  • La infame java.sql.SQLException: no se encontró ningún controlador adecuado

Sin relación con el problema concreto, su código JDBC es propenso a sufrir fugas de recursos y ataques de inyección SQL. Investigue sobre eso también y corríjalo en consecuencia.

BalusC avatar May 18 '2011 12:05 BalusC