Oi Paulo!
Aqui está o código:
package br.com.alura.gerenciador.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Logout implements Tarefa {
@Override
public String executa(HttpServletRequest req, HttpServletResponse resp) {
req.getSession().removeAttribute("usuarioLogado");
return "/WEB-INF/paginas/logout.html";
}
}
A classe Controller:
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 = "/executa")
public class Controller extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String tarefa = req.getParameter("tarefa");
if (tarefa == null) {
throw new IllegalArgumentException("Voce nao passou a tarefa!");
}
tarefa = "br.com.alura.gerenciador.web." + tarefa;
try {
Class<?> nomeDaClasse = Class.forName(tarefa);
Tarefa instancia = (Tarefa) nomeDaClasse.newInstance();
String pagina = instancia.executa(req, resp);
RequestDispatcher dispatcher = req.getRequestDispatcher(pagina);
dispatcher.forward(req, resp);
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
throw new ServletException(e);
}
}
}
E a view index.jsp:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<h1>Bem vindo ao nosso gerenciador de empresas</h1><br/>
<c:if test="${not empty usuarioLogado }">
Logado como ${usuarioLogado.email}<br/>
</c:if>
<form action="executa?tarefa=NovaEmpresa" method="post">
Nome: <input type="text" name="nome"/><br/>
<input type="submit" value="Enviar"/>
</form>
<form action="login" method="POST">
Email:<input type="email" name="email"/>
Senha:<input type="password" name="senha"/>
<input type="submit" name="Login"/>
</form>
<form action="executa" method="POST">
<input type="hidden" name="tarefa" value="Logout" />
<input type="submit" value="Logout"/>
</form>
</body>
</html>
Acontece que o logout funciona antes de exexutar qualquer tarefa, isto é, que seja a primeira tarefa antes de qualquer outra logo após acessar a uri: http://localhost:8082/gerenciador. Basta executar, antes ou depois , qualquer outra tarefa, seja ela buscaEmpresa, novaEpresa ou login, o logout já não executa mais, aliás, não só o logout não executa, mas qualquer outra tafefa anteriormente mencionada não executa, mostrando o mesmo erro mencionado anteriormente.