Análise de Tela Login [Resolvido]

Boa Tarde a todos, é a primeira vez que posto aqui no forum então primeiramente gostaria de pedir desculpas se estou postando no lugar errado, bom o que eu preciso é de uma ajuda a respeito do código abaixo, sou iniciante em java e gostaria de saber se tem algo desnecessário que eu coloquei ou algo que ficou faltando ou que eu possa melhorar…
A minha intenção é de uma tela de login jsp, que envia as informações de usuario e senha para este servlet que analisa e redireciona para uma determinada pagina, colocando o funcionario em uma sessão…
Desde ja agradeço a atenção !!!


package br.com.sgc.servlets;

import br.com.sgc.beans.Funcionario;
import br.com.sgc.dao.ConnectionManager;
import br.com.sgc.dao.FuncionarioDao;
import java.io.IOException;
import java.sql.*;
import javax.servlet.http.*;
import javax.servlet.*;


public class ValidaLogin extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException{
        doAction(request, response);
    }
    public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException{
        doAction(request, response);
    }
     
    public void doAction(HttpServletRequest request, HttpServletResponse
            response)throws IOException, ServletException{

        String user = request.getParameter("user");
        String password = request.getParameter("password");
        Connection conectar = null;
        Statement stmt = null;
        ResultSet rs = null;
        Funcionario func = null;
        String urlDestino = null;
        String sql = "SELECT id_func FROM login WHERE usuario= '"+user+"' AND senha= '"+password+"'";
            try{
            conectar = ConnectionManager.getConexao();
            stmt = conectar.createStatement();
            rs = stmt.executeQuery(sql);
            if(rs.next()){
                int id = rs.getInt("id_func");
                FuncionarioDao f = new FuncionarioDao();
                func = f.getFuncionario(id);
                request.getSession().setAttribute("funcionario", func);
                urlDestino = "home.jsp";
            }else{
                urlDestino = "index.jsp";
            }
            }catch(Exception e){
                e.printStackTrace();
            }finally{
                ConnectionManager.close(conectar, stmt, rs);
            }
            response.sendRedirect(urlDestino);
    }
}

opa blz. Cara tb sou iniciante, mas posso te dar algumas dicas.

Primeiro: Tenta centralizar sua conexão com o banco de dados. Cria uma classe cujo a única função é conectar como banco, pra não precisar colocar o mesmo código em todo servlet que você precisar se conectar no banco. O certo seria fazer usando o modelo MVC criando BO’s e DAO’s para cada domain do seu sistema . Esses DAO’s que fariam toda a parte de conexão como banco.

Segundo: Se eu não me engano(me corrijam se estiver errado) quando você dá um sendRedirect os parametros que vc passa para o request são perdidos.

É isso ai.

Cara a melhor maneira é utilizar o conceito MVC (Model View Controller).
Segue exemplo a pra vc ver.

  1. Crie uma classe de conexão com o banco de dados nesse caso utilizei MYSQL.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Conexao {
	private Connection connection = null;

	private Connection startConnection() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/projweb", "root", "root");
			return connection;
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public Connection getConnection()throws Exception{
		if(connection == null)
			return startConnection();
		else
			return connection;
	}
	
	public void closeCon() throws SQLException{
		if(connection != null)
		connection.close();
	}
}
  1. Code Removed

  2. Crie o pacote Model

package model;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import bd.Conexao;

public class UsersModel {
	public boolean userLogin(String login, String password){
		try {
			Conexao conexao = new Conexao();
			Connection connection = conexao.getConnection();
			
			Statement statement = connection.createStatement();
			String sql = "select * from users where login = 

4. Crie o servlet (camada Controller)
[code]
package servlet.controller;

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.swing.JOptionPane;

import model.UsersModel;

/**
 * Servlet implementation class ValidaLogin
 */
public class ValidaLogin extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String login = request.getParameter("login");
		String password = request.getParameter("password");
		UsersModel lm = new UsersModel();
		boolean logado = lm.userLogin(login, password);
		if (logado) {
			response.sendRedirect("FramePrincipal .jsp");
		} else {
			JOptionPane.showMessageDialog(null, "Login or Pass not available");
			response.sendRedirect("Login.jsp");
		}
	}
}
[/code]

Agora é só criar a pagina JSP que nesse caso é a view e pronto.
OBS: OS PARAMETROS PASSADOS DEVEM SER OS MESMOS NA VIEW." + login
            + "

4. Crie o servlet (camada Controller)
[code]
package servlet.controller;

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.swing.JOptionPane;

import model.UsersModel;

/**
 * Servlet implementation class ValidaLogin
 */
public class ValidaLogin extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String login = request.getParameter("login");
		String password = request.getParameter("password");
		UsersModel lm = new UsersModel();
		boolean logado = lm.userLogin(login, password);
		if (logado) {
			response.sendRedirect("FramePrincipal .jsp");
		} else {
			JOptionPane.showMessageDialog(null, "Login or Pass not available");
			response.sendRedirect("Login.jsp");
		}
	}
}
[/code]

Agora é só criar a pagina JSP que nesse caso é a view e pronto.
OBS: OS PARAMETROS PASSADOS DEVEM SER OS MESMOS NA VIEW. and password = 

4. Crie o servlet (camada Controller)
[code]
package servlet.controller;

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.swing.JOptionPane;

import model.UsersModel;

/**
 * Servlet implementation class ValidaLogin
 */
public class ValidaLogin extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String login = request.getParameter("login");
		String password = request.getParameter("password");
		UsersModel lm = new UsersModel();
		boolean logado = lm.userLogin(login, password);
		if (logado) {
			response.sendRedirect("FramePrincipal .jsp");
		} else {
			JOptionPane.showMessageDialog(null, "Login or Pass not available");
			response.sendRedirect("Login.jsp");
		}
	}
}
[/code]

Agora é só criar a pagina JSP que nesse caso é a view e pronto.
OBS: OS PARAMETROS PASSADOS DEVEM SER OS MESMOS NA VIEW." + password + "

4. Crie o servlet (camada Controller)
[code]
package servlet.controller;

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.swing.JOptionPane;

import model.UsersModel;

/**
 * Servlet implementation class ValidaLogin
 */
public class ValidaLogin extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String login = request.getParameter("login");
		String password = request.getParameter("password");
		UsersModel lm = new UsersModel();
		boolean logado = lm.userLogin(login, password);
		if (logado) {
			response.sendRedirect("FramePrincipal .jsp");
		} else {
			JOptionPane.showMessageDialog(null, "Login or Pass not available");
			response.sendRedirect("Login.jsp");
		}
	}
}
[/code]

Agora é só criar a pagina JSP que nesse caso é a view e pronto.
OBS: OS PARAMETROS PASSADOS DEVEM SER OS MESMOS NA VIEW.";

			ResultSet rs =  statement.executeQuery(sql);
			if(rs.next())
				return true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
  1. Crie o servlet (camada Controller)
package servlet.controller;

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.swing.JOptionPane;

import model.UsersModel;

/**
 * Servlet implementation class ValidaLogin
 */
public class ValidaLogin extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String login = request.getParameter("login");
		String password = request.getParameter("password");
		UsersModel lm = new UsersModel();
		boolean logado = lm.userLogin(login, password);
		if (logado) {
			response.sendRedirect("FramePrincipal .jsp");
		} else {
			JOptionPane.showMessageDialog(null, "Login or Pass not available");
			response.sendRedirect("Login.jsp");
		}
	}
}

Agora é só criar a pagina JSP que nesse caso é a view e pronto.
OBS: OS PARAMETROS PASSADOS DEVEM SER OS MESMOS NA VIEW.

Deixe-me ver se eu entendi, acho que a Classe de conexão com o banco de dados eu ja tenho é a “ConnectionManager”, a classe “UsersModel” é onde eu verifico se o usuario existe, e o servlet “Controller” é onde recebo os parametros usuario e senha e utilizo na classe “UsersModel”…é isso???..pelo que eu percebi o que foi feito foi desmembrar classe que eu fiz, foi isso mesmo???..só não entendi a utilidade da classe “UsersVo”…

UsersModel - verifica se o usuario existe no banco, se sim retorna true
servletController - faz os requests e validação.
UsersVo - Eu coloquei pois posteriormente pode ser utilizado mas creio que nesse caso eu adicionei por engano.
Mas é isso ai.
Removido VO

Acho que entendi, vou pesquisar mais a respeito do MVC…Obrigado a todos que ajudaram !!!

Quando solucionar seu problema não esqueça de citar [Resolvido] no Assunto