Autenticando em um sistema de Login

Pessoal,

Sou iniciante em programaçao java para web, criei uma classe login, na qual usando cookies, permite que usuarios
sejam autenticados. Quando tento fazer o login com o usuario admin (cadastrado no MySLQ) vem a mensagem:

Nao foi possivel conectar com o banco.
Parameter index out of range (1 > of parameters, which is 0)

Tentei diversas formas mas sem sucesso.

Segue abaixo o codigo.

package br.home.livraria;

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 java.sql.SQLException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.;
import java.sql.
;

/**

  • Servlet implementation class Login
    */
    public class Login extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private Connection conn;

    /**

    • @see HttpServlet#HttpServlet()
      */
      public Login() {
      super();
      // TODO Auto-generated constructor stub
      }

    /**

    • @see Servlet#init(ServletConfig)
      */
      public void init(ServletConfig config) throws ServletException {
      // TODO Auto-generated method stub
      String connectionString = “jdbc:mysql://localhost/livraria?user=root&password=1234”;

      try {
           Class.forName("com.mysql.jdbc.Driver");
           conn = DriverManager.getConnection(connectionString);
       }
       catch (ClassNotFoundException err) {
           System.out.println("Nao foi possivel carregar o Driver");
           System.out.println(err.getMessage());
       }
      
       catch (SQLException err){
           System.out.println("Erro ao estabelecer a conexao com o banco de dados");
           System.out.println(err.getMessage());
       }
      

      }

    /**

    • @see Servlet#destroy()
      */
      public void destroy() {
      // TODO Auto-generated method stub
      }

    /**

    • @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
      */
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // TODO Auto-generated method stub

      PrintWriter out = response.getWriter();
      String html = “”;
      String login = “”;

      Cookie cookies[] = request.getCookies();
      if (cookies != null){
      for (int i = 0 ; i < cookies.length; i++){
      if (cookies[i].getName().equals(“login”)== true){
      login = cookies[i].getValue();
      } //fecha segundo if

       } //fecha for
      

      } //fecha primeiro if

      html += “”;
      html += “”;
      html += “Biblioteca Online”;
      html += “”;
      html += “”;
      html += “”;
      html += “Login:
      ”;
      html += “Senha:<input type=‘password’ id=‘password’ name=‘password’
      ”;
      html += “
      ”;
      html += “”;
      html += “”;
      out.print(html);
      }

    /**

    • @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
      */
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // TODO Auto-generated method stub

      PrintWriter out = response.getWriter();
      PreparedStatement smt;
      Cookie cookie;
      ResultSet rs;
      String sql = “select * from tb_usuario where login = ‘?’ and password = password(’?’)”;
      String html = “”;
      html += “”;
      html += “”;
      try {
      if (request.getParameter(“login”)!= null && request.getParameter(“password”)!= null) {
      smt = conn.prepareStatement(sql);
      smt.setString(1, request.getParameter(“login”));
      smt.setString(2, request.getParameter(“password”));
      rs = smt.executeQuery();

           if (rs.next()){
           	cookie = new Cookie("login", request.getParameter("login"));
           	response.addCookie(cookie);
           	response.sendRedirect("sucesso.html");
           	
           	/* Pratica 3
           	HttpSession session = request.getSession();
           	session.setAttribute("UserName",rs.getString("Nome"));
           	response.sendRedirect("CadastraLivro");*/
           }
           else {
           	html += "usuario ou senha invalidos";
           }
           rs.close();
           smt.close();
           
       } else{
       	html += "usuario ou senha nao informada !";
           }
           
       } catch (SQLException err){
       	html += "Nao foi possivel conectar com o banco<br><br>";
       	html += err.getMessage();
       }
       html+= "</body>";
       html+= "</html>";
       out.print(html);
       out.close();           
        }     
      

    }

Att,

Faria

Olá,

Tente remover as aspas simples da sua query. Ficaria assim:

String sql = "select * from tb_usuario where login = ? and password = password(?)"; 

Quando você chama o setString() do PreparedStatement ele já lida automaticamente com as aspas simples, então você não precisa se preocupar com isso.

Outra coisa que eu gostaria de falar é que você deve tomar muito cuidado com a forma como você está programando este servlet. Lembre-se de que os servlets são normalmente compartilhados entre as requisições. Desta forma, declarar o objeto da sua conexão com o banco de dados como um atributo do servlet é extremamente perigoso e não recomendado em nenhuma situação (ainda mais em se tratando de um recurso como uma conexão). Para fins de aprendizagem tudo bem (e acho que é esse seu objetivo), mas só neste caso. Só quis te dar esse toque :wink:

Abraço

Oi Ctosin,

Funcionou após retirar as aspas.
A idéia é mais para aprendizado mesmo.
Mas caso eu goste de programar em Java, vou segui a dica que voce passou.

Obrigado !

Faria