Problema com implementação de exemplo Caelum FJ21 [RESOLVIDO]

4 respostas
douglasmorais

Ola Amigos…

Estou tentando implementar um exemplo da Apostila FJ21 da Caelum e estou tomando um pau danado. Esta dando um erro que eu nao

consigo sanar.

Tenho o seguinte Controller:

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

O ControllerServlet ta mapeado assim no web.xml:

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

O codigo da Interface Logica.java é:

public interface Logica {
		void executa(HttpServletRequest req, HttpServletResponse res) throws Exception;
		

}

e a implementação da PrimeiraLogica.java é:

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

O erro acontece quando tento acessar a apartir de http://localhost:8080/fj21-agenda/mvc?logica=PrimeiraLogica.

O erro que aparece no console é:

07/01/2011 21:22:28 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet ControllerServlet threw exception
java.lang.ClassNotFoundException: br.com.caelum.mvc.logica.PrimeiraLogica
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:169)
	at br.com.caelum.mvc.ControllerServlet.service(ControllerServlet.java:25)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Thread.java:619)

Nao tenho muita experiencia por isso nao consigo enxergar oque esta errado.

4 Respostas

getAdicted

Olá,

Você está recebendo a seguinte exception:

java.lang.ClassNotFoundException: br.com.caelum.mvc.logica.PrimeiraLogica

Olhe com calma o mapeamento da Servlet do seu projeto no web.xml:

Por exemplo, meu projeto possui um pacote chamado servlet, que por sua vez possui uma classe chamada ControllerServlet, portanto, o mapeamento ficará da seguinte forma:

web.xml:

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

[]'s

sergiolopes

Sua classe PrimeiraLogica não está no pacote br.com.caelum.mvc.logica

Josemar_Jobs

a classe PrimeiraLogica tem que estar no pacote ‘br.com.caelum.mvc.logica’

douglasmorais

Agradeço aos amigos.

Esse foi um típico problema do procedimento complexo “copiar e colar”.

É incrível como essas merdinhas tem o poder de me tirar do sério… daí não enxergo mais nada. Nem copiar e colar direito eu consigo.

Mas se não fosse vocês eu estaria batendo a cabeça na parede até agora.

Aproveitando mais um pouquinho da boa vontade dos amigos, só mais uma questão.

Ainda seguindo os exercícios da apostila FJ21, eu fiz uma pagina para o erro 404. Mapeei no web.xml e tava funcionando. Mas a partir de certo momento parou de funcionar e eu não consigo perceber oque eu fiz de errado. Agora quando digito uma pagina que não existo nao aparece mais minha 404.html e sim a mensagem padrao do IE.

no web.xml tá assim:

<error-page>
    <error-code>404</error-code>
    <location>/404.html</location>
  </error-page>
Criado 7 de janeiro de 2011
Ultima resposta 8 de jan. de 2011
Respostas 4
Participantes 4