Por que não consigo compilar esse servlet?

Amigos , sou novato e gostaria do auxilios dos amigos pois não consigo compilar um servlet e um bean .
utilizo tomcat 5 e os arquivos estão no diretório : C:\Tomcat-5.0\webapps\ROOT\WEB-INF\classes\clientes .


package clientes;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;

public class ClientesServlet extends HttpServlet 
{			 	

	private Connection conn = null;

	public void init() throws ServletException 
	{

	 	try
		{


			String databaseURL = "jdbc:interbase://localhost/c:/sistemas/projeto cominat/bancodados/dba_imoveis.gdb";
    	 		String user = "sysdba";
    			String password = "masterkey";
    			String driverName = "interbase.interclient.Driver";
			
	   		DriverManager.registerDriver(new interbase.interclient.Driver());			
			
	   		conn = DriverManager.getConnection(databaseURL, user, password);
							
			conn.setAutoCommit(false);		

		}
		catch (SQLException e)
		{

			System.err.println("não foi possivel estabelecer conexao ");
			
			throw new ServletException(e);
		

		}


	}

	public void service(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException 
	{

		String codcliente = req.getParameter("cod_cliente");

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

		ClienteBean bean = recuperaCliente(numero);

		RequestDispatcher dispatcher;

		if (bean != null) 
		{
			
			req.setAttribute("cliente",bean);
			
			dispatcher = req.getRequestDispatcher("/jsp/clientes/exibecliente.jsp");
		
		}
		else
		{

			dispatcher = req.getRequestDispatcher
						("/jsp/clientes/clientenaoencontrado.jsp");


		}
		

		dispatcher.forward(req,res);

	}

	
	public ClienteBean recuperaCliente(int numero) throws ServletException 
	{
		
		try
		{
			
			PreparedStatement pstmt = conn.prepareStatement("select cod_cliente,nome_tt from clientes where cod_cliente = ?");
			
			pstmt.setInt(1,numero);
			
			ResultSet rs = pstmt.executeQuery();
			
			ClienteBean bean = null;
			
			if (rs.next())
			{
				bean = new ClienteBean(rs.getInt("cod_cliente"),rs.getString("nome_tt"));
				
			}
			
			rs.close();
			
			pstmt.close();
			
			return bean;
			
		}
		catch (SQLException se)
		{
			
			System.err.println("Erro ao acesar a tabela clientes");
			
			throw new ServletException(se);
		}
						
	}
	
	public void destroy()
	{
		
		try
		{
			if (conn != null)
				conn.close();
				
		}
		catch (SQLException se)
		{
			
			System.err.println ("erro ao fechar a conexao ");
		}
		
	}	


}

package clientes;

public class ClienteBean
{

	private int cod_cliente;
	private String nome_tt;

	public ClienteBean() 
	{
	// 		
	}


	public ClienteBean(int cod_cliente,String nome_tt)
	{

		this.cod_cliente = cod_cliente;
		this.nome_tt = nome_tt;

	}	


	public int getCod_cliente()
	{
		return this.cod_cliente;
	}

	public String getNome_tt()
	{
		return this.nome_tt;
	}


}

os drives para interbase estão no diretório common\lib .

e o erro que ocorre é :

--------------------Configuration: <Default>--------------------
C:\Tomcat-5.0\webapps\ROOT\WEB-INF\classes\clientes\ClientesServlet.java:82: cannot resolve symbol
symbol : class ClienteBean
location: class clientes.ClientesServlet
public ClienteBean recuperaCliente(int numero) throws ServletException
^
C:\Tomcat-5.0\webapps\ROOT\WEB-INF\classes\clientes\ClientesServlet.java:55: cannot resolve symbol
symbol : class ClienteBean
location: class clientes.ClientesServlet
ClienteBean bean = recuperaCliente(numero);
^
C:\Tomcat-5.0\webapps\ROOT\WEB-INF\classes\clientes\ClientesServlet.java:94: cannot resolve symbol
symbol : class ClienteBean
location: class clientes.ClientesServlet
ClienteBean bean = null;
^
C:\Tomcat-5.0\webapps\ROOT\WEB-INF\classes\clientes\ClientesServlet.java:98: cannot resolve symbol
symbol : class ClienteBean
location: class clientes.ClientesServlet
bean = new ClienteBean(rs.getInt(“cod_cliente”),rs.getString(“nome_tt”));
^
4 errors

Process completed.

[color=“red”]Editado: Use a tag CODE em seus códigos - matheus.[/color]

Ola MisterZire.

Primeiramente, bem vindo ao PJ.

O bean já está compilado ?
Se não estiver compilado, sugiro que compiles o bean antes, de modo que haja um .class no diretório …/classes/clientes e depois tente compilar a servlet.

Caso haja erro na compilação do bean tambem, envie estes erros para que possamos olhar.

[]s

Pessoal ,
Fiz algumas alterações .
compilei o bean primeiro . mas quando tento compilar o servlet ocorre o erro :

C:\Tomcat-5.0\webapps\ROOT\WEB-INF\classes\clientes\ClientesServlet.java:30: exception java.lang.ClassNotFoundException is never thrown in body of corresponding try statement
catch (ClassNotFoundException e)
^
1 error

Servlet

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;

public class ClientesServlet extends HttpServlet 
&#123;			 	

	private Connection conn = null;

	public void init&#40;&#41; throws ServletException 
	&#123;

	 	try
		&#123;


			String databaseURL = &quot;jdbc&#58;interbase&#58;//localhost/c&#58;/sistemas/projeto cominat/bancodados/dba_imoveis.gdb&quot;;
    	 		String user = &quot;sysdba&quot;;
    			String password = &quot;masterkey&quot;;
    			String driverName = &quot;interbase.interclient.Driver&quot;;
			
	   		DriverManager.registerDriver&#40;new interbase.interclient.Driver&#40;&#41;&#41;;			
			
	   		conn = DriverManager.getConnection&#40;databaseURL, user, password&#41;;
							
			conn.setAutoCommit&#40;false&#41;;		

		&#125;
		catch &#40;ClassNotFoundException e&#41;
		&#123;
			System.err.println&#40;&quot;O Driver de banco de dados não foi encotrado .&quot;&#41;;
			throw new ServletException&#40;e&#41;;
		&#125;
		catch &#40;SQLException e&#41;
		&#123;

			System.err.println&#40;&quot;não foi possivel estabelecer conexao &quot;&#41;;
			
			throw new ServletException&#40;e&#41;;
		

		&#125;


	&#125;

	public void service&#40;HttpServletRequest req,HttpServletResponse res&#41; throws ServletException,IOException 
	&#123;

		String codcliente = req.getParameter&#40;&quot;cod_cliente&quot;&#41;;

		int numero;
		
		try &#123; numero = Integer.parseInt&#40;codcliente&#41;; &#125;
		catch &#40;NumberFormatException e&#41; &#123;numero = 0; &#125;

		ClienteBean bean = recuperaCliente&#40;numero&#41;;

		RequestDispatcher dispatcher;

		if &#40;bean != null&#41; 
		&#123;
			
			req.setAttribute&#40;&quot;cliente&quot;,bean&#41;;
			
			dispatcher = req.getRequestDispatcher&#40;&quot;/jsp/clientes/exibecliente.jsp&quot;&#41;;
		
		&#125;
		else
		&#123;

			dispatcher = req.getRequestDispatcher
						&#40;&quot;/jsp/clientes/clientenaoencontrado.jsp&quot;&#41;;


		&#125;
		

		dispatcher.forward&#40;req,res&#41;;

	&#125;

	
	public ClienteBean recuperaCliente&#40;int numero&#41; throws ServletException 
	&#123;
		
		try
		&#123;
			
			PreparedStatement pstmt = conn.prepareStatement&#40;&quot;select cod_cliente,nome_tt from clientes where cod_cliente = ?&quot;&#41;;
			
			pstmt.setInt&#40;1,numero&#41;;
			
			ResultSet rs = pstmt.executeQuery&#40;&#41;;
			
			ClienteBean bean = null;
			
			if &#40;rs.next&#40;&#41;&#41;
			&#123;
				bean = new ClienteBean&#40;rs.getInt&#40;&quot;cod_cliente&quot;&#41;,rs.getString&#40;&quot;nome_tt&quot;&#41;&#41;;
				
			&#125;
			
			rs.close&#40;&#41;;
			
			pstmt.close&#40;&#41;;
			
			return bean;
			
		&#125;
		catch &#40;SQLException se&#41;
		&#123;
			
			System.err.println&#40;&quot;Erro ao acesar a tabela clientes&quot;&#41;;
			
			throw new ServletException&#40;se&#41;;
		&#125;
						
	&#125;
	
	public void destroy&#40;&#41;
	&#123;
		
		try
		&#123;
			if &#40;conn != null&#41;
				conn.close&#40;&#41;;
				
		&#125;
		catch &#40;SQLException se&#41;
		&#123;
			
			System.err.println &#40;&quot;erro ao fechar a conexao &quot;&#41;;
		&#125;
		
	&#125;	


&#125;

bean

public class ClienteBean
&#123;

	private int cod_cliente;
	private String nome_tt;

	public ClienteBean&#40;&#41; 
	&#123;
	// 		
	&#125;


	public ClienteBean&#40;int cod_cliente,String nome_tt&#41;
	&#123;

		this.cod_cliente = cod_cliente;
		this.nome_tt = nome_tt;


	&#125;	


	public int getCod_cliente&#40;&#41;
	&#123;
		return this.cod_cliente;
	&#125;

	public String getNome_tt&#40;&#41;
	&#123;
		return this.nome_tt;
	&#125;


&#125;

ufa ! ta dificil :sad:

[color=“red”]Editado: For the love of God… use a tag CODE em seus códigos - matheus.[/color]

Salve,

bem inclua o teu jar de conexão com o bd ao teu classpath que resolve o problema…

:okok:

Ola pessoal ,

fiz as seguintes alterações no meu classpath

.;C:\Tomcat-5.0\common\lib\intercliente-utils.jar;C:\Tomcat-5.0\common\lib\interclient.jar;C:\Tomcat-5.0\common\lib\interclient-core.jar;C:\Tomcat-5.0\common\lib\interclient-res.jar;C:\Tomcat-5.0\webapps\ROOT\WEB-INF\classes\clientes

mas o erro continua .
Inclui esses arquivos na JCreator que é a ferramenta que estou utilizando . Se alguem puder ajudar , agradeço . :cry:

Tchê… negocio é o seguinte:

não há porque tratar ClassNotFoundException no catch, visto que não há busca de classes como um Class.forName(“Classe”). É a mesma coisa que tu fazer um try e dentro dele ter um bloco if…else que imprime algo na tela e tratar SQLException, sendo que nem usou nada que poderia cair nesta exceção.

Se não precisa usar Class.forName, não trate ClassNotFound, neste bloco fica melhro que tu trate SQLException, visto que estás abrindo uma conexão e setando autocommit para fasle.

Espero que ajude.

[]s

Matheus, Como faço para usar essa tal TAG CODE em meu código e para que ela server ?

Pessoal ,

Tirei fora o tratamento do ClassNotFound e finalmente consegui compilar meu código mas quando executo :

http://localhost:7070/servlet/clientes.ClientesServlet?cod_cliente=1

ocorre o erro abaixo :

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/clientes.ClientesServlet
org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:435)
org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:180)
javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

root cause

java.lang.NoClassDefFoundError: clientes/ClientesServlet (wrong name: ClientesServlet)
java.lang.ClassLoader.defineClass0(Native Method)
java.lang.ClassLoader.defineClass(ClassLoader.java:539)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1677)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:900)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1350)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1230)
org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:416)
org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:180)
javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

Desculpe o incomodo mas é que realmente estou com dificuldades :frowning:

Você definiu o teu servlet no web.xml ?

<servlet>
<servlet-name>ClientesServlet </servlet-name>
<servlet-class><caminho>.ClientesServlet</servlet-class>
</servlet>

[]s

[quote=“MisterZire”]Matheus, Como faço para usar essa tal TAG CODE em meu código e para que ela server ?
[/quote]

bem, qnd tu vai postar algo, aparece alguns botões de formatação de texto acima da text area q vc escreve oq vai postar, ali tem o botão “Code”… q funciona da seguinte maneira: qnd vc digita exemplos de código, vc seleciona o texto q é código e clica no botão “Code”, ele vai inserir a tag [code] no seu código, e ele aparecerá dentro de um quadrado branco e o importante: identado. É pelo fato da identação q pedimos q poste seus códigos na tag code, por ex:

   public class Foo {

      //codigo codigo codigo
   }

nesse caso eu não habilitei ele nessa mensagem pra vc ver como se faz, é só colocar o seu código dentro da tag [code].

até! :slight_smile:

Matheus , Obrigado pelas explicações . agora aprendi :grin:

Pessoal ,

configurei meu arquivo web.xml conforme codigo abaixo :

<servlet>
<servlet-name>obterclientes</servlet-name>
<servlet-class>clientes.ClientesServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>obterclientes</servlet-name>
<url-pattern>/execute</url-pattern>
</servlet-mapping>

mas quando executo meu servlet ocorre o erro :

http://localhost:7070/servlet/obterclientes?cod_cliente=1

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/obterclientes
org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:435)
org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:180)
javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

root cause

java.lang.NoClassDefFoundError: clientes/ClientesServlet (wrong name: ClientesServlet)
java.lang.ClassLoader.defineClass0(Native Method)
java.lang.ClassLoader.defineClass(ClassLoader.java:539)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1677)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:900)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1350)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1230)
org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:416)
org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:180)
javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

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

Pesquisei outras formas de executar o servlet , mas o erro continuo . Então pesquisando ,verifiquei que terei que incluir a package do meu servlet e a package do meu Bean e compila-los.
Mas quando faço isso no meu código :


package clientes;

public class ClienteBean
&#123;

	private int cod_cliente;
	private String nome_tt;

	public ClienteBean&#40;&#41; 
	&#123;
	// 		
	&#125;


	public ClienteBean&#40;int cod_cliente,String nome_tt&#41;
	&#123;

		this.cod_cliente = cod_cliente;
		this.nome_tt = nome_tt;

	&#125;	


	public int getCod_cliente&#40;&#41;
	&#123;
		return this.cod_cliente;
	&#125;

	public String getNome_tt&#40;&#41;
	&#123;
		return this.nome_tt;
	&#125;


&#125;

package clientes;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;

public class ClientesServlet extends HttpServlet 
&#123;			 	

	private Connection conn = null;

	public void init&#40;&#41; throws ServletException 
	&#123;

	 	try
		&#123;


			String databaseURL = &quot;jdbc&#58;interbase&#58;//localhost/c&#58;/sistemas/projeto cominat/bancodados/dba_imoveis.gdb&quot;;
    	 		String user = &quot;sysdba&quot;;
    			String password = &quot;masterkey&quot;;
    			String driverName = &quot;interbase.interclient.Driver&quot;;
			
	   		DriverManager.registerDriver&#40;new interbase.interclient.Driver&#40;&#41;&#41;;			
			
	   		conn = DriverManager.getConnection&#40;databaseURL, user, password&#41;;
							
			conn.setAutoCommit&#40;false&#41;;		
			
			//catch &#40;ClassNotFoundException e&#41;
			//&#123;
			//System.err.println&#40;&quot;O Driver de banco de dados não foi encotrado .&quot;&#41;;
			//throw new ServletException&#40;e&#41;;
			//&#125;
			

		&#125;
		catch &#40;SQLException e&#41;
		&#123;

			System.err.println&#40;&quot;não foi possivel estabelecer conexao &quot;&#41;;
			
			throw new ServletException&#40;e&#41;;
		

		&#125;


	&#125;

	public void service&#40;HttpServletRequest req,HttpServletResponse res&#41; throws ServletException,IOException 
	&#123;

		String codcliente = req.getParameter&#40;&quot;cod_cliente&quot;&#41;;

		int numero;
		
		try &#123; numero = Integer.parseInt&#40;codcliente&#41;; &#125;
		catch &#40;NumberFormatException e&#41; &#123;numero = 0; &#125;

		ClienteBean bean = recuperaCliente&#40;numero&#41;;

		RequestDispatcher dispatcher;

		if &#40;bean != null&#41; 
		&#123;
			
			req.setAttribute&#40;&quot;cliente&quot;,bean&#41;;
			
			dispatcher = req.getRequestDispatcher&#40;&quot;/jsp/clientes/exibecliente.jsp&quot;&#41;;
		
		&#125;
		else
		&#123;

			dispatcher = req.getRequestDispatcher
						&#40;&quot;/jsp/clientes/clientenaoencontrado.jsp&quot;&#41;;


		&#125;
		

		dispatcher.forward&#40;req,res&#41;;

	&#125;

	
	public ClienteBean recuperaCliente&#40;int numero&#41; throws ServletException 
	&#123;
		
		try
		&#123;
			
			PreparedStatement pstmt = conn.prepareStatement&#40;&quot;select cod_cliente,nome_tt from clientes where cod_cliente = ?&quot;&#41;;
			
			pstmt.setInt&#40;1,numero&#41;;
			
			ResultSet rs = pstmt.executeQuery&#40;&#41;;
			
			ClienteBean bean = null;
			
			if &#40;rs.next&#40;&#41;&#41;
			&#123;
				bean = new ClienteBean&#40;rs.getInt&#40;&quot;cod_cliente&quot;&#41;,rs.getString&#40;&quot;nome_tt&quot;&#41;&#41;;
				
			&#125;
			
			rs.close&#40;&#41;;
			
			pstmt.close&#40;&#41;;
			
			return bean;
			
		&#125;
		catch &#40;SQLException se&#41;
		&#123;
			
			System.err.println&#40;&quot;Erro ao acesar a tabela clientes&quot;&#41;;
			
			throw new ServletException&#40;se&#41;;
		&#125;
						
	&#125;
	
	public void destroy&#40;&#41;
	&#123;
		
		try
		&#123;
			if &#40;conn != null&#41;
				conn.close&#40;&#41;;
				
		&#125;
		catch &#40;SQLException se&#41;
		&#123;
			
			System.err.println &#40;&quot;erro ao fechar a conexao &quot;&#41;;
		&#125;
		
	&#125;	


&#125;

ocorre esse erro no meu servlet :

--------------------Configuration: <Default>--------------------
C:\Tomcat-5.0\webapps\ROOT\WEB-INF\classes\clientes\ClientesServlet.java:89: cannot resolve symbol
symbol : class ClienteBean
location: class clientes.ClientesServlet
public ClienteBean recuperaCliente(int numero) throws ServletException
^
C:\Tomcat-5.0\webapps\ROOT\WEB-INF\classes\clientes\ClientesServlet.java:62: cannot resolve symbol
symbol : class ClienteBean
location: class clientes.ClientesServlet
ClienteBean bean = recuperaCliente(numero);
^
C:\Tomcat-5.0\webapps\ROOT\WEB-INF\classes\clientes\ClientesServlet.java:101: cannot resolve symbol
symbol : class ClienteBean
location: class clientes.ClientesServlet
ClienteBean bean = null;
^
C:\Tomcat-5.0\webapps\ROOT\WEB-INF\classes\clientes\ClientesServlet.java:105: cannot resolve symbol
symbol : class ClienteBean
location: class clientes.ClientesServlet
bean = new ClienteBean(rs.getInt(“cod_cliente”),rs.getString(“nome_tt”));
^
4 errors

Process completed.

pelo que entendi não consegui encontrar o meu bean .
e agora ? o que devo fazer ?

Agradeço antecipadamente a ajuda de todos . obrigado mesmo .

Pessoal , por favor não me abandonem . Ja estou desesperado :cry:

<cornetas para super herói>
Matheus to rescue!!! :grin:
</cornetas para super herói>

HKAhkaekaUa, MisterZire, teu classpath não ta encontrando essas classes q tu ta fazendo referencia, acredito q tu esteja compilando td isso na mão, no console mesmo, bem, então tu tem q compilar com

javac -classpath “c:\caminho\das\classes\que\nao\esta\achando” -d . TeuServlet.java

sacou? O ideal era se vc estivesse usando uma IDE, q esse problema todo desaparece praticamente :slight_smile:

Matheus , Estou usando o JCreator .

Nunca usei o JCreator cara… mas bem, tu tem q saber como configurar isso nele, tipo, no eclipse é direto, ele se vira na boa, é só criar um pacote e importar q ele ja reconhece… teu problema é com a IDE mesmo :roll: