Erro no mvc exercicio FJ-21 [RESOLVIDO]

Pessoal sou novo em java e to lendo a apostila FJ-21 da Caelum e fazndo a parte de MVC, mas da dando uma erro aqi,
eu n importei nenhum .jar n sei se precisa!!!

eu n sei no q eu to errando já procurei na net e nda!!!lah vai

public interface Logica {
   void executa(HttpServletRequest req, HttpServletResponse res) throws Exception;
}
public class PrimeiraLogica implements Logica {
    public void executa(HttpServletRequest req, HttpServletResponse res) throws Exception {
            System.out.println("Executando a logica e redirecionando...");

            RequestDispatcher rd = req.getRequestDispatcher("/primeira-logica.jsp");
            rd.forward(req, res);
}
}
public class ControllerServlet extends HttpServlet {
    protected void service(HttpServletRequest request, HttpServletResponse response)
                              throws ServletException, IOException {

          String parametro = request.getParameter("logica");
          String nomeDaClasse = "br.com.caelum.mvc.logica." + parametro;

          try {
                Class classe = Class.forName(nomeDaClasse);

                Logica logica = (Logica) classe.newInstance();
                logica.executa(request, response);

          } catch (Exception e) {
                throw new ServletException("A lógica de negócios causou uma exceção", e);
          }
     }
}

e minha servlet ta assim

<servlet>
      <servlet-name>controlador</servlet-name>
      <servlet-class>br.com.caelum.mvc.servlet.ControllerServlet</servlet-class>
</servlet>
<servlet-mapping>
     <servlet-name>controlador</servlet-name>
     <url-pattern>/mvc</url-pattern>
</servlet-mapping>

e esta me apresentando o seguinte erro.

SEVERE: Servlet.service() for servlet controlador threw exception
java.lang.ClassNotFoundException: br.com.caelum.mvc.logicaPrimeiraLogica

Se alguem souber da uma maozinha ai!!!

ClassNotFoundException - sua classe não foi encontrada. O erro está aqui:

String parametro = request.getParameter("logica"); String nomeDaClasse = "br.com.caelum.mvc.logica." + parametro;

Ou você está passando a string errada no seu parametro, ou algo de errado está acontecendo com a variável nomeDaClasse.

Você pode dar dois System.out.println no seu console, um com passando sua variável parametro, o outro com passando a variável nomeDaClasse, pra ver o que está havendo.

Vê o que aparece no seu console e posta aí, não consegui enxergar nada além disso.

edit: Checa também se sua classe PrimeiraLogica está no pacote br.com.caelum.mvc.logica

Existe a classe logicaPrimeiraLogica na sua aplicação?

Existe a classe PrimeiraLogica!!!

public class ControllerServlet extends HttpServlet {
    protected void service(HttpServletRequest request, HttpServletResponse response)
                              throws ServletException, IOException {

          String parametro = request.getParameter("logica");
          System.out.println(parametro);  //-So para ver o valor do request
          String nomeDaClasse = "br.com.caelum.mvc.logica." + parametro;
          System.out.println(nomeDaClasse);     //-So para ver o concatenado, aparenta estar perdendo o .

          try {
                Class classe = Class.forName(nomeDaClasse);

                Logica logica = (Logica) classe.newInstance();
                logica.executa(request, response);

          } catch (Exception e) {
                throw new ServletException("A lógica de negócios causou uma exceção", e);
          }
     }
}

Cara, vc esta procurando uma classe chamada br.com.caelum.mvc.logicaPrimeiraLogica mas que na verdade é br.com.caelum.mvc.PrimeiraLogica

Na realidade como ele não postou o pacote, não tem como saber. Eu vi o exercício na apostila do FJ-21 e ele está fazendo corretamente.

Sugiro que ele faça os prints, como eu falei e o como o leulseixas demonstrou, porque aparentemente algo está acontecendo na concatenação dessa string, como foi falado anteriormente.

Então isso pode ser um dos erros ele referenciando um pacote errado, so que parece que no momento que ele concatena acontece alguma coisa que o . some no resultado da concatenação

Conforme a Bianca comentou,o passo a passo do exercicio leva a criar dentro daquele pacote mesmo, agora é descobrir o que esta trazendo no parametro ou o que esta acontecendo na concatenação

Bianca Rosa e leulseixas

Eu dei imprimir as variaveis que vcs me pediram

parametro = PrimeiraLogica
nomeDaClasse = br.com.caelum.mvc.logicaPrimeiraLogica

Bianca

sim a minha classe PrimeiraLogica esta no pacote br.com.caelum.mvc.logica

eu não sei o que estou fazendo de errado! fiz igual o da apostila.

[quote=manoel adnan]Bianca Rosa e leulseixas

Eu dei imprimir as variaveis que vcs me pediram

parametro = PrimeiraLogica
nomeDaClasse = br.com.caelum.mvc.logicaPrimeiraLogica

Bianca

sim a minha classe PrimeiraLogica esta no pacote br.com.caelum.mvc.logica

eu não sei o que estou fazendo de errado! fiz igual o da apostila.

[/quote]

Cara o engraçado que esta perdendo o . no momento da concatenação
Faz assim so para testar novamente


public class ControllerServlet extends HttpServlet {   
    protected void service(HttpServletRequest request, HttpServletResponse response)   
                              throws ServletException, IOException {   
  
          String parametro = request.getParameter("logica");   
          System.out.println(parametro);  //-So para ver o valor do request   
          String nomeDaClasse = "br.com.caelum.mvc.logica.";
          System.out.println(nomeDaClasse);  //- apenas para testar 
          nomeDaClasse+= parametro;        
          System.out.println(nomeDaClasse);     //-So para ver o concatenado, aparenta estar perdendo o .   
  
          try {   
                Class classe = Class.forName(nomeDaClasse);   
  
                Logica logica = (Logica) classe.newInstance();   
                logica.executa(request, response);   
  
          } catch (Exception e) {   
                throw new ServletException("A lógica de negócios causou uma exceção", e);   
          }   
     }   
}  

leulseixas

Assim deu certo cara, vlw

mas agora eu n entendi pk esta perdendo o ponto!!!

Também não vejo nada errado no seu código.

Algo de errado não está certo, entretanto hahaha

Vc pode ver que quando ele concatena, ele come um ponto aí na sua string. Fiz testes aqui e isso não aconteceu… Então voltamos a estaca zero, porque não sei porque isso acontece.

Compila de novo, roda de novo… Tenta colocar mais um ponto ali, joga o request.getParameter(“logica”) direto na concatenação, sem usar a a variável parametro… Vai fazendo os testes. Ele sempre vai mostrar o nome da classe que ele procura no ClassNotFoundException, ele tá dando esse erro porque ele tá procurando a classe br.com.caelum.mvc.logicaPrimeiraLogica, e ela não existe.

[quote=manoel adnan]leulseixas

Assim deu certo cara, vlw

mas agora eu n entendi pk esta perdendo o ponto!!![/quote]

Ah de verdade tbm nem faço ideia era para funcionar daquele jeito, mais que bom que deu certo

PARABENS!!!

Uma dica legal é pegar para debugar isso, eu e a Bianca estavamos usando seus prints para servir de debug para termos uma ideia do que poderia estar acontecendo.
Qualquer duvida da uma olhada na FJ-11 no final da apostila tem uma cap. que fala de debug.

FLW

leulseixas e Bianca Rosa

Vlw vcs me ajudaram muito, eu to lendo a apostila, vo da uma olhada nessa parte de debug
e ver o q pode ta acontecendo, qualquer duvida eu volto a postar aqui!!!

Obrigado galera!!!

O manoel adnan que bom que deu certo
Bom estudo,