1
resposta

[Dúvida] ClassNotFoundException

Opa, estou preso nessa exception quando tento acessar a minha lista de empresas. Não sei o que pode ser, já tentei fazer de outras maneiras mas sempre caio nessa exception. Detalhe: Todas as ações estão implementando a interface ação e todas estão no package certo. Aqui vai o código do único servlet:

@WebServlet("/entrada")
public class EntradaUnicaServlet 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.douglas.gerenciador.acao." + paramAcao;

        String nome;
        try {
            Class classe = Class.forName(nomeDaClasse); 
            Acao acao = (Acao) classe.newInstance(); 
            nome = acao.executar(request, response);
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException 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 resposta

Olá Douglas!

A exceção ClassNotFoundException é lançada quando a classe que você está tentando carregar não pode ser encontrada pelo ClassLoader. Isso pode acontecer por diversos motivos, como por exemplo o nome da classe estar incorreto, a classe não estar no classpath ou a classe não ter sido compilada corretamente.

No seu caso, verifique se o nomeDaClasse está sendo construído corretamente e se a classe que você está tentando carregar realmente existe no pacote br.com.douglas.gerenciador.acao. Nesse caso eu colocaria para printar o campo nomeDaClasse antes de entrar no try para voce ver como está tentando buscar e validar se esta certo ou não.

Espero ter ajudado e bons estudos!