Dúvida sobre como fazer um Servlet de login

5 respostas
A

Boa tarde a todos!
Estou criando uma pequena rede social usando apenas Servlets e Jsp, apenas para fixar o conhecimento obtido nos livros.

Estou com uma dúvida em relação ao Servlet de Login e OO.
Minha classe usuario tem os otributos id, login e senha.
O usuario digita no formulario o login e a senha, então surje a dúvida:
Qual classe deve ficar responsável por verificar se o login e senha são válidos? É a classe de model(classe Usuario) ou control(o Servlet) que deve pedir ao DAO retornar o usuario com o login e senha especificados?
E depois que ele retornar eu devo armazenar na sessão apenas o ID do usuario ou o objeto usuario inteiro?

5 Respostas

drsmachado

Tua pergunta já responde.
Quem é o controller???

A

Muito obrigado drsmachado!!!
O problema é que eu echo que não aprendi OO da maneira correta…
Eu pensei que todas as funções relacionadas a Usuario a propria classe usuario deveria fazer

E o que eu coloco na sessão o objeto usuario ou apenas o int id?

drsmachado

Azalor:
Muito obrigado drsmachado!!!
O problema é que eu echo que não aprendi OO da maneira correta…
Eu pensei que todas as funções relacionadas a Usuario a propria classe usuario deveria fazer

E o que eu coloco na sessão o objeto usuario ou apenas o int id?

Acontece que você está abordando o pattern MVC, ou seja, você tem camadas e em cada camada você possui determinadas classes que são responsáveis por determinadas ações.
No MVC a camada view não tem quase nenhuma lógica (apenas as responsáveis pela apresentação em si, nada de lógica de negócio).
Na camada control, você tem o gerenciamento de todas as ações, sejam elas requisitadas pela camada view sentido à model ou da model sentido view.
Na camada model você tem as lógicas de persistência, resumidamente falando.

Desta forma, a responsabilidade de chamar eventos e ações é do controller, que terá um objeto do tipo Usuario e nele irá manter o id e login. Este objeto será colocado na sessão, após validar login e senha.

Como diria o Pasquale, é isso.

leandronsp

acho você iria fazer algo do tipo no controller:

User user = new User(login, password);
if (user.validLogin()) {
  // Coloca o objeto user na sessao
  session.set("user", user);
} else {
  // Redireciona para o formulario com mensagem
}

– Edit –
Ou você pode criar um filtro, que intercepta a requisição e faz esse trabalho para o controller.

A

Muito obrigado drsmachado e leandronsp !
Acho que agora entendo um pouco mais sobre como funciona o MVC

A classe ficou assim

public class DoLogin implements Action {
	@Override
	public String doAction(HttpServletRequest req, HttpServletResponse resp) {
		String view = null;
		String login = req.getParameter("login");
		String senha = req.getParameter("senha");
		Usuario usuario = new UsuarioDAO().getByLogin(login, senha);
		
		if (usuario != null) {
			view = "index.jsp";
			req.setAttribute("usuario", usuario);
		} else {
			String error = "Usuario ou senha inválidos.";
			req.setAttribute("error", error);
			view = "login.jsp";
		}
		
		return view;
	}
}
Criado 9 de outubro de 2011
Ultima resposta 9 de out. de 2011
Respostas 5
Participantes 3