Ajuda com servlet para login

Boa noite pessoal!

Peço ajuda à vcs pois não estou conseguindo resolver um problema de login com servlet. O código é bem simples, em um formulário insiro nome e senha previamente cadastrados no DB MySql e de acordo com o nível do usuário a página será redireciona. O problema é que ao submeter os dados do usuário para validação tenho a seguinte mensagem de erro:

java.lang.NullPointerException
Servlets.LoginServlet.doPost(LoginServlet.java:63)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Vejam o trecho de cód. a que o erro se refere:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession sessao = request.getSession(); try { String sql = "select nome_completo, nivel_usuario from usuarios" + " where nome_de_usuario = ? and senha = ?"; PreparedStatement pstmt = (PreparedStatement) Conn.get().prepareStatement(sql); // Linha 63 pstmt.setString(1, request.getParameter("usuario")); pstmt.setString(2, request.getParameter("senha")); ResultSet rs = pstmt.executeQuery(); if (rs.first()) { Cookie cookie_do_usuario = new Cookie("usuario", request.getParameter("usuario")); cookie_do_usuario.setMaxAge(10); response.addCookie(cookie_do_usuario); sessao.setAttribute("usuario", request.getParameter("usuario")); sessao.setAttribute("nivel", rs.getString("nivel_usuario")); sessao.setMaxInactiveInterval(15 * 60); processRequest(request, response); //} } else { request.getRequestDispatcher("erro").forward(request, response); } } catch (SQLException ex) { } }
E aqui a classe para conexão:

[code]public class Conn {

public static Connection conn;

static {
    try {
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/tarefasql", "root", "");
        System.out.println("conectado");
    } catch (SQLException ex) {
        System.out.println(ex.getMessage());
    }
}

public static Connection get() {
    return conn;
}

}
[/code]
Talvez o erro seja idiota, mas sou iniciante em programação e andei pesquisando no site e encontrei algo semelhante mas não resolveu.
Valeu!!

Ola!

Comece mudando tudo :shock:

[ ]'s

Olá amigo!

Qual seria o melhor código então? Pq como disse sou iniciante e foi desta maneira “errada” que aprendi até então. E busco ajuda como colegas mais experientes como vc. Abs!

Ola!

Esta errada mesmo! sem aspas :smiley:
Contudo, admitir o erro eh o primeiro passo para a libertacao.

Comece por aqui:

http://www.guj.com.br/posts/list/15777.java

E procure por uma sigla magica: MVC
Voce nunca mais sera o mesmo (ou nao)

[ ]'s

Valeu a dica! Vou procurar mais sobre o assunto, mas antes eu estava procurando uma solução mais imediata para o meu problema. Sei que iniciar um projeto sem os padrões não é o correto, mas de inicio, quando ainda se está aprendento a sintaxe e tal, fica difícil rodar os exemplos didáticos por padrões. Mesmo assim, valeu a dica! Vou seguir tentando uma solução pro meu problema.

Abs!!

Olá pessoal!

Alguém tem alguma sugestão?

Faaal Garoto.

Normalmente este erro se dá pq o valor que está vindo pelo request.getParameter() é nulo, ou seja, não está recuperando o valor do form.
Para melhorar um pouco o código faça o seguinte:
Crie um pacote com o nome de DAO e implemente nele todos os acessos ao SGBD.
Crie um pacote com um nome servlets, apenas sugestãos, e coloque nele somente as servlets.

Não é elegante realizar transações com bando de dados ou colocar regras na servlet. A servlet somente recebe a requisição transfere o controle para a classe indicada e retorna para o usuário o resulado do que aconteceu.

Em request.getparameter você deve colocar o valor “name” que está no seu inptu.

Antes de implementar a parte de banco de dados faça um System.out.println(request.getparameter(“cmpLogin”));

Olá javajc!!

Então, como vc orientou, eu separei a conexão com o banco em outro pacote e conferi os parâmetros vindos do form. A questão agora é como eu faço para que na classe Conexão o método validaDados() obtenha os parâmetros vindos do form? E como envio a resposta da ResultSet para fazer a comparação dos parâmetros na servlet e o usuário obtenha o acesso desejado?

Aí galera,

Alguém consegue apontar o erro do meu código sem dizer que está tudo errado? Deixando de lado por enquanto os padrões de programação e dizendo pra que eu mude todo o “projeto”. Como eu disse anteriormente o erro está na linha 63, apenas qro saber o q fiz de errado e o q faço pra resolver ESTE código, não criar outro e cometer talvez o mesmo erro.

Valeu!!

Voce ja executou essa consulta no banco pra ver se esta retornando alguma coisa?
As vezes o parametro que voce esta colocando no where nao esta batendo, as vezes, ate por mapeamento errado dos parametros.

Dá uma olhada nessa linha. LoginServlet.java:63 Tem um valor nullo sendo enviado ali.

Pode ser o nome do atributo na classe que não bate com o valor da JSP.

[quote=Jaba]Voce ja executou essa consulta no banco pra ver se esta retornando alguma coisa?
As vezes o parametro que voce esta colocando no where nao esta batendo, as vezes, ate por mapeamento errado dos parametros.[/quote]

Jaba, conferi as dicas que vc deu e funcionou legal!!

Valeu galera pelos posts!!!
Abs!