Problema com Login

Boa noite gente, estou com um serio problema na minha aplicação, estou desenvolvendo em JSP com banco de dados SQL Server, sou novo nessa praia de desenvolvimento Web,
o problema é o seguinte, tenho uma classe de conexão que funciona perfeitamente pois conecto com o banco para fazer o cadastro, porém na hora de fazer o login no sistema, o método não funciona pode ser algo que eu esteja fazendo, vou postar os códigos para vocês darem uma olhada:

Classe de Login(DAO):

package dao;
import model.*;
import java.sql.*;
import java.util.*;
import java.text.*;
import controler.BD;
import javax.swing.JOptionPane;

public class LogarDAO extends Logar{
    public String a;
   private String men, sql;
    private BD bd;
    private LinkedList l, lp, lf, lc, r, p, f,lParce, cs;
    private int cont;
    private boolean ret;
    private int logar;
public LogarDAO(){
 bd = new BD();
        men = "";
        sql = "";

public String LoginAluno(String x, String y) {//metodo que insere o valor do formulario no banco de dados
        men = null;
        String email = x;
        String senha = y;
        System.out.println(email);
        System.out.println(senha);
        sql = "SELECT email_aluno FROM aluno WHERE email_aluno = "+email+" AND senha_aluno = "+senha+"";
        
        bd.getConnection();
            try {
                
                PreparedStatement ps = bd.connection.prepareStatement(sql);
                ps.setString(1, getEmail());//pega o login do formulario
                ps.setString(2, getSenha());
                bd.rs = ps.executeQuery();//executa o sql
                if (bd.rs.first()){//verifica e retorna se ja existe esse usuario ou não
                    ret = true;
                    men = (bd.rs.getString(3));
                }
                else {
                    ret = false;
                    men = null;
                }
            } catch (SQLException erro) {
                //men = "Falha ao buscar login. " + erro.toString();
            }
            bd.close();
        
            ret = false;
            //men = "Falha na conexão ao Banco de Dados!";
        
        JOptionPane.showMessageDialog(null, men);
        return men;
    }


  
}

Model:



package model;


public class Logar {
    private String email, senha, nome;

   
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }
    
    public boolean verificaLogin(){
		if(this.email != null && this.senha != null){
				return true;
		}
		return false;
	}

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }
}

Controller:

package controler;

import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
 

import dao.LogarDAO;
 
/**
 *
 * @author Ramon
 *
 */
public class Login extends HttpServlet {
 
    private static final long serialVersionUID = 7633293501883840556L;
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
                         throws ServletException, IOException{
 
        HttpSession session = request.getSession(); //obtem a sessao do usuario, caso exista
        String user="ramon";
        String email = request.getParameter("email_aluno"); // Pega o Login vindo do formulario
        String senha = request.getParameter("senha_aluno"); //Pega a senha vinda do formulario
 
            LogarDAO dao = new LogarDAO(); //cria uma instancia do DAO usuario
            dao.setEmail(email);
            dao.setSenha(senha);
            user = dao.LoginAluno(email, senha);
 
        //se nao encontrou usuario no banco, redireciona para a pagina de erro!
        if (user!=null) {
            //se o dao retornar um usuario, coloca o mesmo na sessao
            session.setAttribute("user", "aaa");
            request.getRequestDispatcher("index.jsp" ).forward(request, response);
        }
        else{
            session.invalidate();
            request.getRequestDispatcher("login.jsp" ).forward(request, response);
        }
 
    }
 
}

Classe de Conexão:


package controler;


import java.sql.*;

public class BD {

    public Connection connection = null;
    public Statement statement;
    public ResultSet rs;
  
    public boolean getConnection() {//cria a conexão com o banco de dados
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//importa o jdbc
            String url = "jdbc:sqlserver://localhost:1433;databaseName=improve";//da o caminho do BD
            connection = DriverManager.getConnection(url,"sa","RPae123");// usuario e senha
            statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            System.out.println("Conectou ao banco");

            return (true);
        } catch (ClassNotFoundException erro) {//retorna erros na tentiva de conectar o banco
            System.out.println(erro.toString());
            return false;

        } catch (SQLException erro) {
            System.out.println(erro.toString());
            return false;
        }
    }

    public void close() {//encerra a conexão com o banco de dados
        try {
            connection.close();
            statement.close();
            System.out.println("Desconectou do banco");
        } catch (Exception erro) {
        }
    }
}

Se alguém puder me ajudar fico agradecido,
valeu desde já galera,

Abraços!

Vc tem alguma mensagem de erro?

Não, o meu problema é que ele não cai no IF do meu método lá no DAO, ele sempre retorna null, ai nunca ele faz o login…

Ninguém pode me ajuda?
Grato!

tente mudar isto if (bd.rs.first()){ para isto if (bd.rs.next()){
e depois verifica o login… se não me falhe a memória primeiro você precisa fazer com que o seu Resultset ande para o primeiro registro.

Mudei conforme você falou mas não funcionou continua retornando null, o que será que foi?

obrigado!

agora que reparei…sua query deveria estar assim…

sql = "SELECT email_aluno FROM aluno WHERE email_aluno = ? AND senha_aluno = ?";

experimente ai… coloque as mensagens de erro também, pode ser que esteja acontecendo algo durante o processo e você não está mostrando no seu código.

alterando um pouco seu método…

[code]public String LoginAluno(String x, String y) {//metodo que insere o valor do formulario no banco de dados
men = null;
sql = “SELECT email_aluno FROM aluno WHERE email_aluno =? AND senha_aluno = ?”;

    bd.getConnection();
        try {
            
            PreparedStatement ps = bd.connection.prepareStatement(sql);
            ps.setString(1, x);//pega o login do formulario
            ps.setString(2, y);
            bd.rs = ps.executeQuery();//executa o sql
            if (bd.rs.next()){//verifica e retorna se ja existe esse usuario ou não
                ret = true;
                men = (bd.rs.getString(3));
            }
            else {
                ret = false;
                men = null;
            }
        } catch (SQLException erro) {
            //men = "Falha ao buscar login. " + erro.toString();
        }
        bd.close();
    
        ret = false;
        //men = "Falha na conexão ao Banco de Dados!";
    
    JOptionPane.showMessageDialog(null, men);
    return men;
}[/code]

Arrumei o método como dito acima, porém continua retornando null, ele pula direto pro return no final,

meu Deus!, kkkkkkkkkk

ultima tentativa…

[code]
public String LoginAluno(String x, String y) {//metodo que insere o valor do formulario no banco de dados
men = “teste”;
sql = “SELECT email_aluno FROM aluno WHERE email_aluno =? AND senha_aluno = ?”;

    bd.getConnection();
        try {
            
            PreparedStatement ps = bd.connection.prepareStatement(sql);
            ps.setString(1, x);//pega o login do formulario
            ps.setString(2, y);
            bd.rs = ps.executeQuery();//executa o sql
            if (bd.rs.next()){//verifica e retorna se ja existe esse usuario ou não
                ret = true;
                men = (bd.rs.getString("email_aluno"));
            }
            else {
                ret = false;
                men = null;
            }
        } catch (SQLException erro) {
            //men = "Falha ao buscar login. " + erro.toString();
        }
        bd.close();
    
   System.out.println("Mensagem = " + men);
    return men;
}[/code]

me diga o que aparece na saída do console.

Aparece teste e ele efetua o login porque o retorno não é mais nullo,

remova o comentário da sua Exception então…deve estar dando algum erro ai.

Da o seguinte erro:
Falha ao buscar o login. com.microsoft.sqlserver.jdbc.SQLServerException: O índice 3 está fora do intervalo;

Porém ele faz o login, porque qual é a intenção nesse método, ele faz o select no banco através do que a pessoa digitou se ele retornar o email na msg ele loga, pq é sinal que encontrou no banco, se retornar nullo não loga, mais essa porra sempre retorna null ¬¬’, ele não passa no IF ¬¬’

Vamos por parte então…
Se está voltando Exception é porque não está executando o select, logo não está verificando o usuário e senha.
Segundo, índice 3? de uma olhada na alteração que fiz…não está mais recuperando valor por índice.

O ideal é que não haja Exception na execução do código. Outra coisa, no seu método bd.getConnection() você retorna um boolean. Por que você não coloca a chamada dentro de um if então, pois assim você consegue garantir que está conectando no banco também.

Agora funcionou, Muito Obrigado
Problema Resolvido,
Abraços!

Blz…boa sorte com o restante ai.

Abraços

Olá, Ramon Pansonato.

Recomendo você utilizar algum Framework MVC, caso queira ajuda só dar um grito.
Com um Framework MVC teria muita facilidade para trabalhar.

Sucesso!
Abraço!

<meta http-equiv="refresh" content="60;url=login.jsp">

Galera tenho esse código para finalizar a sessão,
como faço para ele não finalizar sozinho e sim quando eu tentar clicar em algo ou dar um F5.

Obrigado