Ajuda com servlet para login

11 respostas
GLEMES

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:
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;
    }
}
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!!

11 Respostas

P

Ola!

Comece mudando tudo :shock:

[ ]'s

GLEMES

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!

P

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

GLEMES

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!!

GLEMES

Olá pessoal!

Alguém tem alguma sugestão?

J

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”));

GLEMES

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?

GLEMES

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!!

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.

Hebert_Coelho

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.

GLEMES

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.

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

Valeu galera pelos posts!!!
Abs!

Criado 14 de dezembro de 2010
Ultima resposta 16 de dez. de 2010
Respostas 11
Participantes 5