conexão PostGre

7 respostas
C

pessoal, gostaria de pedir uma ajuda, pois não estou conseguindo fazer com que um Servlet conecte-se a um bd do PostGre.

Está apresentando o seguinte erro: description The server encountered an internal error () that prevented it from fulfilling this request.

coloquei o driver do postgre (postgresql-8.0-310.jdbc2) no seguinte diretório do tomcat: C:\jakarta-tomcat-5.5.7\webapps\ROOT\WEB-INF\lib e mesmo assim está dando erro.

obs: olhei várias msgs já postadas aqui no forum, mas não consegui resolver o problema.

desde já agradeço a ajuda.

7 Respostas

cassio

carlosabc:
pessoal, gostaria de pedir uma ajuda, pois não estou conseguindo fazer com que um Servlet conecte-se a um bd do PostGre.

Está apresentando o seguinte erro: description The server encountered an internal error () that prevented it from fulfilling this request.

coloquei o driver do postgre (postgresql-8.0-310.jdbc2) no seguinte diretório do tomcat: C:\jakarta-tomcat-5.5.7\webapps\ROOT\WEB-INF\lib e mesmo assim está dando erro.

obs: olhei várias msgs já postadas aqui no forum, mas não consegui resolver o problema.

desde já agradeço a ajuda.

Posta o stack trace ai, porque esse erro do Tomcat (“description The server encountered an internal error () that prevented it from fulfilling this request.”) pode ser 90347834 coisas diferentes…

C

cássio, este é um pequeno exercicio que fiz em um curso. segue abaixo o código fonte:

//package jsp.aluno01.exercicio15;

import javax.servlet.<em>;

import javax.servlet.http.</em>;

import <a href="http://java.io">java.io</a>.<em>;

import java.sql.</em>;

//import jsp.aluno01.exercicio15.*;
public class RecuperaProdutoServlet extends HttpServlet

{	private Connection conn = null;

/<em>Esta parte de conexão com o bd deveria estar no padrão DAO.</em>/

public void init() throws ServletException

{	try

{	Class.forName(org.postgresql.Driver);

conn = DriverManager.getConnection

(jdbc:postgresql://localhost:5432/banco”,“carlos”, “carlos”);

}

catch (ClassNotFoundException e)

{	System.err.println(O driver de banco de dados não foi encontrado.);

throw new ServletException(e);

}

catch (SQLException e)

{	System.err.println(Não foi possível estabelecer uma conexão com o banco de dados.);

throw new ServletException(e);

}

}
public void service(HttpServletRequest req,
	                HttpServletResponse res)
	throws ServletException, IOException 
{		
	String num = req.getParameter("numero");

	int numero;
	try { numero = Integer.parseInt(num); }
	catch(NumberFormatException e) { numero = 0; };

	ProdutoBean bean = recuperaProduto(numero);
	RequestDispatcher dispatcher;

	if (bean != null)
 	{	req.setAttribute("produto", bean);
		dispatcher = req.getRequestDispatcher
			("/jsp/aluno01/exercicio15/exibeProduto.jsp");
 	}
 	else
	{	dispatcher = req.getRequestDispatcher
			("/jsp/aluno01/exercicio15/produtoNaoEncontrado.jsp");
	}
		
	dispatcher.forward(req, res);
	//neste caso o parâmetro res não tem nada.
	
}


/*Este método corresponde à camada modelo do MVC*/
public ProdutoBean recuperaProduto(int numero) 
	throws ServletException
{	try 
	{	PreparedStatement pstmt = conn.prepareStatement
			("SELECT NUMERO, DESCRICAO, PRECO, QTD_ESTOQUE FROM PRODUTOS WHERE NUMERO = ?");
		pstmt.setInt(1, numero);
		ResultSet rs = pstmt.executeQuery();

 		ProdutoBean bean = null;
 		if (rs.next()) 
 		{	bean = new ProdutoBean(rs.getInt("NUMERO"), 
								   rs.getString("DESCRICAO"),
								   rs.getDouble("PRECO"),
								   rs.getInt("QTD_ESTOQUE"));
 		}
 		pstmt.close();
 		return bean;
	}
	catch (SQLException se) 
	{	System.err.println("Erro ao acessar a tabela de Produtos.");
 		throw new ServletException(se);
	}
}

public void destroy()
{	try 
	{	if (conn != null)
			conn.close();
	}
	catch (SQLException se) 
	{	System.err.println("Erro ao fechar a conexão com o Banco de Dados.");
	}
}

}

C

cássio, segue abaixo a página de erro completa. (sou novato em java)

type Exception report

message

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

exception

javax.servlet.ServletException: Cannot allocate servlet instance for path /servlet/jsp.aluno01.exercicio15.RecuperaProdutoServlet

org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:388)

org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:133)

javax.servlet.http.HttpServlet.service(HttpServlet.java:689)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.lang.NoClassDefFoundError: jsp/aluno01/exercicio15/RecuperaProdutoServlet (wrong name: RecuperaProdutoServlet)

java.lang.ClassLoader.defineClass1(Native Method)

java.lang.ClassLoader.defineClass(ClassLoader.java:620)

java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)

org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1626)

org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:850)

org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1299)

org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1181)

org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:369)

org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:133)

javax.servlet.http.HttpServlet.service(HttpServlet.java:689)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

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

renandemelo

Cara,

Seu problema está aqui

java.lang.NoClassDefFoundError: jsp/aluno01/exercicio15/RecuperaProdutoServlet (wrong name: RecuperaProdutoServlet)

A JVM não está encontrando a classe jsp.aluno01.exercicio15.RecuperaProdutoServlet

Isto é, verifique se esta servlet se encontra ok no projeto, que significa que ela deve estar dentro do /WEB-INF/classes/jsp/aluno01/exercicio15/RecuperaProdutoServlet

ou dentro de um jar que esteja na
/WEB-INF/lib

Flw,
Renan

C

Renan,

o servlet RecuperaProdutoServlet está (compilado ok) dentro de /WEB-INF/classes/jsp/aluno01/exercicio15/. Neste mesmo diretório se encontra o Javabean ProdutoBean (compilado ok).

Será que está faltando alguma configuração que eu não fiz ? Percebi que o jvm não está localizando o servlet, mas ele está lá e está ok.

Obs: Eu coloquei o driver do postgre (postgresql-8.0-310.jdbc2) no seguinte diretório do tomcat: C:\jakarta-tomcat-5.5.7\webapps\ROOT\WEB-INF\lib. É nesse diretório mesmo que fica o driver do postgre ?

agradeço a ajuda.

renandemelo

Cara,

Primeiramente não é no C:\jakarta-tomcat-5.5.7\webapps\ROOT\WEB-INF\lib. Caso você queira colocar uma biblioteca para todas as aplicações do seu tomcat teria que ser algo do tipo C:\jakarta-tomcat-5.5.7\lib. Agora, eu fortemente te aconselho a colocar os jars que não são padrão para o tomcat (neste caso, o driver do postgre) dentro do diretório /SuaAplicacao/WEB-INF/lib pois assim ela poderá ser implantada em qualquer servidor com tomcat. Verifique por que a jvm não está reconhecendo esta classe, pois que ela não está reconhecendo isto é claro, provavelmente é algum detalhe.

Flw,
Renan

C

Renan,

Agradeço a dica sobre o driver (e arquivos .jar) no tomcat. Vou olhar com mais calma e tentar identificar o pq de o jvm não está encontrando o servlet.

obrigado

Criado 29 de março de 2007
Ultima resposta 29 de mar. de 2007
Respostas 7
Participantes 3