Validar no atualizar com jsp

Olá a todos estou com uma dúvida na validação no atualizar.

O que quero fazer é algo assim:

Deixar atualizar o mesmo login, mas se atualizar e tiver o mesmo nome de login em outra linha da tabela ele não pode atualizar.

Tenho as seguintes classes:

Servlet Usuario

package servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import beans.BeanCursoJsp;
import dao.DaoUsuario;

@WebServlet("/salvarUsuario")
public class Usuario extends HttpServlet {
	private static final long serialVersionUID = 1L;

	private DaoUsuario daoUsuario = new DaoUsuario();

	public Usuario() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		try {
			String acao = request.getParameter("acao");
			String user = request.getParameter("user");

			if (acao.equalsIgnoreCase("delete")) {
				daoUsuario.delete(user);
				RequestDispatcher view = request.getRequestDispatcher("/cadastroUsuario.jsp");
				request.setAttribute("usuarios", daoUsuario.listar());
				view.forward(request, response);
			} else if (acao.equalsIgnoreCase("editar")) {
				BeanCursoJsp beanCursoJsp = daoUsuario.consultar(user);

				RequestDispatcher view = request.getRequestDispatcher("/cadastroUsuario.jsp");
				request.setAttribute("user", beanCursoJsp);
				request.setAttribute("usuarios", daoUsuario.listar());
				view.forward(request, response);
			} else if (acao.equalsIgnoreCase("listartodos")) {
				RequestDispatcher view = request.getRequestDispatcher("/cadastroUsuario.jsp");
				request.setAttribute("usuarios", daoUsuario.listar());
				view.forward(request, response);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String acao = request.getParameter("acao");

		if (acao != null && acao.equalsIgnoreCase("reset")) {
			try {
				RequestDispatcher view = request.getRequestDispatcher("/cadastroUsuario.jsp");
				request.setAttribute("usuarios", daoUsuario.listar());
				view.forward(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		} else {

			String id = request.getParameter("id");
			String login = request.getParameter("login");
			String senha = request.getParameter("senha");
			String nome = request.getParameter("nome");
			String fone = request.getParameter("fone");
			
			String cep = request.getParameter("cep");
			String rua = request.getParameter("rua");
			String bairro = request.getParameter("bairro");
			String cidade = request.getParameter("cidade");
			String estado = request.getParameter("estado");
			String ibge = request.getParameter("ibge");

			BeanCursoJsp usuario = new BeanCursoJsp();
			usuario.setId(!id.isEmpty() ? Long.parseLong(id) : null);
			usuario.setLogin(login);
			usuario.setSenha(senha);
			usuario.setNome(nome);
			usuario.setFone(fone);
			usuario.setCep(cep);
			usuario.setRua(rua);
			usuario.setBairro(bairro);
			usuario.setCidade(cidade);
			usuario.setEstado(estado);
			usuario.setIbge(ibge);

			try {

				String msg = null;
				boolean podeInserir = true;

				// validando se o login senha nome e telefone serão vazios
				if (login == null || login.isEmpty()) {
					msg = "Login deve ser informado";
					podeInserir = false;
				} else if (senha == null || senha.isEmpty()) {
					msg = "Senha deve ser informada";
					podeInserir = false;
				} else if (nome == null || nome.isEmpty()) {
					msg = "Nome deve ser informada";
					podeInserir = false;
				} else if (fone == null || fone.isEmpty()) {
					msg = "Teleforna deve ser informada";
					podeInserir = false;
				}

				else if (id == null || id.isEmpty() && !daoUsuario.validarLogin(login)) {// QUANDO FOR USUÁRIO NOVO,
																							// validando se existir
																							// usuario iguais
					msg = "Usuário já existe com o mesmo login!";
					podeInserir = false;

				} else if (id == null || id.isEmpty() && !daoUsuario.validarSenha(senha)) {// QUANDO FOR USUÁRIO NOVO
					msg = "\n A senha já existe para outro usuário!";
					podeInserir = false;
				}

				if (msg != null) {
					request.setAttribute("msg", msg);
				} else if (id == null || id.isEmpty() && daoUsuario.validarLogin(login) && podeInserir) {

					daoUsuario.salvar(usuario);

				} else if (id != null && !id.isEmpty()) {					
				
					if (daoUsuario.validarLogin(login) == false) {
						msg = "Usuário já existe com o mesmo login!";
						podeInserir = false;	
					}  else {
						daoUsuario.atualizar(usuario);	
					}	
							
				}

				if (!podeInserir) {
					request.setAttribute("user", usuario);
				}

				RequestDispatcher view = request.getRequestDispatcher("/cadastroUsuario.jsp");
				request.setAttribute("usuarios", daoUsuario.listar());
				request.setAttribute("msg", msg);
				view.forward(request, response);

			} catch (Exception e) {
				e.printStackTrace();
			}

		} // fim do else
	}// fim doPost
}

Tenho o DaoUsuario

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import beans.BeanCursoJsp;
import conection.SigleConnection;

public class DaoUsuario {
	
	private Connection connection;

	public DaoUsuario() {
		connection = SigleConnection.getConnection();
	}
	
	public void salvar(BeanCursoJsp usuario){
		
		try {
			String sql = "insert into usuario(login, senha, nome, fone, cep, rua, bairro, cidade, estado, ibge) "
					+ "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
			
			PreparedStatement insert = connection.prepareStatement(sql);
			
			insert.setString(1, usuario.getLogin());
			insert.setString(2, usuario.getSenha());
			insert.setString(3, usuario.getNome());
			insert.setString(4, usuario.getFone());
			insert.setString(5, usuario.getCep());
			insert.setString(6, usuario.getRua());
			insert.setString(7, usuario.getBairro());
			insert.setString(8, usuario.getCidade());
			insert.setString(9, usuario.getEstado());
			insert.setString(10, usuario.getIbge());
			insert.execute();
			connection.commit();
		}catch (Exception e) {
			e.printStackTrace();
			try {
				connection.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
		}
	}
	
	public List<BeanCursoJsp> listar() throws Exception{
		List<BeanCursoJsp> listar = new ArrayList<BeanCursoJsp>();
		
		String sql = "select * from usuario";
		
		PreparedStatement statement = connection.prepareStatement(sql);
		ResultSet resultSet = statement.executeQuery();
		
		while(resultSet.next()) {
			BeanCursoJsp beanCursoJsp = new BeanCursoJsp();
			beanCursoJsp.setId(resultSet.getLong("id"));
			beanCursoJsp.setLogin(resultSet.getString("login"));
			beanCursoJsp.setSenha(resultSet.getString("senha"));
			beanCursoJsp.setNome(resultSet.getString("nome"));
			beanCursoJsp.setFone(resultSet.getString("fone"));
			beanCursoJsp.setCep(resultSet.getString("cep"));
			beanCursoJsp.setRua(resultSet.getString("rua"));
			beanCursoJsp.setBairro(resultSet.getString("bairro"));
			beanCursoJsp.setCidade(resultSet.getString("cidade"));		
			beanCursoJsp.setEstado(resultSet.getString("estado"));
			beanCursoJsp.setIbge(resultSet.getString("ibge"));
			
			listar.add(beanCursoJsp);
		}
		
		return listar;
	}
	
	public void delete(String id) {	
		
		try {
			String sql = "delete from usuario where id = '"+ id + "'";
			PreparedStatement preparedStatement = connection.prepareStatement(sql);
			preparedStatement.execute();
			
			connection.commit();
		}catch (Exception e) {
			e.printStackTrace();
			try {
				connection.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}
	}

	public boolean validarLogin(String login) throws Exception {
		
		String sql = "select count(1) as qtd from usuario where login = '" + login + "'";
		
		PreparedStatement preparedStatement = connection.prepareStatement(sql);
		ResultSet resultSet = preparedStatement.executeQuery();
		
		if(resultSet.next()) {
			return resultSet.getInt("qtd") <= 0;//retorna true, inserir false não inserir
		}
		
		return false;
	}
	
	public boolean validarSenha(String senha) throws Exception {
		
		String sql = "select count(1) as qtd from usuario where senha = '" + senha + "'";
		
		PreparedStatement preparedStatement = connection.prepareStatement(sql);
		ResultSet resultSet = preparedStatement.executeQuery();
		
		if(resultSet.next()) {
			return resultSet.getInt("qtd") <= 0;
		}
		
		return false;
	}
	
	public BeanCursoJsp consultar(String id) throws Exception {
		
		String sql = "select * from usuario where id = '" + id + "'";
		
		PreparedStatement preparedStatement = connection.prepareStatement(sql);
		ResultSet resultSet = preparedStatement.executeQuery();
		
		if(resultSet.next()) {
			BeanCursoJsp beanCursoJsp = new BeanCursoJsp();
			beanCursoJsp.setId(resultSet.getLong("id"));
			beanCursoJsp.setLogin(resultSet.getString("login"));
			beanCursoJsp.setSenha(resultSet.getString("senha"));
			beanCursoJsp.setNome(resultSet.getString("nome"));
			beanCursoJsp.setFone(resultSet.getString("fone"));
			beanCursoJsp.setCep(resultSet.getString("cep"));
			beanCursoJsp.setRua(resultSet.getString("rua"));
			beanCursoJsp.setBairro(resultSet.getString("bairro"));
			beanCursoJsp.setCidade(resultSet.getString("cidade"));		
			beanCursoJsp.setEstado(resultSet.getString("estado"));
			beanCursoJsp.setIbge(resultSet.getString("ibge"));
			
			return beanCursoJsp;
		}
		
		return null;
	}

	public void atualizar(BeanCursoJsp usuario) {
		try {
			String sql = "update usuario set login = ?, senha = ?, nome = ?, fone = ?, cep = ?, rua = ?, bairro = ?, "
					+ "cidade = ?, estado = ?, ibge = ? where id = " + usuario.getId();
			
			PreparedStatement preparedStetement = connection.prepareStatement(sql);
			preparedStetement.setString(1, usuario.getLogin());
			preparedStetement.setString(2, usuario.getSenha());
			preparedStetement.setString(3, usuario.getNome());
			preparedStetement.setString(4, usuario.getFone());
			preparedStetement.setString(5, usuario.getCep());
			preparedStetement.setString(6, usuario.getRua());
			preparedStetement.setString(7, usuario.getBairro());
			preparedStetement.setString(8, usuario.getCidade());
			preparedStetement.setString(9, usuario.getEstado());
			preparedStetement.setString(10, usuario.getIbge());
			
			preparedStetement.executeUpdate();
			connection.commit();
		}catch (Exception e) {
			e.printStackTrace();
			try {
				connection.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
		}
	}
}

Tenho as outras classes (de conexão e as páginas jsp), tudo está funcionando, como disse minha dúvida é nessa validação na parte do atualizar.

Pensei em fazer algo como:

String velhoLogin
String novoLogin

if(velhoLogin.equals(novoLogin)) { atualiza }

Só que quando se vai atualizar como é que recupera essa váriavel do velhoLogin?

Tem outra forma de fazer essa validação, pois quando entra nesse if:

if (daoUsuario.validarLogin(login) == false) {
	msg = "Usuário já existe com o mesmo login!";
	podeInserir = false;	
}  else {
	daoUsuario.atualizar(usuario);	
}	

Ele não atualiza o mesmo login e se tirar o metodo validarLogin(login) ele pode colocar o mesmo login em outras linhas da tabela (isso que não quero).

Se alguém poder me ajudar agradeço.

você já tentou setar o valor da variavel velhologin em um novo atributo do request?

Tentei so que no debbuging ele só pega o valor que estou setando para ele, isso na classe do servlet. Ele também não faz a verificação se tem o mesmo login em outra linha da tabela só se utilizar o validarLogin(login), se fizer se tiver qualquer nome duplicado na tabela ele vai vetar a atualização.

Oi Willamecm, pelo oque eu entendi, a tabela de login poder ter o login duplicado, se for isso pelo oque estou vendo.
Você esta mandando o login para a servlet e precisa atualizar esse registro, como pode ter mais de um, não vejo maneira de identificar o registro somente pelo login, teria que mandar também o ID desse registro na hora de atualizar.

Vou dar um exemplo do que quero fazer:

Tenho alguns login Renata, Paula e José.

Se quiser atualizar o login de Renata para José, não pode pq já tem esse registro (José), agora se não quiser trocar o login e continuar com o login de Renata e só alterar outros campos, o método validarLogin(login) não deixa, pois vai acusar campo duplicado.

O que quero fazer é uma validação onde ele deixe ficar com o mesmo login do id (se quiser troca outros campos), caso queira trocar de login, ele fazer uma busca se tem outro login igual, mas nessa busca excluir o valor do login que está sendo alterado.

Isso é somente você fazer um select antes de atualizar o login SELECT * FROM login where login = JOSE;caso esse select retorne algo ´r porque esse login ja existe, mostre uma mensagem que esse login ja está cadastrado, caso esse select não retorne nada você prossegue com seu método de atualização.

achei a solução, na classe servlet

else if(id != null && !id.isEmpty()) {
    	if(daoUsuario.validarLoginUpdate(login, id) == false) {
    		podeInserir = false;
    		msg = "Já existe usuario com esse login";
    	}else {
    		daoUsuario.atualizar(usuario);
    	}
}

Já no Dao

public boolean validarLoginUpdate(String login, String id) throws Exception{
String sql = “select count(1) as qtd from usuario where login = '” + login + "’ and id <> " + id;

PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
	
if(resultSet.next()) {
		return resultSet.getInt("qtd") <= 0;//retorna true, inserir false não inserir
}
	
	return false;
}