[RESOLVIDO] Problemas com servlet e conexão jdbc

Boa noite colegas.
Estou fazendo alguns exercícios de conexão ao banco de dados através de servlets seguindo a orientação da apostila fj21 da caelum. Só que quando clico em gravar dá erro 500.

Fiz o seguinte:
1-Estou usando netbeans e copiei o driver mysql-connector 5.1.25 para uma pasta lib, no projeto adicionei o jar a biblioteca.
2-Na guia de serviços do projeto configurei conforme o tutorial http://www.youtube.com/watch?v=ItklwiIo0GI só que para mysql.

Quando uso uma classe de teste com método main funciona normalmente só que quando preencho as informações para o formulário e mando para a servlet acontece o erro mencionado.

Minha servlet é uma classe que extende httpservlet:

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package br.com.caelum.agenda.servlet;

import br.com.caelum.jdbc.dao.ContatoDAO;
import br.com.caelum.jdbc.modelo.Contato;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
*

  • @author 18122012
    */
    public class AdicionaContatoServlet extends HttpServlet {

    /**
    *

    • @param request

    • @param response

    • @throws ServletException

    • @throws IOException
      */
      @Override
      protected void service(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      PrintWriter out = response.getWriter();
      String nome = request.getParameter(“nome”);
      String endereco = request.getParameter(“endereco”);
      String email = request.getParameter(“email”);
      String dataEmTexto = request.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 de conversão da data”);
      }

      Contato contato = new Contato();
      contato.setNome(nome);
      contato.setEndereco(endereco);
      contato.setEmail(email);
      contato.setDataNascimento(dataNascimento);

      ContatoDAO dao = new ContatoDAO();
      dao.adiciona(contato);

      out.println("<html>");
      out.println("<body>");
      out.println(“Contato " + contato.getNome() + " adicionado com sucesso”);
      out.println("</body>");
      out.println("</html>");
      }
      }[/code]
      Está representa a fábrica de conexões:

[code]package br.com.caelum.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionFactory {

public Connection getConnection() {
    System.out.println("Conectando ao banco");
    try {
        System.out.println("Banco conectado");
        // jdbc:mysql://ip/nome_do_banco, nome_do_usu&#65533;rio, senha_do_usu&#65533;rio
        return DriverManager.getConnection("jdbc:mysql://localhost/fj21", "root", "root");
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }
}

}[/code]
Minha página com os formulários

&lt;!-- To change this template, choose Tools | Templates and open the template in the editor. --&gt; &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;&lt;/title&gt; &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt; &lt;/head&gt; &lt;body&gt; &lt;form action="adicionaContato"&gt; Nome: &lt;input type="text" name="nome"/&gt;<br> E-mail: &lt;input type="text" name="email"/&gt;<br> Endereço: &lt;input type="text" name="endereco"/&gt;<br> Data Nascimento: &lt;input type="text" name="dataNascimento"/&gt;<br> &lt;input type="submit" value="Gravar"/&gt; &lt;/form&gt; &lt;/body&gt; &lt;/html&gt;

E as configurações do web.xml:

[code]<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version=“3.0”>
<servlet>
<servlet-name>AdicionaContato</servlet-name>
<servlet-class>br.com.caelum.agenda.servlet.AdicionaContatoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AdicionaContato</servlet-name>
<url-pattern>/adicionaContato</url-pattern>
</servlet-mapping>
</web-app>
[/code]

O web.xml está idêntico ao exercício inclusive todos os diretórios
O erro é o seguinte

[code]HTTP Status 500 - java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21

type Exception report

message java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21

description The server encountered an internal error that prevented it from fulfilling this request.

exception

java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:16)
br.com.caelum.jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:20)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:57)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

root cause

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
java.sql.DriverManager.getConnection(DriverManager.java:596)
java.sql.DriverManager.getConnection(DriverManager.java:215)
br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:14)
br.com.caelum.jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:20)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:57)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.34 logs.
Apache Tomcat/7.0.34[/code]

OBS: o banco jf21 está ativo no netbeans.
Não sei o que tentar afinal o erro foi do formulario que não chamou a servlet correta, a configuração do xml, a servlet que não pode ficar dentro de um diretório ou driver não encontrado o que não têm lógica se funciona com testes isolados.
Agradeço quem puder ajudar não sei mais o que fazer.

Tente colocar o driver do MySQL dentro do diretório /WEB-INF/lib

O netbeans cria a pasta lib fora da pasta WEB-INF.
obs: Já adicionei na biblioteca estou vendo na guia de projeto o mysql-connector junto do jdk e do apache tomcat.

Obrigado norbAns mas acabei por encontrar a resposta nesse link http://www.guj.com.br/java/261075-resolvido—tomcat–mysql—problema-com-integracao-no-suitable-driver-found
Faltava uma linha de código:

[code]package br.com.caelum.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionFactory {

public Connection getConnection() {
    System.out.println("Conectando ao banco");
    try {
        System.out.println("Banco conectado");
        DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        return DriverManager.getConnection("jdbc:mysql://localhost/fj21", "root", "root");
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }
}

}[/code]

adiciona na classe conexão
class.forname( com.mysql.jdbc.driver ) para ele encontrar o driver.

Lembrando que esse comando nao é obrigatório, mas caso nao esteja encontrando o driver que deve está adicionado na class lib dentro do web-inf poderá ajudar encontrar.

Obrigado Jardel.ads substituir DriverManager.registerDriver(new com.mysql.jdbc.Driver()); por Class.forName(“com.mysql.jdbc.Driver”); também funciona.