Erro ao Validar Login! está errado o jeito q to fazendo?

11 respostas
Jaison

Olá pessoal estou com um problema eu tenhu uma página index.jsp e nela tem dois campos codigo do aluno e o outro campo senha e um botão que envia os dados pelo método get até um sevlet chama ValidaUsers, esse servlet faz uma conexão com o banco e verifica se é o mesmo codigo do usuario e senha o o internauta digitou no index.jsp. O problema é que quando eu rodo a aplicação (digitanto codigo e senha) ele da um java.lang.NullPointerException, eu ainda não encontrei o erro, até porque ta tudo certo (acho) alguém pode me ajudar!!!

index.jsp :

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<html>
<head><title>MOL - Monitoria On-Line</title></head>
<center>
<body>
<form method="get" action="ValidaUsers">
<font face="arial" color="red" size="1">Código do aluno: </font>&lt;input type="text" name="campoCodAluno"&gt;
<font face="arial" color="red" size="1">senha: </font>&lt;input type="text" name="campoSenha"&gt;
&lt;input type="submit" value="Acessar MOL"&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/center&gt;
&lt;/html&gt;

ValidaUsers.java :

protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        //processRequest(request, response);
        int codigoAluno= Integer.parseInt(request.getParameter("campoCodAluno"));
        String senhaAluno= request.getParameter("campoSenha"); 
        //valida(codigoAluno,senhaAluno);       
        try{
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost/progweb","java", "senha");
        }catch(Exception e){
            e.printStackTrace();
        }
        try{
            Statement stmt = con.createStatement();
            ResultSet res = stmt.executeQuery("select * from valida");
            res.next();
            pegaCodBanco = res.getInt("codAluno");
            pegaSenhaBanco=res.getString("senha");
            
        }catch(SQLException sqle){
            sqle.printStackTrace();
        }
        if((pegaCodBanco==codigoAluno)&&(pegaSenhaBanco.equals(senhaAluno))){
            System.out.println("Senha correta!!!");
        }else{
            System.out.println("Senha incorreta!!!");
        }
    }

11 Respostas

robson.java

Tente assim:

Acho que assim funciona testa ai...

falow

[code]protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//processRequest(request, response);
int codigoAluno= Integer.parseInt(request.getParameter("campoCodAluno"));
String senhaAluno= request.getParameter("campoSenha");
//valida(codigoAluno,senhaAluno);
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost/progweb","java", "senha");
}catch(Exception e){
e.printStackTrace();
}
try{
Statement stmt = con.createStatement();
ResultSet res = stmt.executeQuery("" SELECT * FROM NOMEDATABELA "+
" WHERE login='"+codigoAluno+"' AND Senha='"+senhaAluno+"'"");
while(res.next()){
pegaCodBanco = res.getInt("codAluno");
pegaSenhaBanco=res.getString("senha");
}

}catch(SQLException sqle){
sqle.printStackTrace();
}
if((pegaCodBanco==codigoAluno)&&(pegaSenhaBanco.equals(senhaAluno))){
System.out.println("Senha correta!!!");
}else{
System.out.println("Senha incorreta!!!");
}
}

Pedrosa

Dica crie uma classe somente para conexão, e suas classes de negócios instanciam essa conexão, caso sua aplicação cresça vc não irá reptir toda hora a conexão, e seria bakana também tirar essa lógica da servlet deixando em uma outra classe de negócio.

Pesquise sobre MVC.

Jaison

continua dando o erro java.lang.NullPointerException rodson

:frowning:

Mais alguém pode me ajuda???

Jaison

Pedrosa:
Dica crie uma classe somente para conexão, e suas classes de negócios instanciam essa conexão, caso sua aplicação cresça vc não irá reptir toda hora a conexão, e seria bakana também tirar essa lógica da servlet deixando em uma outra classe de negócio.

Pesquise sobre MVC.

Realmente sua dica, foi de muita importancia Pedrosa, mas o meu erro ainda continua :frowning:

vc tem noção do que seja???

abraço!

Pedrosa

Tente fazer da maneira correta:

1 Crie uma classe de Conexão:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ConnectionFactory { 

	private static final String url = "jdbc:mysql://localhost/progweb";
	private static final String driver = "com.mysql.jdbc.Driver";
	private static final String usuario = "usuario";
	private static final String senha = "senha";
	
	public static Connection getConnection() throws SQLException {
		try {
			Class.forName(driver);
			return DriverManager.getConnection(url, usuario, senha);
		} catch (ClassNotFoundException e) {
			throw new SQLException(e.getMessage());
		}
	}
}

2 Crie uma classe de Modelo

public class LoginBean{ 
	private String usuario;
	private String senha;
	
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	public String getUsuario() {
		return usuario;
	}
	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}
	
}

3 Crie uma classe DAO

public class LoginDAO {
	private Connection connection;
	private String strSQL;
  
	public LoginDAO(Connection con){
		this.connection = con;
	}

	public LoginDAO() throws Exception {
		this.connection = ConnectionFactory.getConnection();
	}
	public boolean validaLogin(LoginBean login) throws SQLException {
		String sql = "SELECT * FROM USUARIO WHERE USUARIO =  ? AND SENHA = ?";
		PreparedStatement stmt = this.connection.prepareStatement(sql);
		stmt.setString(1, login.getUsuario().trim());
		stmt.setString(2, login.getSenha().trim());
		ResultSet rs = stmt.executeQuery();
		if(rs.next()){
			return true;
		}else{
			return false;
		}
	}
}

4 Sua Servlet mais limpa e sem inteligência

public class ControllerAction extends HttpServlet { 

	private String acao;
	private String target;
	
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {

		RequestDispatcher rd;
		acao = request.getParameter("acao").toString();
		HttpSession sessao = request.getSession();
		String msg = "";
		try {
			LoginDAO login = new LoginDAO();

			// Login
			if (acao.equalsIgnoreCase("Login")) {
				LoginBean formulario = new LoginBean();
				formulario.setUsuario(request.getParameter("usuario"));
				formulario.setSenha(request.getParameter("senha"));
				
				if(login.validaLogin(formulario)){
					target = "/Jogos.jsp";
				}else{
					target = "/Index.jsp";
					msg = "Usuário Inválido!";
					request.setAttribute("msg",msg);
				}
Jaison

valeu pedrosa, valeu eu não consegui adaptar a sua solução no meu problema :frowning:

caramba e como eu preciso conectar esse troço!!!

num entendo pq ta dando nullPointerException nesse troço!!!

pra mim está tudo certo! :frowning:

mesmo assim valeu! abraço!!!

alguém tem algo a manifestar, sobre esse problema? :frowning:

Pedrosa

Alguma variável esta chegando com valor null, vai printando para saber qual, quanto a minha solução é bem tranquilo a adptar ao seu caso, só mudar senha por código, mas em logins validamos com usuario e senha mesmo.

Qual foi a dificuldade para usar do jeito que eu falei?

Jaison

Pedrosa:
Alguma variável esta chegando com valor null, vai printando para saber qual, quanto a minha solução é bem tranquilo a adptar ao seu caso, só mudar senha por código, mas em logins validamos com usuario e senha mesmo.

Qual foi a dificuldade para usar do jeito que eu falei?

valeu sua ajuda Pedrosa, mas essa é a minha primeira conexão em banco. Por isso não estou conseguindo adaptar, mas valeu mesmo assim :frowning:

eu quero mesmo era saber pq oq eu fiz tah dando nullPointException, não intendi onde errei…

mas valeu! :frowning:

R

Pedrosa esse seu exmplo acho que se enquadra no que estou fazendo o que eu mudo no seu exemplo da classe “ControlerAction”
no meu caso usando cookies ou o que muda na minha aplicação para usar session

R

Pedrosa esse seu exmplo acho que se enquadra no que estou fazendo o que eu mudo no seu exemplo da classe “ControlerAction”
no meu caso usando cookies ou o que muda na minha aplicação para usar session

Felagund
protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        //processRequest(request, response);
        int codigoAluno= Integer.parseInt(request.getParameter("campoCodAluno"));
        String senhaAluno= request.getParameter("campoSenha"); 
        //valida(codigoAluno,senhaAluno);       
        try{
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost/progweb","java", "senha");
        }catch(Exception e){
            e.printStackTrace();
        }
        try{
            PreparedStatment smt = con.prepareStatment("SELECT * FROM Valida Where Login = ? and Senha = ?");
//Utilize sempre o preparedStatment ele é mais seguro e evita injection no seu codigo
           smt.setString(1, codigoAluno);
           smt.setString(2, senhaAluno);
           ResultSet rs = smt.executeQuery();
            if(rs.next()){
                System.out.println("Senha Correta");
            }else{
               System.out.println("Senha Incorreta");
             }
            
        }catch(SQLException sqle){
            sqle.printStackTrace();
        }

    }

Experimento usar esse codigo, as vezes pode ser necessaria alguma correçao caso tenha digitado algo errado, mais deve funcionar.

Criado 23 de maio de 2006
Ultima resposta 3 de jun. de 2008
Respostas 11
Participantes 5