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.
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();
}
}
Code Removed
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;
}
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”…
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???
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