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

24 respostas
P
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:
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
Meu servlet
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("<html>");
		 out.println("<body>");
		 out.println("Contato " + contato.getNome() + " adicionado com sucesso");
		 out.println("</body>");
		 out.println("</html>");
	}
	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
	}

}

24 Respostas

H

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

P

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?

pedruhenrik

vc esta na “view” navigator ou package explorer?

att,

P

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

pedruhenrik

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,


drigo.angelo

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

P

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.

pedruhenrik

se quiser me envia o projeto por email.

email esse do perfil aqui no guj.

att,

P

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

H

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

Se não resolver o erro é outro.

P

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.

H

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.

P

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

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
pedruhenrik

e vc usa esse mesma classe de conexão?

posta a : connectionFactory

vc esta “setando” o class for name?

att,

H

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

P

Esta é minha classe Factory

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); } } }
E a minha classe ContatoDAO
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);
	 	}
	 }
}
pedruhenrik

adicione isso ao seu class Factory:

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

dentro do try.

att,

P

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

Unhandled exception type ClassNotFoundException

Assim ficou meu factory:

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

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.

P

Hich, esse mesmo “projeto” tá funcionando aqui comigo, mas como JavaSE. As mesmas classes tudo tá funcionando, gravando e etc… Eu fui passar para WEB(As mesmas classes de conexão) e não está funcionando. Logo, os JAR’s do MySql que uso aqui são os mesmos(Funcionam). Só não entendo porque não funciona com um Web Dynamic Project, mas na perspectiva SE funciona(Java Project).

H

Você ja colocou sua .jar dentro da pasta Projeto -> WebContent -> WEB-INF -> lib ?

Depois que você fizer isso da um clean no teu projeto. No eclipse para dar clean, clica no menu la de cima tem uma opção chamada Project, depois clica em Clean …, Depois seleciona seu projeto e aperto OK.

P

Hich, fiz isso e nada de novo aconteceu.

P

Joguei o driver na pasta Lib/Ext da minha jre e mesmo assim não funcionou. Também dá erro se eu colocar o Class.forName("…"). O erro é:
Unhandled exception type ClassNotFoundException

P

Pessoal, resolvi e a coisa era bem simples(depois q se resolve, tudo é simples),rs. Eu deveria primeiro registrar o Driver em minha classe Factory, assim:

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

Feito isso, tudo funcionou.
Valeu a todos que me ajudaram. Obrigado!!!

Criado 8 de fevereiro de 2011
Ultima resposta 13 de fev. de 2011
Respostas 24
Participantes 4