Ao tentar migrar para a nova versão do BuscaEmpresa utilizando o servlet genérico FazTudo estou recebendo esta mensagem no console e a aplicação não sobe.
Ao tentar migrar para a nova versão do BuscaEmpresa utilizando o servlet genérico FazTudo estou recebendo esta mensagem no console e a aplicação não sobe.
E aí, Arthur! Beleza, cara? =)
Parece que está faltando você implementar a interface Servlet
... Mas toma cuidado, pois estamos estendendo de HttpServlet
... De qualquer forma, está havendo um problema de implementação/herança aí no meio...
Você poderia postar seus códigos aqui para darmos uma olhada, por favor? Acredito que o erro possa estar na classe FazTudo
ou na BuscaEmpresa
. =)
Fábio
Obrigado pela a ajuda.
Segue abaixo:
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");
tarefa = "br.com.alura.gerenciador.web." + tarefa;
try {
Class<?> tipo = Class.forName(tarefa);
Tarefa instancia = (Tarefa) tipo.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);
}
}
}
package br.com.alura.gerenciador.web;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
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.Empresa;
import br.com.alura.gerenciador.dao.EmpresaDAO;
@WebServlet(urlPatterns = "/busca")
public class BuscaEmpresa implements Tarefa {
public BuscaEmpresa() {
System.out.println("Instanciando uma Servlet do tipo BuscaEmpresa "
+ this);
}
@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");
}
}
package br.com.alura.gerenciador.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface Tarefa {
String executa (HttpServletRequest req, HttpServletResponse resp);
}
Arthur,
Sem problemas, cara!
Me parece que você colocou uma anotação a mais no seu código... A classe BuscaEmpresa
não é uma Servlet
, mas uma classe de lógica, tanto que implementa a interface Tarefa
. Sendo assim, não precisa da annotation @WebServlet
sobre ela, sacou?
Como estamos usando o MVC agora, com a ideia de Servlet
única, somente a FazTudo
deve ter essa anotação. =)
Conseguiu enxergar? =)
Espero ter ajudado, mas qualquer dúvida não deixe de postar por aqui para que possamos ajudá-lo! =)
Abraço e bons estudos,
Fábio
Muito obrigado, Fabio.
De fato :p
Resolveu na hora.