Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Class Login - Servlets Cap 12

Olá, Nesse meu método executa da Class Login, eu direciono o cliente para "login.jsp" quando as regras que eu proponho são seguidas e "login-fail.jsp" quando não são. Só fiz isso, porque não consegui fazer exatamente o que eu queria que era repetir a tela de login com mensagens diferentes. Gostaria de saber se esta é uma boa prática ou se seria melhor alterar a mensagem na tela de login? Obrigado.

Class Login =======================================

package br.com.alura.gerenciador.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import br.com.alura.gerenciador.Usuario;
import br.com.alura.gerenciador.dao.UsuarioDAO;

public class Login implements Tarefa{

    @Override
    public String executa(HttpServletRequest req, 
            HttpServletResponse resp) {


        String email = req.getParameter("email"); 
        String senha = req.getParameter("senha");

        Usuario usuario = new UsuarioDAO().buscaPorEmailESenha(email, senha);

        if(usuario == null) {
            return "/WEB-INF/paginas/login-fail.jsp";

        } else {
            HttpSession session = req.getSession();
            session.setAttribute("usuarioLogado", usuario);
            System.out.println("<html><body>Usuário logado: " + email
                    + "</body></html>");
            return "/WEB-INF/paginas/login.jsp";
        }

    }

}

Página Index ==============================

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<html>
<head>
<meta charset="UTF-8">
</head>
<body>
    Bem vindo ao nosso gerenciador de empresas!
    <br />
    <c:if test="${not empty usuarioLogado}">
        Você está logado como ${usuarioLogado.email}<br />
    </c:if>
    <br />
    <form action="FazTudo?tarefa=NovaEmpresa" method="post">
        Nome: <input type="text" name="nome" /><br /> <input type="submit"
            value="Enviar" />
    </form>

    Faça o seu login:
    <br />
    <form action="FazTudo?tarefa=Login" method="post">
        Email: <input type="text" name="email" /><br /> Senha: <input
            type="password" name="senha" /><br /> <input type="submit"
            value="Login" />
    </form>

    <form action="FazTudo?tarefa=Logout" method="post">
        <input type="submit" value="Logout" />
    </form>
</body>
</html>

Class FazTudo =================================

package br.com.alura.gerenciador.web;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = "/FazTudo")
public class FazTudo extends HttpServlet{
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) 
            throws ServletException, IOException {
        String tarefa = req.getParameter("tarefa");
        if(tarefa == null) {
            throw new IllegalArgumentException("Você esqueceu de passar a tarefa");
        }
        String nomeDaClasse = "br.com.alura.gerenciador.web." + tarefa;

        try {
        Class<?> tipo = Class.forName(nomeDaClasse);
        Tarefa instancia = (Tarefa) tipo.newInstance();
        String pagina = instancia.executa(req, resp);

        RequestDispatcher requestDispatcher = req
                .getRequestDispatcher(pagina);
        requestDispatcher.forward(req, resp);

        } catch (Exception e) {
            throw new ServletException(e);
        }
    }
}
2 respostas

O ideal, na minha opinião, é mandar a mensagem para a página login.

Uma das formas que pode ser feita é assim: /WEB-INF/paginas/login.jsp?msg=sucesso /WEB-INF/paginas/login.jsp?msg=erro

Depois na página login o parâmetro msg pode ser verificado e exibido.

Mas, se a mensagem for muito grande, há outra maneira: enviar a mensagem com a resposta (req) e recuperar na página de login.

solução!

Um exemplo prático.

NO SERVLET vc faz assim: String txt = "Logado com sucesso!"; getServletContext().setAttribute("mensagem", txt);

NO JSP vc faz assim para recuperar: String recTxt = application.getAttribute("mensagem");

É uma forma que deve funcionar.