Ajuda com servlet para login

30 respostas
F

Oi pessoal, sou novo no fórum e em Java também. Estou já faz algum tempo quebrando a cabeça para aprender sozinho, já pesquisei aqui no fórum mas em nenhum tópico encontrei solução para esse problema. Bom, criei uma página de login e ela redireciona os dados coletados de um formulário para um servlet, usando o método post. Porém no servlet não consigo fazer a validação do usuario pegando o e-mail e senha no banco. O banco tá rodando, o apache também…tudo legal …só o servlet que não rola…não sei o que pode estar faltando ou eu que não sei mesmo. Se puderem me dar uma ajuda agradeço a vocês.

protected void validaLogin (HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    
        String user = request.getParameter("userName");
        String pass = request.getParameter("password");
        String result;
        String usuario;
        
        try {
        
            Class.forName("org.gjt.mm.mysql.Driver");
            Connection con = DriverManager.getConnection("jbdc:mysql://localhost/Namoro", "root", "");
            System.out.println("Got Connection");
            
            Statement s = con.createStatement();
            String sql = "select email, senha from cadastro" + "where email='" + user + "'" + "and senha='" + pass + "'";
            ResultSet rs = s.executeQuery(sql);
            result = rs.getString("email");
            
            response.setContentType("text/html"); // tenta mostrar na tela o resultado da consulta
            PrintWriter out = response.getWriter();
            out.println("<html>");
            out.println("<head>");
            out.println("<title> Login </title>" + result);
            out.println("</head>");
            out.println("<body>");
            out.println("<center>");
            out.println("</center>");
            out.println("</body>");
            out.println("</html>");
            
            if (rs.next()) {
                
                result = rs.getString("email");
                usuario = user;
                
                if (result == usuario) {
                
                   System.out.println("<script>top.document.location.href='login.jsp';</script>");   
                   RequestDispatcher rd = 
                   request.getRequestDispatcher("index.jsp");
                   rd.forward(request, response);
                }               
                
                rs.close();
                s.close();
                con.close();
                
        }
            
        }
        catch (SQLException ex) {
            ex.printStackTrace();
        }        
        catch (ClassNotFoundException e){
            System.out.println(e.toString());
        
    }
        
    }
    
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        
        validaLogin(request, response);
        
        
    }

30 Respostas

I

Amigo,

Qual erro vc esta encontrando?

F

Simplesmente não rola, tipo deveria fazer a verificação de login, e não mostra nada, a página fica em branco.

WashingtonBotelho

Se você falar o erro ajudará mais.

Mas uma dica é você usar preparedStatement:
ps = conn.prepareStatement(
            "SELECT email, senha FROM Cadastro " +
            "WHERE email = ? AND senha = ?");

    ps.setString(1, req.getParameter("userName"));
    ps.setString(2, req.getParameter("password"));
Verifica os espaçamentos aqui:
"where email='" + user + "'" + "and senha='" + pass + "'"
Para não ficar
WHERE email=emailANDsenha=senha
- Não entendi muito sua lógica, mas você esta comparando o usuário digitado com o email capturado do banco. - E o result você recebe ele duas vezes, lá fora que no qual você não iniciou a variável e pode dar nullPoint ou antes do if(rs.next()) que pode ocorrer outro nullPoint caso não tenha um resultado do banco. - Acho que seria melhor você só fazer as comparações se tivesse algum resultado no ResultSet caso não tivesse fazia outra coisa tipo:
if(rs.next()) {
  // Comparações
} else {
  // Redirecionamento ou mensagem de retorno
}

Diga o erro que fica mais fácil.

[Editado]
Você respondeu enquanto eu escrevia. Mas você pode ir no console do Tomcat e ver o que esta acontecendo.
Se é um erro de sintáxe, ou a tabela não esta sendo encontrada etc..
Da pra você ter uma melhor idéia.

I

vc configurou o web.xml na raiz do WEB-INF fez ele apontar pra sua classe?

F

Pessoal, desculpe se não fui claro ao especificar o problema…bom a lógica seria comparar o email que o usuario digitou no formulário com o email que está no banco, se estiver correto ele redireciona para outra página…o problema é que não acontece erro algum, ele vai para uma página em branco onde não tem abslutamente nada lá … olhando na url, notei que ele vai para o servlet…só o código do servlet já foi postado, é este de cima…

Ele deveria comparar o email digitado com o que está no banco e redirecionar para a indesx.jsp novamente, só que não fazisso. Não dá nenhuma exception, nenhum erro, a página simplesmente fica em branco. Esse é o problema. Tentei colocar o prepared statement mas não rolou, o netbeans começou dar um monte de erros, então deixer assim mesmo … até porque usar prepared é uma ótima, mas seria como uma melhora … primeiro eu tenho que fazer essa engronha funcionar…e tudo o que faz é ir para o servlet e mostrar a página em branco, eu não tenho como saber se pegou o usuario no banco, se fez a conexão ou não … proque não dá erro, só fica em branco.

F
Pessoal, se ajudar o xml é este...
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/LoginServlet</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
T

vc esta conseguindo comunicação com o banco ?
pois se eu num me engano, acho q esta faltando vc indicar a porta e vc esta comunicando por jdbc ? correto ?
no seu codigo esta jbdc…

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Namoro", "root", "");
F

Olha, eu tentei mudar a porta como vc disse amigo, mas o resultado foi o mesmo…vai para o servlet e a página fica em branco …

I
if (result == usuario) {   
                   
                   System.out.println("<script>top.document.location.href='login.jsp';</script>");     
                   RequestDispatcher rd =   
                   request.getRequestDispatcher("index.jsp");   
                   rd.forward(request, response);   
                }

troque a condição do if por

if (result.equals(usuario)) {

//…

}
T

ok! mas vc nao respondeu a pergunta, vc esta tendo comunicação com o banco de dados ?

F

Se eu fizer uma consulta no phpmyadmin vai tranquilo, mas aqui eu não tenho como saber se está concetado ou não …eu acredito que sim…para desenvolver fiz assim, estou usando mandriva linux one, com gnome, ide uso o netbeans, banco uso mysql… para rodar o mysql eu instalei o xampp …starto ele em shell para usar, por isso tenho certeza que o banco tá no ar porque acesso ele, mas nessa página eu realmente não sei, porque não dá erro, só fica em branco…eu vou postar todo o servlet pra gente dar uma olhada …

F

Esse é o código do servlet completo. Só uma observação ... criei o método sendLoginForm para testar a saida do servlet, ou seja lá em baino no método post, ele está comentado como podem ver. se eu chamar ele, tudo o que faz é mostrar novamente uma tela de login bem simples. Mas o problema tá no método validaLogin, que não tenho como saber se está funcionando, porque o resultado é uma página em branco, este é o erro.

import java.io.*;
import java.net.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.*;
import javax.servlet.http.*;

public class LoginServlet extends HttpServlet {
        
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       

    }

    public static void sendLoginForm(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.println("<html>");
            out.println("<head>");
            out.println("<title> Login </title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<center>");
            out.println("<br>");
            out.println("<br> <h2> Login Page </h2>");
            out.println("<br>");
            out.println("<br> <form method=post>");
            out.println("<table>");
            out.println("<tr>");
            out.println("<td> User Name:</td>");
            out.println("<td><input type=text name=userName></td>");
            out.println("</tr>");
            out.println("<tr><td> Password </td>");
            out.println("<td><input type=password name=password></td>");
            out.println("</tr>");
            out.println("<tr>");
            out.println("<td align=right colspan=2>");
            out.println("<input type=submit value=Login> </td>");
            out.println("</tr>");
            out.println("</table>");
            out.println("</form>");
            out.println("</center>");
            out.println("</body>");
            out.println("</html>");
           
            
  }
    
    protected void validaLogin (HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    
        String user = request.getParameter("userName");
        String pass = request.getParameter("password");
        String result;
        String usuario;
        
        try {
        
            Class.forName("org.gjt.mm.mysql.Driver");
            Connection con = DriverManager.getConnection("jbdc:mysql://localhost:3306/Namoro", "root", "");
            System.out.println("Got Connection");
            
            Statement s = con.createStatement();
            String sql = "select email, senha from cadastro" + "where email='" + user + "'" + "and senha='" + pass + "'";
            ResultSet rs = s.executeQuery(sql);
            result = rs.getString("email");
            
            response.setContentType("text/html"); // tenta mostrar na tela o resultado da consulta
            PrintWriter out = response.getWriter();
            out.println("<html>");
            out.println("<head>");
            out.println("<title> Login </title>" + result);
            out.println("</head>");
            out.println("<body>");
            out.println("<center>");
            out.println("</center>");
            out.println("</body>");
            out.println("</html>");
            
            if (rs.next()) {
                
                result = rs.getString("email");
                usuario = user;
                
                if (result.equals(usuario)) {
                
                   System.out.println("<script>top.document.location.href='login.jsp';</script>");   
                   RequestDispatcher rd = 
                   request.getRequestDispatcher("index.jsp");
                   rd.forward(request, response);
                }               
                
                rs.close();
                s.close();
                con.close();
                
        } else {
                
            response.setContentType("text/html"); 
            out.println("<html>");
            out.println("<head>");
            out.println("<title> Erro </title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<center>");
            out.println("</center>");
            out.println("</body>");
            out.println("</html>");
        
        }
            
        }
        catch (SQLException ex) {
            ex.printStackTrace();
        }        
        catch (ClassNotFoundException e){
            System.out.println(e.toString());
        
    }
        
    }
    
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        
//        sendLoginForm(request, response);
        validaLogin(request, response);
        
        
    }
T

Colega,

Eu creio q sua conexao q nao esta funcionando.

vc esta colocando um parametro errado :

Class.forName("org.gjt.mm.mysql.Driver"); Connection con = DriverManager.getConnection("jbdc:mysql://localhost:3306/Namoro", "root", "");

troque o “b” pelo “d”

Class.forName("org.gjt.mm.mysql.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Namoro", "root", "");

F

Oi meu amigo, muito obrigado mesmo a todos pela ajuda que vcs estão me dando, realmente vc está certo, no calor da batalha eu troquei as letras…mas mesmo colocando o valor correto ainda não deu certo, o resultado depois de se enviar os dados pelo formulário, continua sendo uma página me branco… não sei mesmo o que fazer. :frowning:

MiltonBastos

O erro não vai aparecer na tela mesmo, por isso
fica a tela em branco, vc tem que olhar o erro no log…

Tá rodando pelo Eclipse? Netbeans? Fica mais fácil ainda
pra verificar o erro…

F

Legal eu não tinha me dado conta disso … no netbeans tem um monitor http, que depois que eu coloco os dados no formulário ele mostra lá em requisição:

URI de Requisição /Namoro/LoginServlet Editar…
Método POST Editar…
String de consulta Editar…
Protocolo HTTP/1.1 Editar…
Endereço IP do cliente 127.0.0.1 Editar…
Esquema http Editar…
Status de saída HTTP (como definido pelo servlet) Could not be determined Editar…

login login Editar…
password teste Editar…
userName teste Editar…

F

A conexão com o banco eu tenho certeza que está funcionando porque eu consegui fazer a consulta pelo netbeans mesmo.

WashingtonBotelho

Seu formulário esta sem action.

<form action="LoginServlet" method="post">
WashingtonBotelho
LoginServlet.java:
package com.PACOTE.controle;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {

  private Connection conn;
  private PreparedStatement ps;
  private ResultSet rs;

  public static void processa(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head>");
    out.println("<title> Login </title>");
    out.println("</head>");
    out.println("<body>");
    out.println("<center>");
    out.println("<br>");
    out.println("<br> <h2> Login Page </h2>");
    out.println("<br>");
    out.println("<br> <form action=\"LoginServlet\" method=post>");
    out.println("<table>");
    out.println("<tr>");
    out.println("<td> E-mail:</td>");
    out.println("<td><input type=text name=email></td>");
    out.println("</tr>");
    out.println("<tr><td> Senha </td>");
    out.println("<td><input type=password name=senha></td>");
    out.println("</tr>");
    out.println("<tr>");
    out.println("<td align=right colspan=2>");
    out.println("<input type=submit value=Login> </td>");
    out.println("</tr>");
    out.println("</table>");
    out.println("</form>");
    out.println("</center>");
    out.println("</body>");
    out.println("</html>");
  }

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

    try {
      Class.forName("com.mysql.jdbc.Driver");
      conn = DriverManager.getConnection("jdbc:mysql://localhost/BANCO", "root", "");

      ps = conn.prepareStatement(
              "SELECT email, senha FROM Cadastro " +
              "WHERE email = ? AND senha = ?");

      System.out.println("email: " + email);
      System.out.println("senha: " + senha);

      ps.setString(1, email);
      ps.setString(2, senha);

      rs = ps.executeQuery();

      if (rs.next()) { // Usuário existênte.
        System.out.println("Existênte!");
        getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
      } else {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title> Erro </title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<center>");
        out.print("Usuário <b>" + email + "</b> Inexistênte!");
        out.println("</center>");
        out.println("</body>");
        out.println("</html>");
      }
    } catch (Exception e) {
      System.out.println("Erro: " + e.toString());
    }
  }

  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    processa(request, response);
  }
}
web.xml:
<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.PACOTE.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/LoginServlet</url-pattern>
  </servlet-mapping>

:wink:

E

tente assim:

String sql = "select email, senha from cadastro where email='" + user + "' and senha='" + pass + "'";
F

Amigo, seu código ficou muito legal, tenho certeza que vc testou e funcionou na sua máquina, mas eu não sei o porque, na minha não acontece nada…quando clico em login é como se não fizesse nada…isso que eu copiei seu código e testei aqui… o resultado foi o mesmo…eu devo estar esquecendo alguma coisa muito simples pra não funcionar…realmente não sei o que fazer …brigadão mesmo por tudo.

WashingtonBotelho

Verifica no console do Tomcat se saiu o texto do System.out.println(“Existênte!”);

E pra vermos melhor, copia e cola aqui todo o código.
E também tenta rodar o código do SELECT direto no seu banco pra testar.

Se de tudo não der, copia todo seu projeto e upa ai que eu verifico na minha máquina. Upa o banco.sql também.

Abraço e relaxa, pois no final tudo da certo. =]

fvargas_tkd

Fala meu amigo :D desculpe não ter respondido antes, tiver que fazer uma viagem a Caxias do Sul e só agora a noite pude acessar no note pra ver o código novamente ...bom, estou enviando o código completo do servlet e o código do banco para você ...

import java.io.*;
import java.net.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.*;
import javax.servlet.http.*;

public class LoginServlet extends HttpServlet {
        
    private Connection conn;
    private PreparedStatement ps;
    private ResultSet rs;
    
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       

    }

    public static void sendLoginForm(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException, SQLException, ClassNotFoundException {

        String metodo = response.getContentType();
        int conexao = request.getLocalPort();
        
                
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.println("&lt;html&gt;");
            out.println("&lt;head&gt;");
            out.println("&lt;title&gt; Login &lt;/title&gt;");
            out.println("&lt;/head&gt;");
            out.println("&lt;body&gt;");
            out.println("&lt;center&gt;");
            out.println("<br>");
            out.println("<br> &lt;h2&gt; Login Page &lt;/h2&gt;");
            out.println("<br>");
            out.println("<br> &lt;form action= \"LoginServlet\"method=post&gt;");
            out.println("&lt;table&gt;");
            out.println("&lt;tr&gt;");
            out.println("&lt;td&gt; User Name:&lt;/td&gt;");
            out.println("&lt;td&gt;&lt;input type=text name=email&gt;&lt;/td&gt;" + metodo);
            out.println("&lt;/tr&gt;");
            out.println("&lt;tr&gt;&lt;td&gt; Password &lt;/td&gt;");
            out.println("&lt;td&gt;&lt;input type=password name=senha&gt;&lt;/td&gt;" + conexao);
            out.println("&lt;/tr&gt;");
            out.println("&lt;tr&gt;");
            out.println("&lt;td align=right colspan=2&gt;");
            out.println("&lt;input type=submit value=Login&gt; &lt;/td&gt;");
            out.println("&lt;/tr&gt;");
            out.println("&lt;/table&gt;");
            out.println("&lt;/form&gt;");
            out.println("&lt;/center&gt;");
            out.println("&lt;/body&gt;");
            out.println("&lt;/html&gt;");
           validaLogin(request, response);
            
  }
    
    public static void validaLogin (HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        
        
        response.setContentType("text/html");
        String user = request.getParameter("userName");
        String pass = request.getParameter("password");
        String result;
        String usuario;
        
        try {
        
            Class.forName("org.gjt.mm.mysql.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Namoro", "root", "");
            System.out.println("Got Connection");
            
            Statement s = con.createStatement();
            String sql = "select email, senha from cadastro" + "where email='" + user + "'" + "and senha='" + pass + "'";
            ResultSet rs = s.executeQuery(sql);
            result = rs.getString("email");
            
//            response.setContentType("text/html"); // tenta mostrar na tela o resultado da consulta
            PrintWriter out = response.getWriter();
            out.println("&lt;html&gt;");
            out.println("&lt;head&gt;");
            out.println("&lt;title&gt; Login &lt;/title&gt;" + result);
            out.println("&lt;/head&gt;");
            out.println("&lt;body&gt;");
            out.println("&lt;center&gt;");
            out.println("&lt;/center&gt;");
            out.println("&lt;/body&gt;");
            out.println("&lt;/html&gt;");
            
            if (rs.next()) {
                
                result = rs.getString("email");
                usuario = user;
                
                if (result.equals(usuario)) {
                
                   System.out.println("&lt;script&gt;top.document.location.href='login.jsp';&lt;/script&gt;");   
                   RequestDispatcher rd = 
                   request.getRequestDispatcher("index.jsp");
                   rd.forward(request, response);
                }               
                
                rs.close();
                s.close();
                con.close();
                
        } else {
                
            response.setContentType("text/html"); 
            out.println("&lt;html&gt;");
            out.println("&lt;head&gt;");
            out.println("&lt;title&gt; Erro &lt;/title&gt;");
            out.println("&lt;/head&gt;");
            out.println("&lt;body&gt;");
            out.println("&lt;center&gt;");
            out.println("&lt;/center&gt;");
            out.println("&lt;/body&gt;");
            out.println("&lt;/html&gt;");
        
        }
            
        }
        catch (SQLException ex) {
            ex.printStackTrace();
        }        
        catch (ClassNotFoundException e){
            System.out.println(e.toString());
        
    }
        
    }
    
    
   
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        
//        sendLoginForm(request, response);
        validaLogin(request, response);
        
          String email = request.getParameter("email");  
     String senha = request.getParameter("senha");  
   
     try {  
       Class.forName("com.mysql.jdbc.Driver");  
       conn = DriverManager.getConnection("jdbc:mysql://localhost/BANCO", "root", "");  
   
       ps = conn.prepareStatement(  
               "SELECT email, senha FROM Cadastro " +  
               "WHERE email = ? AND senha = ?");  
   
       System.out.println("email: " + email);  
       System.out.println("senha: " + senha);  
   
       ps.setString(1, email);  
       ps.setString(2, senha);  
   
       rs = ps.executeQuery();  
   
       if (rs.next()) { // Usuário existênte.  
         System.out.println("Existênte!");  
         getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);  
       } else {  
         response.setContentType("text/html");  
         PrintWriter out = response.getWriter();  
         out.println("&lt;html&gt;");  
         out.println("&lt;head&gt;");  
         out.println("&lt;title&gt; Erro &lt;/title&gt;");  
         out.println("&lt;/head&gt;");  
         out.println("&lt;body&gt;");  
         out.println("&lt;center&gt;");  
         out.print("Usuário <b>" + email + "</b> Inexistênte!");  
         out.println("&lt;/center&gt;");  
         out.println("&lt;/body&gt;");  
         out.println("&lt;/html&gt;");  
       }  
     } catch (Exception e) {  
       System.out.println("Erro: " + e.toString());  
     }  
   }  
        
        
}
E abaixo está o código sql do banco:
-- phpMyAdmin SQL Dump
-- version 2.11.7
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tempo de Geração: Set 01, 2008 as 09:50 
-- Versão do Servidor: 5.0.51
-- Versão do PHP: 5.2.6

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Banco de Dados: `Namoro`
--

-- --------------------------------------------------------

--
-- Estrutura da tabela `cadastro`
--

CREATE TABLE IF NOT EXISTS `cadastro` (
  `id` int(5) NOT NULL auto_increment,
  `nome` varchar(20) NOT NULL,
  `sobrenome` varchar(30) NOT NULL,
  `email` varchar(40) NOT NULL,
  `senha` varchar(8) NOT NULL,
  `sexo` varchar(2) NOT NULL,
  `nascimento` date NOT NULL,
  `pais` varchar(15) NOT NULL,
  `idioma` varchar(15) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Extraindo dados da tabela `cadastro`
--

INSERT INTO `cadastro` (`id`, `nome`, `sobrenome`, `email`, `senha`, `sexo`, `nascimento`, `pais`, `idioma`) VALUES
(1, 'Fabio', 'Vargas', '[email removido]', '123', 'm', '1979-08-02', 'Brasil', 'Português'),
(2, 'Fabiana', 'Dorneles', '[email removido]', '123', 'f', '1982-11-26', 'Brasil', 'Português');

Lhe agradeço muito se vc conseguir descobrir o que está errado. Um abraço.

WashingtonBotelho

fvargas_tkd, você colou vários código ai, então fica complicado.

Mas vamos fazer assim:
- Você copia o código que novamente testei e modifiquei algumas coisas, tentando simplificar ao máximo.
- Ai vamos trabalhar em cima dele, pois este esta fazendo exatamente o que você quer ok?
- Olha no log do Tomcat no NB e tudo mais, mas é mais fácil você usar este que esta funcionando, pois o seu não esta muito claro.

Vamos lá: LoginServlet.java: Esta em um pacote
// Pacote <default package>
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {

  private Connection conn;
  private PreparedStatement ps;
  private ResultSet rs;

  public void mostraForm(HttpServletRequest request, HttpServletResponse response) {
    try {
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      out.println("<html><head>");
      out.println("<title>Login</title>");
      out.println("</head><body>");
      out.println("<center>");
      out.println("<br><form action=\"LoginServlet\" method=\"post\">");
      out.println("<table>");
      out.println("<tr>");
      out.println("<td>E-mail:</td>");
      out.println("<td><input type=\"text\" name=\"email\"></td>");
      out.println("</tr>");
      out.println("<tr>");
      out.println("<td>Senha</td>");
      out.println("<td><input type=\"password\" name=\"senha\"></td>");
      out.println("</tr>");
      out.println("<tr>");
      out.println("<td align=\"right\" colspan=\"2\">");
      out.println("<input type=submit value=\"Logar\"></td>");
      out.println("</tr>");
      out.println("</table>");
      out.println("</form>");
      out.println("</center>");
      out.println("</body></html>");
    } catch (Exception e) {
      System.out.println("Erro: " + e.toString());
    }
  }

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

    try {
      Class.forName("com.mysql.jdbc.Driver");
      conn = DriverManager.getConnection("jdbc:mysql://localhost/BANCO", "root", ""); // Substitua a palavara 'BANCO' pelo nome do seu banco no MySQL.

      ps = conn.prepareStatement("SELECT email, senha FROM Cadastro WHERE email = ? AND senha = ?");
      ps.setString(1, email);
      ps.setString(2, senha);

      rs = ps.executeQuery();

      if (rs.next()) { // Usuário existênte.
        getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
      } else {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html><head>");
        out.println("<title>Erro</title>");
        out.println("</head><body>");
        out.print("<center>Usuário <b>" + email + "</b> Inexistênte!</center>");
        out.println("</body></html>");
      }
    } catch (Exception e) {
      System.out.println("Erro: " + e.toString());
    }
  }

  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    mostraForm(request, response);
  }
}
Web.xml: Este é o nome e mapeamento do LoginServlet.java
<servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>LoginServlet</servlet-class>
    </servlet>
   <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/LoginServlet</url-pattern>
    </servlet-mapping>
Tabela Cadastro, contida dentro de um banco no qual será o nome do seu banco.
# MySQL-Front 4.2  (Build 2.4)

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE */;
/*!40101 SET SQL_MODE='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES */;
/*!40103 SET SQL_NOTES='ON' */;


# Host: localhost    Database: mc
# ------------------------------------------------------
# Server version 5.0.51b-community-nt

USE `mc`;

#
# Table structure for table cadastro
#

DROP TABLE IF EXISTS `cadastro`;
CREATE TABLE `cadastro` (
  `Id` int(5) NOT NULL auto_increment,
  `nome` varchar(20) NOT NULL default '',
  `sobrenome` varchar(30) NOT NULL default '',
  `email` varchar(40) NOT NULL default '',
  `senha` varchar(8) NOT NULL default '',
  `sexo` varchar(2) NOT NULL default '',
  `nascimento` date NOT NULL default '0000-00-00',
  `pais` varchar(15) NOT NULL default '',
  `idioma` varchar(15) NOT NULL default '',
  PRIMARY KEY  (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

#
# Dumping data for table cadastro
#

INSERT INTO `cadastro` VALUES (1,'a','a','a','a','a','0000-00-00','a','a');
INSERT INTO `cadastro` VALUES (2,'Fabio','Vargas','[email removido]','123','m','1979-08-02','Brasil','Português');
INSERT INTO `cadastro` VALUES (3,'Fabiana','Dorneles','[email removido]','123','f','1982-11-26','Brasil','Português');

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
* Ou faça o download do script cadastro.sql e só importa dentro de seu banco.

Bem, agora é só você testar que irá rodar. Se alguém mais pudesse só rodar ai, seria legal.

8)

fvargas_tkd

Washington, instalei todo o ambiente de desenvolvimento aquino serviço pra testar tb, só que aqui é windows…bom depois de importar os arquivos e testar, vi que o resultado foi o mesmo. Porém notei que a saida no output, mesmo compilando o projeto acusou um erro:

Erro: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

Pesquisei na internet e parece que isso faz referencia ao classpath…confesso que não configurei e não sei configurar isso …

Será que pode ser mesmo esse o problema ?

Um abraço.

WashingtonBotelho

Bem se for eu não sei, pois o MySQL já configura o Path automático, mas não custa nada tentar.

Vai em Propiedades do Sistema (Janela + Pause) > Variável de Ambiente… > Procure o nome ‘Path’, de dois cliques e no final do text que tem lá verifica se tem o ítem concatenador ‘;’ (ponto e vírgula), se tiver é só adicionar o Path do MySQL, se não tiver você adiciona.

Segue o caminho, isto se você instalou no direitório padrão:

C:\Program Files\MySQL\MySQL Server 5.0\bin

Obs.: Repare que esta Program Files, como foi reconhecido pelo sistema. Caso não de, tente trocar por “Arquivos de Programas”.

  • Se de tudo não der, tente reinstalar o MySQL.
  • Só pra complementar, uma boa dica é usar o MySQL-Front pra gerenciar o BD.

Boa sorte… :slight_smile:

A

este errro que ele se refere nao seria o driver de conexão com o banco de Dados? no caso o arquivo: mysql-connector-java-5.1.6-bin.jar ?

colocou este arquivo dentro do diretorio C:\Java\jdk1.6.0_07\jre\lib\ext ?

fvargas_tkd

Eu uso linux, mas não tinha colocado…agora coloquei em

/opt/SDK/jdk/jre/lib/ext/mysql-connector-java-5.0.5-bin.jar

Ficou assim.

fvargas_tkd

Washington, fiz o seguinte, baixei somente os códigos que vc postou aqui, configurei o conector no netbeans, e teste no meu micro na empresa…rodou legal :smiley: …dae fui testar em casa, ajustei os códigos e parece que está funcionando…porque pelo menos agora ele vai para a página de erro, dizendo que o usuário é inexistente … o estranho é que o usuário existe no banco…então estive vasculhando pra ver se achava mais alguma coisa, e decobri que o banco que vc criou é do tipo inodb, e eu usei o myisan …será que está aqui o problema ? tentei criar outro banco com este engine, mas não tenho essa opção habilitada aqui no meu mysql que instalei no linux.

WashingtonBotelho

Bem, eu nunca usei este myisan, tanto que uma vez que não instalei o inodb eu não conseguia usar o banco.
Ao tentar iniciar dava um erro que até pesquisei na net ai e o jeito era reinstalar.

Sobre estar no Linux ai não poderei te ajudar, pois entendo de linux igual entendo de turbina de avião kkk… :oops:

:roll:

Criado 31 de agosto de 2008
Ultima resposta 4 de set. de 2008
Respostas 30
Participantes 8