Não consigo ver os meus .jar no projeto web

Acompanhando a apostila FJ21, comecei a fzer os exercícios. O 1º Exercício é o JDBC. Criei um projeto chamado jdbc(Java SE) e em properties >> build path eu adicionei o .jar do MySql Connector. Sempre que eu abro o projeto, eu o vejo lá, o meu .jar na raiz do projeto. Seguindo a linha de exercícios, criei o FJ21-Agenda(Não mudei nada da apostila, nem o nome) e adicionei o Connector do Mysql e contrário do jdbc, eu não vejo ele lá na raiz e nem em lugar nenhum, mas ele está instalado, pois quando eu abro o Build Path e na aba > Libraries, eu o vejo lá, mas no projeto eu não o vejo. Eu estou tento um erro ao gravar uma informação. Esse é o erro:

[code]HTTP Status 500 -


type Exception report

message

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.jdbc.connectionFactory.getConnection(connectionFactory.java:11)
br.com.DAO.ContatoDAO.<init>(ContatoDAO.java:16)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:68)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
java.sql.DriverManager.getConnection(Unknown Source)
java.sql.DriverManager.getConnection(Unknown Source)
br.com.jdbc.connectionFactory.getConnection(connectionFactory.java:9)
br.com.DAO.ContatoDAO.<init>(ContatoDAO.java:16)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:68)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.29 logs.


Apache Tomcat/6.0.29[/code]
Meu servlet

[code]package br.com.caelum.agenda.servlet;

import java.io.IOException;
import java.io.PrintWriter;
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 br.com.DAO.ContatoDAO;
import br.com.Modelo.Contato;

import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;

/**

  • Servlet implementation class AdicionaContatoServlet
    */
    public class AdicionaContatoServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**

    • @see HttpServlet#HttpServlet()
      */
      public AdicionaContatoServlet() {
      super();
      // TODO Auto-generated constructor stub
      }

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

     PrintWriter out = response.getWriter();
     
      //buscando os parâmetros no request
      String nome = request.getParameter("nome");
      String endereco = request.getParameter("endereco");
      String email = request.getParameter("email");
      String dataEmTexto = request.getParameter("dataNascimento");
      Calendar dataNascimento = null;
     
      //fazendo a conversão da data
      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");
     	 return; //para a execução do método
      } catch (java.text.ParseException e) {
     	// TODO Auto-generated catch block
     	e.printStackTrace();
     }
     
      //monta um objeto contato
      Contato contato = new Contato();
      contato.setNome(nome);
      contato.setEndereco(endereco);
      contato.setEmail(email);
      contato.setDataNascimento(dataNascimento);
     
      //salva o contato
      ContatoDAO dao = new ContatoDAO();
      dao.adiciona(contato);
     
      //imprime o nome do contato que foi adicionado
     
      out.println("&lt;html&gt;");
      out.println("&lt;body&gt;");
      out.println("Contato " + contato.getNome() + " adicionado com sucesso");
      out.println("&lt;/body&gt;");
      out.println("&lt;/html&gt;");
    

    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    }

    /**

    • @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
      */
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // TODO Auto-generated method stub
      }

}[/code]

verifica se está dentro da WebAppLibraries e dentro da pasta lib do projeto.

Está dentro de Libraries.
Assim diz a apostila:

a) Clique no seu projeto, pressione F5 para executar um Refresh. b) Selecione o seu driver do MySQL, clique da direita e escolha Build Path, Add to Build Path:
Mas não consigo obter o Add to Build Path. Como eu faço isso? Eu faço assim:

Clico com direito no Projeto e depois um Build Path. A opção Add to Build Path não tem. Ele diz para eu selecionar primeiro o Driver, mas como se eu ainda vou instalar?

vc esta na “view” navigator ou package explorer?

att,

Eu estou no Project Explorer. Qual é a Navigator? Minha perspectiva é JavaEE

q estranho, mesmo na perspectiva JEE, na "tree view" Project Explorer aparece os jars:

e se vc acessar as propriedades do projeto(botão direito Properties -> "Java Build Path" -> "Add Jars")…

os jars aparecem???

att,


Vai no Build Path > Configure Build Path, vai abrir uma janela, tem uma aba libraries e tem um botão lá Add Jars :smiley:

Isso eu já fiz, tanto em Add Jars quanto em Add External Jars. Não funfa. Se tivesse como enviar uma imagem, eu enviaria os meus project explorer e aí vcs veriam como estão.

se quiser me envia o projeto por email.

email esse do perfil aqui no guj.

att,

Posso sim te enviar por email, mas gostaria que a resposta viesse via Forum, para não quebrar nenhuma ética do forum, pode ser?

Joga dentro da pasta lib dentro do WebContent - >WEB-INF -> lib , que resolve.

Se não resolver o erro é outro.

Isso eu já fiz e não resolveu. Pode ser que o erro seja outro, mas a mensagem que dá é do erro Http Error 500 - No suitable…blá blá blá blá. Então, esse tipo de erro pelo que eu pesquisei na net e outros meios, todos dizem que ele é referente a não achar o driver do mysql e etc,etc,etc,etc. Não há nada mais a fazer, não sei o que fazer, Sempre apanho com a configuração do meu ambiente. Uso Helios, MySql 5. Mais uma pergunta. Preciso instalar uns jars de JSTL e não consigo baixar pelo endereço q tenho. Sabe onde eu os encontro: jstl-imp, jstl-api e etc… Baixei uns, mas com extensão:
.iml,.ipr,.iws e nenhum com extensão .jar.

Bom se você já fez isso tudo, você está colocando o driver errado ou seja incompatível com seu banco de dados verifica o nome e a versão do teu banco de dados e pega outro driver na internet.
boa sorte.

Cara, esse mesmo drivar funciona em outro projeto na mesma IDE, como eu falei no início do post. Com Java SE funciona e com WEB não, mas o driver é o mesmo. Veja o erro

[code]HTTP Status 500 -


type Exception report

message

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.jdbc.connectionFactory.getConnection(connectionFactory.java:11)
br.com.DAO.ContatoDAO.<init>(ContatoDAO.java:16)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:68)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
java.sql.DriverManager.getConnection(Unknown Source)
java.sql.DriverManager.getConnection(Unknown Source)
br.com.jdbc.connectionFactory.getConnection(connectionFactory.java:9)
br.com.DAO.ContatoDAO.<init>(ContatoDAO.java:16)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:68)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.29 logs.


Apache Tomcat/6.0.29[/code]

e vc usa esse mesma classe de conexão?

posta a : connectionFactory

vc esta “setando” o class for name?

att,

posta a tua classe br.com.jdbc.connectionFactory, o nome do seu banco é fj21 tem certeza?

Esta é minha classe Factory

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

import java.sql.*;

public class connectionFactory {
public Connection getConnection() {
System.out.println(“Conectando ao banco”);
try {
return DriverManager.getConnection(“jdbc:mysql://localhost/fj21”, “root”, “s123”);
} catch(SQLException e) {
throw new RuntimeException(e);
}

}

}[/quote]
E a minha classe ContatoDAO

[code]package br.com.DAO;

import java.sql.Connection;
import java.sql.Date;
import java.sql.SQLException;
import br.com.Modelo.Contato;
import com.mysql.jdbc.PreparedStatement;
import br.com.jdbc.*;

public class ContatoDAO {

 // a conexão com o banco de dados
 private Connection connection;

 public ContatoDAO() {
	 this.connection = new connectionFactory().getConnection();
 }

 public void adiciona(Contato contato) {
	 String sql = "insert into contatos (nome,email,endereco,dataNascimento) values (?,?,?,?)";

 try {
 // prepared statement para inserção
	 PreparedStatement stmt = (PreparedStatement) connection.prepareStatement(sql);
// seta os valores
	 stmt.setString(1,contato.getNome());
	 stmt.setString(2,contato.getEmail());
	 stmt.setString(3,contato.getEndereco());
	 stmt.setDate(4, new Date( contato.getDataNascimento().getTimeInMillis() ));

 // executa
	 stmt.execute();
	 stmt.close();
 } catch (SQLException e) {
	 throw new RuntimeException(e);
 	}
 }

}[/code]

adicione isso ao seu class Factory:

Class.forName("com.mysql.jdbc.Driver");

dentro do try.

att,

Está dando esse erro, quando eu adicionei dentro do meu Try:

Unhandled exception type ClassNotFoundException

Assim ficou meu factory:

[code]package br.com.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 {
Class.forName(“com.mysql.jdbc.Driver”);
return DriverManager.getConnection(“jdbc:mysql://localhost/fj21”, “root”, “simbad”);
} catch(SQLException e) {
throw new RuntimeException(e);
}

}

}[/code]

voce esta sem a lib. A lib no mysql varia de acordo com a Versao do banco. Você ve qual é a sua versão do banco e procura no google o seu .jar . nao adianta usar o jar do curso a não ser que o seu mysql seja identico ao deles, que eu acho dificil.