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

Servlet br.com.alura.gerenciador.web.Busca Empresa of type class br.com.alura.gerenciador.web.BuscaEmpresa does not implement javax.servlet.Servlet

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.

4 respostas

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);

}
solução!

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.