Não ficou muito claro em que momento é criado um novo request, para maior entendimento da minha dúvida, observe o fluxo abaixo
Controlador<<<<<
package br.com.alura.gerenciador.servlet;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
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;
import br.com.alura.gerenciador.acao.Acao;
@WebServlet("/entrada")
public class UnicaEntradaServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String paramAcao = request.getParameter("acao");
String nomeDaClasse = "br.com.alura.gerenciador.acao." + paramAcao;
String nome;
try {
Class classe = Class.forName(nomeDaClasse);//carrega a classe com o nome
Constructor<?> construtorPadrao = classe.getConstructor();
Object acao =construtorPadrao.newInstance();
nome = ((Acao) acao).executa(request,response);
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
throw new ServletException(e);
}
String[] tipoEEndereco = nome.split(":");
if(tipoEEndereco[0].equals("forward")) {
RequestDispatcher rd = request.getRequestDispatcher("WEB-INF/view/" + tipoEEndereco[1]);
rd.forward(request, response);
} else {
response.sendRedirect(tipoEEndereco[1]);
}
}
}
1- Acessamos : http://localhost:8080/gerenciador/entrada?acao=loginForm , e preenchemos os dados
package br.com.alura.gerenciador.acao;
import java.io.IOException;
import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class loginForm implements Acao {
@Override
public String executa(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
return "forward:formLogin.jsp";
}
} 2-depois através do nosso controlador , somos redirecionados para o formlogin.jsp:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:url value="/entrada" var="linkEntradaServlet"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="${linkEntradaServlet }" method="post">
login: <input type="text" name="login" />
senha: <input type="password" name="senha" />
<input type="hidden" name="acao" value="Login">
<input type="submit" />
</form>
</body>
</html>
3- depois digitamos usuário e senha, voltamos para nosso controlador e somos direcionados para classe login: package br.com.alura.gerenciador.acao;
import java.io.IOException; import java.util.Optional;
import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;
import br.com.alura.gerenciador.modelo.Banco; import br.com.alura.gerenciador.modelo.Usuario;
public class Login implements Acao{
@Override
public String executa(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String login = request.getParameter("Login");
String senha = request.getParameter("senha");
System.out.println("Logando " + login);
Banco banco = new Banco();
Usuario usuario = banco.existeUsuario(login,senha);
if(usuario !=null) {
System.out.println("Usuario existe");
HttpSession sessao = request.getSession();
sessao.setAttribute("usuarioLogado", usuario);
request.setAttribute("usuarioLogado", usuario);
}
return "redirect:entrada?acao=ListaEmpresas";
}
}
Eu não entendi por que o meu request.setAtribute é perdido quando sou redirecionado para ListaEmpresas , como solução vinculamos o atributo a session. Não ficou muito claro em que momento novas "requests" estão sendo criadas, alguem consegue mapear, pra mim nos passos que citei?