Dúvida sobre passagem de parâmetros

Boa Noite,

Estou iniciando um trabalho em Java que envolve MVC, no primeiro momento desenvolvi a tela de login e agora estou tentando fazer a conexão com o banco. Criei a ServletWeb para pegar os atributos informados pelo usuário e repassar para o controle LoginControl, dentro desta classe tenho a função ValidarLogin o problema é que esta função recebe os parâmetros da Servlet mas não esta repassando para a classe LoginDAO.
Alguém pode por gentileza me ajudar?

package Controller;
import ModeloDao.LoginDao;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 *
 * @author DoNascC
 */
public class servletWeb extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    public servletWeb() { 
        super(); 
 } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
                throws ServletException, IOException { 
                processRequest(request, response); 
 }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
                throws ServletException, IOException { 
                processRequest(request, response); 
 } 
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            //    response.setContentType("text/html;charset=UTF-8");
                    
             //HttpSession session = request.getSession();
             RequestDispatcher view; 
             
             String login = request.getParameter("txtNome"); 
             String senha = request.getParameter("txtSenha"); 
             
             LoginControl lc = new LoginControl(); 
                int retorno = lc.ValidarLogin(login, senha);
                if (retorno == 1) { 
                    request.setAttribute("msg", "Seja bem vindo "+login); 
                        view = request.getRequestDispatcher("logado.jsp"); 
                }else { 
                    request.setAttribute("msg", "Login desconhecido!"); 
                    view = request.getRequestDispatcher("erroLogin.jsp"); 
                } 
                    view.forward(request, response); 
    } 
}
public class LoginControl implements Serializable{

    public int ValidarLogin(String login, String senha) { 
        LoginVo lv = new LoginVo(); 
        lv.setLogin(login);
        lv.setSenha(senha);
        //Instanciando o DAO
        LoginDao ld = new LoginDao(); 
        int retorno = ld.verificaLogin(lv); 
        return retorno; 
 } 
}
package ModeloDao;

import Controller.Vo.LoginVo;

public class LoginDao extends GenericDao {
    
    public int verificaLogin(LoginVo aux){
        
        try { 
                this.stmt = this.getConnection().createStatement(); 
                rs = stmt.executeQuery("select usuariousername, usuariosenha from usuario where usuariousername = '"+aux.getLogin()+"', and usuariosenha = '"+aux.getSenha()+"'");
                if (rs.next()) { 
                    return 1; //Achou o login!
                } 
                else
                    return 0; //Não achou o login! Login invalido!
            } catch (Exception e) { 
                e.printStackTrace(); 
                return 0; 
            } 
    } 
} 

[quote=cclaudiarafaela7]Boa Noite,

Estou iniciando um trabalho em Java que envolve MVC, no primeiro momento desenvolvi a tela de login e agora estou tentando fazer a conexão com o banco. Criei a ServletWeb para pegar os atributos informados pelo usuário e repassar para o controle LoginControl, dentro desta classe tenho a função ValidarLogin o problema é que esta função recebe os parâmetros da Servlet mas não esta repassando para a classe LoginDAO.
Alguém pode por gentileza me ajudar?

package Controller;
import ModeloDao.LoginDao;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 *
 * @author DoNascC
 */
public class servletWeb extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    public servletWeb() { 
        super(); 
 } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
                throws ServletException, IOException { 
                processRequest(request, response); 
 }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
                throws ServletException, IOException { 
                processRequest(request, response); 
 } 
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            //    response.setContentType("text/html;charset=UTF-8");
                    
             //HttpSession session = request.getSession();
             RequestDispatcher view; 
             
             String login = request.getParameter("txtNome"); 
             String senha = request.getParameter("txtSenha"); 
             
             LoginControl lc = new LoginControl(); 
                int retorno = lc.ValidarLogin(login, senha);
                if (retorno == 1) { 
                    request.setAttribute("msg", "Seja bem vindo "+login); 
                        view = request.getRequestDispatcher("logado.jsp"); 
                }else { 
                    request.setAttribute("msg", "Login desconhecido!"); 
                    view = request.getRequestDispatcher("erroLogin.jsp"); 
                } 
                    view.forward(request, response); 
    } 
}
public class LoginControl implements Serializable{

    public int ValidarLogin(String login, String senha) { 
        LoginVo lv = new LoginVo(); 
        lv.setLogin(login);
        lv.setSenha(senha);
        //Instanciando o DAO
        LoginDao ld = new LoginDao(); 
        int retorno = ld.verificaLogin(lv); 
        return retorno; 
 } 
}

[code]
package ModeloDao;

import Controller.Vo.LoginVo;

public class LoginDao extends GenericDao {

public int verificaLogin(LoginVo aux){
    
    try { 
            this.stmt = this.getConnection().createStatement(); 
            rs = stmt.executeQuery("select usuariousername, usuariosenha from usuario where usuariousername = '"+aux.getLogin()+"', and usuariosenha = '"+aux.getSenha()+"'");
            if (rs.next()) { 
                return 1; //Achou o login!
            } 
            else
                return 0; //Não achou o login! Login invalido!
        } catch (Exception e) { 
            e.printStackTrace(); 
            return 0; 
        } 
} 

}
[/code] [/quote]

blz?
vc sabe se tá dando algum erro?

quando vc usa operador AND, vc não precisa por virgula. tenta ver a diferenca de como vc fez aqui:

rs = stmt.executeQuery("select usuariousername, usuariosenha from usuario where usuariousername = '"+aux.getLogin()+"', and usuariosenha = '"+aux.getSenha()+"'"); 

de como ficou aqui:

rs = stmt.executeQuery("select usuariousername, usuariosenha from usuario where usuariousername = '"+aux.getLogin()+"' and usuariosenha = '"+aux.getSenha()+"'"); 

pq não usa preparedstatement?
http://www.guj.com.br/java/40126-exemplo-de-preparedstatement
http://www.mkyong.com/jdbc/jdbc-preparedstatement-example-batch-update/

fica mais fácil de trabalhar seu codigo sql. Veja que os sinais de interrogação são subistituidos pelas variaveis:

String insertTableSQL = "INSERT INTO DBUSER"
			+ "(USER_ID, USERNAME, CREATED_BY, CREATED_DATE) VALUES"
			+ "(?,?,?,?)";				
PreparedStatement = dbConnection.prepareStatement(insertTableSQL);
 
preparedStatement.setInt(1, 101);
preparedStatement.setString(2, "mkyong101");
preparedStatement.setString(3, "system");
preparedStatement.setTimestamp(4, getCurrentTimeStamp());

Esse é só um exemplo com insert, mas pode fazer com select update…

evite colocar suas variáveis assim:

= '"+aux.getLogin()+"' and usuariosenha = '"+aux.getSenha()+"'"); 

Luiz Augusto,

Muito obrigada desde já por sua atenção.

Quando executo o programa não tenho erros, no entanto, não consigo ir para a página de logado, quando entra na classe LoginDAO ele faz a conexão, vai para linha do select e depois cai direto no catch e tela de erro. Outra coisa que percebi é que nesta classe a váriavel aux esta vazia.
Fiz a mudança abaixo também mas mesmo assim não consigo fazer a validação, estou enviando no anexo a tela com as alterações feitas.

Obrigada mais uma vez.


[quote=cclaudiarafaela7]quando entra na classe LoginDAO ele faz a conexão, vai para linha do select e depois cai direto no catch e tela de erro.
[/quote]

então…
esse erro qi que a gente precis ver. sem ele não tem como ajudar muito.

vc poderia procurar tbm uma biblioteca chamada ‘log4j’
http://www.guj.com.br/articles/130

sem isso, temos que ver o erro que mostra apartir disso:

e.printStackTrace(); 

vc pode ta errando em como fez seu formulário. Tem certeza de que não tá tentando pegar parametros que não existem no seu formulário?

Antes de vc mudar de págia ou fazer qualquer redirecionamento, tenta ver se resolve o problema. deposi que tiver tudo funcionando bonitinho, que vc insere os codigos de redirecionamento ou layout de página.

tenta, pelo menos, fazer algo assim:

out = response.getWriter();
out.println( e.toString() + "===" + e.getLocalizedMessage() + "===" + e.getMessage() ); 
e.printStackTrace(); 

depois que rodar seu programa, vai na saida e pega a string que aparece os iguais “===” e posta aqui.

Luiz Augusto,

Neste caso a classe login DAO ficaria como abaixo?

    public int verificaLogin(LoginVo aux){
        
        try { 
                this.pstmt = (PreparedStatement) this.getConnection().createStatement();
                rs = this.pstmt.executeQuery("select usuariousername, usuariosenha from usuario where usuariousername = ? and usuariosenha = ?");
                if (rs.next()) { 
                    return 1; //Achou o login!
                } 
                else
                    return 0; //Não achou o login! Login invalido!
            } catch (Exception e) { 
                [b]System.out.println = response.getWriter();[/b]  
                System.out.println( e.toString() + "===" + e.getLocalizedMessage() + "===" + e.getMessage() );
                e.printStackTrace(); 
                return 0; 
            } 
    } 
} 

[quote=cclaudiarafaela7]Luiz Augusto,

Neste caso a classe login DAO ficaria como abaixo?

[code]
public int verificaLogin(LoginVo aux){

    try { 
            this.pstmt = (PreparedStatement) this.getConnection().createStatement();
            rs = this.pstmt.executeQuery("select usuariousername, usuariosenha from usuario where usuariousername = ? and usuariosenha = ?");
            if (rs.next()) { 
                return 1; //Achou o login!
            } 
            else
                return 0; //Não achou o login! Login invalido!
        } catch (Exception e) { 
            [b]System.out.println = response.getWriter();[/b]  
            System.out.println( e.toString() + "===" + e.getLocalizedMessage() + "===" + e.getMessage() );
            e.printStackTrace(); 
            return 0; 
        } 
} 

}
[/code][/quote]

sim, pq não sei pq vc não tá conseguindo ler seu erro:

e.printStackTrace();

ai vc procura na saida ou console do seu netbeans ou eclipse onde aparecer estas strings. precisa colar aqui pra pelo menos tentar tatear o que tá acontecendo. seria interessante vc postar seu formulario também. tentou fazer algo mais simples que pôde: ou seu parameetro da vindo errado ou faltando ou seu login não tá no banco de dados ou tem algum erro, que a gente precisar ver qual é. Primeiro quero saber que erro é esse pra depois me certificar da ordem de sua lógica. vc tá me falando que tá caindo no cath, então eu quero saber porque.

só me diz mais uma coisa… vc tá usando netbeans com tomcat?

Estou utilizando Netbeans e GlassfishServer 3.1.2

ve onde vc pode encontrar sua mensagem de erro.
ve na internete se o seu GlassfishServer permite ver esse tipo de erro dessa forma.

talvez fique mais fácil pra vc até se utilizar a lib que te falei:
jog4j


tenta ver o objeto pono o brak point la no catch. é possivel pelo seu netbenas?


Luiz Augusto,

Inclui mais uma biblioteca e alterei o que havia feito para Statement novamente, percebi que quando executo não esta mais caindo direto na exceção ele passa pela conexão e query no entanto, percebi que não valida o login porque as variáveis login e senha estão chegando vazias no DAO, estou enviando abaixo o formulário revisei tudo e aparentemente estou usando as variáveis corretas e também a mensagem der erro que tenho no glassfish.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="EN" lang="EN" dir="ltr">
<head profile="http://gmpg.org/xfn/11">
<title>mySolution</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="imagetoolbar" content="no" />
<link rel="stylesheet" href="styles/layout.css" type="text/css" />
</head>
<body>
<script type="text/javascript">
  function validate_form(formulario){
	if(formulario.txtNome.value == null || formulario.txtNome.value == ""){
  		alert("Login inválido!");
		formulario.login.focus();
  		return false;
	}
	if(formulario.txtSenha.value == null || formulario.txtSenha.value == ""){
	    alert("Senha inválido!");
		formulario.login.focus();
  		return false;
	}
  	return true;
  }
</script>
<div class="wrapper col1">
  <div id="header">
    <div id="logo">
      <h1><a href="#">mySolution</a></h1>
    </div>
   <br class="clear" />
  </div>
</div>

<div class="wrapper col3"> 
	  <div id="footer">   
      <form action="servletWeb" method="processRequest" onsubmit="return validate_form(this);">
        <fieldset>        
		  <h2>Entrar</h2>
            <input type="text" name="txtNome" />
            <input type="password" name="txtSenha" />
			<p><a href="#">&raquo; Lost Your Password</a> | <a href="#">Create An Account &raquo;</a></p>
			<div class="fl_right">
              <input type="submit" name="login_go" id="login_go" value="Acessar" />			
            </div>       
        </fieldset>
      </form>      
      </div>  

</div>

<div class="wrapper col7">
  <div id="copyright">
    <p class="fl_left">Copyright &copy; 2011 - All Rights Reserved - <a href="#">mySolution</a></p>
    <p class="fl_right">Rua Professor Razer, n.1000 - Java Web  - Curitiba/PR</p>
    <br class="clear" />
  </div>
</div>
</body>
</html>


[quote=cclaudiarafaela7]Luiz Augusto,

Inclui mais uma biblioteca e alterei o que havia feito para Statement novamente, percebi que quando executo não esta mais caindo direto na exceção ele passa pela conexão e query no entanto, percebi que não valida o login porque as variáveis login e senha estão chegando vazias no DAO, estou enviando abaixo o formulário revisei tudo e aparentemente estou usando as variáveis corretas e também a mensagem der erro que tenho no glassfish.

[code]

mySolution

Entrar

» Lost Your Password | Create An Account »

Copyright © 2011 - All Rights Reserved - mySolution

Rua Professor Razer, n.1000 - Java Web - Curitiba/PR


[/code][/quote]

bom, tenta mudar esse seu method para post:

          <form action="servletWeb" method="POST" onsubmit="return validate_form(this);">  
            <fieldset>          
              <h2>Entrar</h2>  
                <input type="text" name="txtNome" />  
                <input type="password" name="txtSenha" />  
                <p><a href="#">» Lost Your Password</a> | <a href="#">Create An Account »</a></p>  
                <div class="fl_right">  
                  <input type="submit" name="login_go" id="login_go" value="Acessar" />             
                </div>         
            </fieldset>  
          </form>    

editado pq esqueci de complementar, algo que vc pode não tá sabendo:

doGet = é executado quando o method é GET
doPost = é executado quando o method é POST

esse exemplo é em PHP, mas o GET e POST é independente da linguagem. por isso só presta atenção no endereço que aparece no navegador e as dicas do autor

Quando vc usa GET, os parametros devem ir pela queryString: caixa de texto da barra de endereço.

Quando vc usa post, os dados vem escondidos. Eu só uso POST. Perfeito para AJAX.

Utilizei sua dica muito obrigada pelo vídeo ele deixa bem claro a diferença entre os dois recursos principalmente em relação a segurança.
Alterei para “POST” consigo ver as variáveis populadas apenas na Servlet. Quando chamo o validarlogin os parâmetros não aparecem dentro do lv veja por gentileza as figuras que estou enviando no anexo.

[quote=cclaudiarafaela7]Utilizei sua dica muito obrigada pelo vídeo ele deixa bem claro a diferença entre os dois recursos principalmente em relação a segurança.
Alterei para “POST” consigo ver as variáveis populadas apenas na Servlet. Quando chamo o validarlogin os parâmetros não aparecem dentro do lv veja por gentileza as figuras que estou enviando no anexo.[/quote]

que figuras?

Desculpe eu compactei vou tentar colocar aqui sem compactar.




Faltou mais uma segue abaixo:


então ve como vc fez os geteres e seteres do seu LoginVo.
deve ter errado alguma coisa lá;
tem certeza de que estes metodos estão devolvendo algum valor?
posta ele aqui

Segue abaixo o LoginVo, criei a classe e os getters e setters conforme me explicaram talvez alguma coisa não esteja correta então.

public class LoginVo {
    private String login; 
    private String senha;
    
    public String getLogin(){
        return login; 
   }
    public void setLogin(String Login) {
        this.login = login;
    }
    public String getSenha() {
        return senha;
    }
    
    public void setSenha(String Senha) {
        this.senha = senha;
    }
}

[quote=cclaudiarafaela7]Segue abaixo o LoginVo, criei a classe e os getters e setters conforme me explicaram talvez alguma coisa não esteja correta então.

[code]
public class LoginVo {
private String login;
private String senha;

public String getLogin(){
    return login; 

}
public void setLogin(String Login) {
this.login = login;
}
public String getSenha() {
return senha;
}

public void setSenha(String Senha) {
    this.senha = senha;
}

}
[/code][/quote]

não. tá certo.
vc vai ter que aprender a capturar estes erros pelo try catch. não dá pra ficar vendo foto de cada passo do break point.

vc tem que descobrir como debugar. vc descobre em que momento o try catch ocorre e volta lá, pondo um breakpoint pra ver que paramentros estão vindo errado. vc conseguiu entender o GET e POST. bom. vou deixar vc estudando sobre como usar estas ferramentas que lhe indiquei. agora tenho que ir. se conseguir algo novo, poste aqui. amanha vejo. sucesso

Então na verdade o método não esta recebendo os valores por isso aparece como null agora consigo visualizar a mensagem de erro abaixo:

type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception
java.lang.UnsupportedOperationException: Not supported yet.