Amigos boa tarde! Sou iniciante em java, estou estudando a apostila fj21 da caelum. No exercício 9.8, quando acesso o form altera-contato.jsp para alterar o contato no banco, e clico em enviar a seguinte exceção é lançada no console:
SEVERE: Servlet.service() for servlet [controlador] in context with path [/fj21-agenda] threw exception [A lógica de negócios causou uma exceção] with root cause
java.lang.ClassNotFoundException: br.com.caelum.mvc.logica.AlteraContatoLogic
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at br.com.caelum.mvc.servlet.ControllerServlet.service(ControllerServlet.java:22)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Segue a interface e as servlets, conforme o exemplo da apostila:
Logica:
package br.com.caelum.mvc.logica;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface Logica {
void executa(HttpServletRequest req, HttpServletResponse res) throws Exception;
}
ControllerServlet:
package br.com.caelum.mvc.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.caelum.mvc.logica.Logica;
public class ControllerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
super.service(request, response);
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);
}
}
}
AlteraContatoLogic:
package br.com.caelum.mvc.logica;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.caelum.jdbc.dao.ContatoDAO;
import br.com.caelum.jdbc.modelo.Contato;
public class AlteraContatoLogic implements Logica {
@Override
public void executa(HttpServletRequest request, HttpServletResponse response)
throws Exception {
Contato contato = new Contato();
long id = Long.parseLong(request.getParameter("id"));
contato.setId(id);
contato.setNome(request.getParameter("nome"));
contato.setEndereco(request.getParameter("endereco"));
contato.setEmail(request.getParameter("email"));
//Converte a data de String para Calendar
String dataEmTexto = request.getParameter("dataNascimento");
Date date = new SimpleDateFormat("dd//MM/yyyy").parse(dataEmTexto);
Calendar dataNascimento = Calendar.getInstance();
dataNascimento.setTime(date);
contato.setDataNascimento(dataNascimento);
ContatoDAO dao = new ContatoDAO();
dao.altera(contato);
RequestDispatcher rd = request.getRequestDispatcher("/lista-contatos-elegante.jsp");
rd.forward(request, response);
System.out.println("Alterando contato ..." + contato.getNome());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
}
}
altera-contato.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib tagdir="/WEB-INF/tags" prefix="caelum" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<c:import url="cabecalho.jsp" />
Formulário para a alteração de contatos:<br/>
<form action="mvc" method="POST">
Id: <input type="text" name="id"/><br/>
Nome: <input type="text" name="nome"/><br/>
E-mail: <input type="text" name="email"/><br/>
Endereço: <input type="text" name="endereco"/><br/>
Data de Nascimento: <caelum:campoData id="dataNascimento" />
<input type="hidden" name="logica" value="AlteraContatoLogic"/>
<input type="submit" value="Enviar"/>
</form>
<c:import url="rodape.jsp" />
Mapeamento no xml:
<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>
Podem me ajudar a entender porque mesmo com minha servlet mapeada, esta exceção está sendo lançada? Daí eu poderei corrigir o exercício.
Muito Obrigado!
[]´s
