O que está em jogo são 3 classes e uma página: a Controller2 que é o controlador, BuscaEmpresas que faz a negociação, a interface Tarefa2 e a págida buscaEmpresa.jsp que é o view. Seguem as classes:
@WebServlet(urlPatterns = "/executa2")
public class Controller2 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!");
}
tarefa = "br.com.alura.gerenciador.web." + tarefa;
try {
Class<?> type = Class.forName(tarefa);
Tarefa2 instancia = (Tarefa2) type.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);
}
}
}
-------------------------------------------------------------------
public class BuscaEmpresas implements Tarefa2 {
@Override
public String executa(HttpServletRequest req, HttpServletResponse resp) {
String filtro = req.getParameter("filtro");
Collection<Empresa> empresas = new EmpresaDAO().buscaPorSimilaridade(filtro);
req.setAttribute("empresas", empresas);
return "/WEB-INF/Paginas/buscaEmpresa.jsp";
}
}
------------------------------------------------------------------
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html><head><title>Busca </title></head>
<body>
RESULTADO DA BUSCA: <br/>
<ul>
<c:forEach var="empresa" items="${empresas } ">
<li>${Empresa.id }: ${Empresa.nome }</li>
</c:forEach>
</ul>
</body></html>
---------------------------------------------------------------------
public interface Tarefa2 {
String executa(HttpServletRequest req, HttpServletResponse resp);
}