Servlet lanca excecao ao tentar salvar dados

ola pessoal tenhu um problema que tento resolver ha uma semana, mas ate o momento sem solucao, eu consigo gravar dados usando uma “classe teste” que chama o medoto “dao.adiciona” porem chamar este msm metodo em um servlet o sistema lanca uma excessao NotClassFound

este codigo retorna uma conexao

package br.com.caelum.jdbc;

import java.sql.*;

public class ConnectionFactory {
        
        public Connection getConnection() throws ClassNotFoundException{
            
            System.out.println("conectando ao banco");
            try{
            	Class.forName("com.mysql.jdbc.Driver");  
                return DriverManager.getConnection("jdbc:mysql://localhost/fj21","root","root");
            }
            catch (SQLException e){
                 throw new RuntimeException(e);
            }
    
        }
}

este é o codigo para setar as variaveis que serao salvas no banco

[code]package jdbc.modelo;

import java.util.Calendar;

public class Contato {

private long id;
private String nome;
private String email;
private String endereco;
private Calendar dataNascimento;


public long getId() {
	return id;
}
public void setId(long id) {
	this.id = id;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public String getEmail() {
	return email;
}
public void setEmail(String email) {
	this.email = email;
}
public String getEndereco() {
	return endereco;
}
public void setEndereco(String endereco) {
	this.endereco = endereco;
}
public Calendar getDataNascimento() {
	return dataNascimento;
}
public void setDataNascimento(Calendar dataNascimento) {
	this.dataNascimento = dataNascimento;
}

}
[/code]

[color=orange]este codigo é onde estao os metodos de acesso ao banco de dados[/color]

[code]package jdbc.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import jdbc.modelo.Contato;

import br.com.caelum.jdbc.ConnectionFactory;

public class ContatoDAO {
private Connection connection;

public ContatoDAO() throws ClassNotFoundException{
	this.connection=new ConnectionFactory().getConnection();
}

[color=orange]public void adiciona (Contato contato){[/color]
	String sql="insert into contatos (nome,email,endereco,dataNascimento) values (?,?,?,?)";
	try{
		PreparedStatement ps=connection.prepareStatement(sql);
		
		ps.setString(1, contato.getNome());
		ps.setString(2, contato.getEmail());
		ps.setString(3, contato.getEndereco());
		ps.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis() ));
		ps.execute();
		ps.close();
	}catch(SQLException e){
		throw new RuntimeException(e);
	}
}
public List<Contato> getLista(){
	try{
		List<Contato> contatos=new ArrayList<Contato>();
		PreparedStatement ps= this.connection.prepareStatement("select * from contatos");
		ResultSet rs=ps.executeQuery();
		
		while(rs.next()){
			Contato contato=new Contato();
			contato.setNome(rs.getString("nome"));
			contato.setEmail(rs.getString("email"));
			contato.setEndereco(rs.getString("endereco"));

			Calendar data=Calendar.getInstance();
			data.setTime(rs.getDate("dataNascimento"));
			contato.setDataNascimento(data);
			
			contatos.add(contato);
			}
		rs.close();
		ps.close();
		return contatos;
	}catch(SQLException e){
		throw new RuntimeException(e);
	}
}
public void altera(Contato contato){
	String sql=	"update contatos set nome=?, email=?, endereco=?, dataNascimento=? where id=?";
	try{
		PreparedStatement ps= connection.prepareStatement(sql);
		ps.setString(1, contato.getNome());
		ps.setString(2, contato.getEmail());
		ps.setString(3, contato.getEndereco());
		ps.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
		ps.setLong(5, contato.getId());
		
		ps.execute();
		ps.close();
	}catch(SQLException e){
		throw new RuntimeException(e);
	}
}
public void remove(Contato contato){
	String sql="delete from contatos where id=?";
	try{
		PreparedStatement ps=connection.prepareStatement(sql);
		ps.setLong(1, contato.getId());
		ps.execute();
		ps.close();
	}catch(SQLException e){
		throw new RuntimeException(e);
	}
}

}
[/code]

[color=red]este é o sevlet que esta setando as variaveis[/color]

[code]package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jdbc.dao.ContatoDAO;
import jdbc.modelo.Contato;

public class AddCttServlet extends HttpServlet{

protected void service(HttpServletRequest req, HttpServletResponse resp)
		throws ServletException, IOException {
	PrintWriter out=resp.getWriter();
	
	String nome=req.getParameter("nome");
	String email=req.getParameter("email");
	String endereco=req.getParameter("endereco");
	
	
	String dataEmTexto=req.getParameter("dataNascimento");
	Calendar dataNascimento=null;
	
	try{
		Date date=new SimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto);
		dataNascimento=Calendar.getInstance();
		dataNascimento.setTime(date);
	}catch(ParseException e){
		out.println("Erro na conversao da data");
		return;
	}
	
	Contato contato=new Contato();
	contato.setNome(nome);
	contato.setEmail(email);
	contato.setEndereco(endereco);
	contato.setDataNascimento(dataNascimento);
	
	System.out.println(contato.getNome()+" "+contato.getEmail()+" "+contato.getEndereco()+" "+contato.getDataNascimento()); // apenas para conferir se estava setando os dados
	
	
	ContatoDAO dao;
	try {
		dao = new ContatoDAO();
		[color=red]dao.adiciona(contato);[/color]
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
	out.println("<html>");
	out.println("<body>");
	out.println("Contato "+contato.getNome()+" adicionado com super sucesso");
	out.println("</body>");
	out.println("</html>");
}

}
[/code]

[color=red]ai aparece a excecao abaixo:[/color]

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526) at java.lang.ClassLoader.loadClassInternal(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:13) at jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:44) at servlet.AddCttServlet.service(AddCttServlet.java:53) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 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:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 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:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Unknown Source)

Amigo coloque o driver jdbc do MySQL em seu path.

eu ja adicionei o driver versao 5.1.14 e tentei tambem com a versao 5.0.4, e naum adiantou, eu consigo gravar dados no banco desde que nao seja pelo servlet :frowning:

seu driver está em WEB-INF/lib da sua app web?

sandokandias, era isso msm, o drive nao estava adicionado WEB-INF, agora deu certo, valeu :slight_smile: