Erro no Tomcat

Pessoal, estou com um erro no tomcat. Vou descrevê-lo…se alguém já viu algo assim e puder dar uma ajuda, será bem vinda.

Criei abaixo de webapps o diretorio hmm, dentro dele o web-inf com o arquivo web.xml. Dentre do web-inf criei o diretório classes, sendo criado a estrutura brcom estehmm em virtude de uma instrução package br.com.teste.hmm dentro das minhas classes. Compilo e gero as classes nesse pacote. No jsp faço:

<%@ page import=“br.com.teste.hmm.HMMAluno_MD” %>
<jsp:useBean id=“hmm_AlunosParecer” class=“br.com.teste.hmm.HMMAluno_MD” />

e obtenho o erro abaixo. A classe HMMAluno_MD faz acesso a banco de dados e o no console do tomcate obtenho um erro de banco de dados:
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
Alguém já viu algo parecido e pode me ajudar ?

type Exception report

message Internal Server Error

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

exception

javax.servlet.ServletException: class br.com.teste.hmm.HMMAluno_MD : java.lang.NullPointerException
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:463)
at org.apache.jsp.busca_0005fparecer$jsp._jspService(busca_0005fparecer$jsp.java:258)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:202)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:474)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

…continua com linhas de erro…

O seu classes.zip do Oracle, que tem o driver, está no classpath (por ex., no diretório lib do Tomcat ou da sua aplicação)?

O classes12.jar do Oracle está no meu classpath. O arquivo está em: C:oracleora92jdbclibclasses12.jar. Essa caminho está no classpath. Devo colocá-lo no diretório lib do Tomcat e da minha aplicação ?

Adicionei o classes12.jar no lib do tomcat e continua dando o mesmo erro !!!

Estou com o mesmo problema citado neste tópico, alguem pode me ajudar???

Já coloquei o arquivo classes12.zip no diretorio lib da aplicacao e continua dando erro…

Por favor me ajudem…

Obrigado.

java.lang.NullPointerException
Você tá inicalizando todas as variáveis? posta o código do bean…
Pode ser que você esteja tentando usar uma váriável que não foi inicializada…

Segue,

package hfb;

import java.sql.*;

public class dao &#123;
        //declaracao das variaveis
        static Connection conn = null;
        static private String blank = &quot;&quot;;
        private int codEmpresa;
        private String empresa;
        private String cnpj;
        private String mes;
        private String ano;
        private String responsavel;
        private String email;
        private int tarefa = 0;

        //Classe Publica DAO
        //Inicia a Conexao ao se criar o objeto
        public dao&#40;&#41;&#123;
                if &#40;conn == null&#41; &#123;
                        try &#123;
                                //driver do banco de dados
                                DriverManager.registerDriver&#40;new oracle.jdbc.driver.OracleDriver&#40;&#41;&#41;;
                                conn = DriverManager.getConnection&#40;&quot;jdbc&#58;oracle&#58;thin&#58;@localhost&#58;1521&#58;taurus&quot;,&quot;scott&quot;,&quot;tiger&quot;&#41;;
//                                Class.forName&#40;&quot;&quot;&#41;;
//                                conn = DriverManager.getConnection&#40;&quot;&quot;&#41;;
                        &#125;
                        catch&#40;Exception e&#41; &#123;
                                System.err.println&#40;&quot;Erro no comando conexao&quot;&#41;;
                        &#125;
                &#125;
        &#125;

        // metodos get e set dos campos

        public int getCodEmpresa&#40;&#41; &#123;
                return codEmpresa;
        &#125;

        public void setCodEmpresa&#40;int codEmpresa&#41;&#123;
                this.codEmpresa = codEmpresa;
        &#125;

        public String getEmpresa&#40;&#41; &#123;
                return empresa;
        &#125;

        public void setEmpresa&#40;String empresa&#41;&#123;
                this.empresa = empresa;
        &#125;

        public String getCnpj&#40;&#41; &#123;
                return cnpj;
        &#125;

        public void setCnpj&#40;String cnpj&#41; &#123;
                this.cnpj = cnpj;
        &#125;

        public  String getMes&#40;&#41; &#123;
                return mes;
        &#125;

        public void setMes&#40;String mes&#41; &#123;
                this.mes = mes;
        &#125;

        public String getAno&#40;&#41; &#123;
                return ano;
        &#125;

        public void setAno&#40;String ano&#41; &#123;
                this.ano = ano;
        &#125;

        public String getResponsavel&#40;&#41; &#123;
                return responsavel;
        &#125;

        public void setResponsavel&#40;String responsavel&#41; &#123;
                this.responsavel = responsavel;
        &#125;

        public String getEmail&#40;&#41; &#123;
                return email;
        &#125;

        public void setEmail&#40;String email&#41; &#123;
                this.email = email;
        &#125;

        public int getTarefa&#40;&#41; &#123;
                return tarefa;
        &#125;

        public void setTarefa&#40;int tarefa&#41; &#123;
                this.tarefa = tarefa;
        &#125;

        // metodo para resetar os campos
        public void limpaTudo&#40;&#41; &#123;
                empresa = cnpj = mes = ano = responsavel = email = blank;
                codEmpresa = 0;
                tarefa = 0;
        &#125;

        public boolean operacao&#40;&#41; &#123;

                if &#40;tarefa == 2&#41; &#123;
                        try &#123;

//                                String sql_insert = &quot;INSERT INTO EMPRESA&#40;CODEMPRESA,EMPRESA,CNPJ,MES,ANO,RESPONSAVEL,EMAIL&#41; &quot;+
  //                                                   &quot;VALUES&#40;&quot;+codEmpresa+&quot;,'&quot;+empresa+&quot;','&quot;+cnpj+&quot;','&quot;+mes+&quot;','&quot;+ano+&quot;','&quot;+responsavel+&quot;','&quot;+email+&quot;'&#41;&quot;;
                                Statement cmd = conn.createStatement&#40;&#41;;
                                cmd.execute&#40;&quot;INSERT INTO EMPRESA&#40;CODEMPRESA,EMPRESA,CNPJ,MES,ANO,RESPONSAVEL,EMAIL&#41; &quot;+
                                           &quot;VALUES&#40;&quot;+codEmpresa+&quot;,'&quot;+empresa+&quot;','&quot;+cnpj+&quot;','&quot;+mes+&quot;','&quot;+ano+&quot;','&quot;+responsavel+&quot;','&quot;+email+&quot;'&#41;&quot;&#41;;
                                cmd.close&#40;&#41;;
                        &#125;
                        catch&#40;Exception e&#41; &#123;
                                //Verifica erros
                                System.err.println&#40;&quot;Erro no comando SQL&quot;&#41;;
                                limpaTudo&#40;&#41;;
                                return false;
                        &#125;
                &#125;
                else if &#40;tarefa == 1&#41; &#123;
                        try &#123;

                                String sql = &quot;SELECT * FROM EMPRESA&quot;;
                                Statement cmd = conn.createStatement&#40;&#41;;
                                ResultSet rs = cmd.executeQuery&#40;sql&#41;;
                                if &#40;rs.next&#40;&#41;&#41; &#123;
                                        // se o recordset contiver dados
                                        // guarda-os nas respectivas variaveis
                                        codEmpresa  = rs.getInt&#40;&quot;CODEMPRESA&quot;&#41;;
                                        empresa		= rs.getString&#40;&quot;EMPRESA&quot;&#41;;
                                        cnpj		= rs.getString&#40;&quot;CNPJ&quot;&#41;;
                                        mes			= rs.getString&#40;&quot;MES&quot;&#41;;
                                        ano			= rs.getString&#40;&quot;ANO&quot;&#41;;
                                        responsavel	= rs.getString&#40;&quot;RESPONSAVEL&quot;&#41;;
                                        email		= rs.getString&#40;&quot;EMAIL&quot;&#41;;
                                &#125;
                                else &#123;
                                        System.err.println&#40;&quot;Nao existe registros&quot;&#41;;
                                        limpaTudo&#40;&#41;;
                                        return false;
                                &#125;
                                rs.close&#40;&#41;;
                                cmd.close&#40;&#41;;
                        &#125;
                        catch&#40;Exception e&#41; &#123;
                                System.err.println&#40;&quot;Erro no comando SQL - SELECT&quot;&#41;;
                                limpaTudo&#40;&#41;;
                                return false;
                        &#125;

                &#125;
                else &#123;
                        limpaTudo&#40;&#41;;
                        return false;
                &#125;

                return true;
        &#125;
&#125;


Agora e sobre o erro classnotfound do driver oracle?

Bem-vindo ao mundo do código em tripas! :smiley:

hivaj, vc pode editar a sua mensagem e usar as tags e pra não perder a indentação? Valeu! :slight_smile:

Kra como diria o Jack o Estripador: “Vamos por partes…” (adoro essa frase)

Seguinte:

  • primeiro veja se o seu tomcat está compilando páginas jsp simples coisas do tipo out.println(“Oi, eu sou um teste…”).

  • Agora tente criar uma conesão com o banco de dados dentro de uma página jsp (deus me perdoe, mas é só um teste…)

// Importe todos os pacotes necessários
// Driver do Oracle, java.sql.* e por ai vai...
&lt;%@ page import=&quot;&quot; %&gt; 
&lt;%@ page import=&quot;&quot; %&gt;
&lt;%@ page import=&quot;&quot; %&gt;

&lt;%
  new oracle.jdbc.driver.OracleDriver&#40;&#41;;
  Connection conn = DriverManager.getConnection&#40;&quot;jdbc&#58;oracle&#58;thin&#58;@localhost&#58;1521&#58;taurus&quot;,&quot;scott&quot;,&quot;tiger&quot;&#41;;

  Statement st = conn.createStatement&#40;&#41;; 
  ResultSet rs = st.executeQuery&#40;&quot;select 1 as num from dual&quot;&#41;;

  if &#40;rs.next&#40;&#41;&#41; out.println&#40;rs.getInt&#40;&quot;num&quot;&#41;&#41;;
%&gt;

PS: Se funcionar destrua esta página e não conte para ninguém que vc fez isso… heehehee.

Se correr tudo bem até aki, significa que seu tomcat está funcionando e que o driver do Oracle foi carregado sem problemas…

Agora crie uma classe de teste e crie um novo objeto referenciando o seu bean, afinal um bean é uma classe como outra qualquer.

Veja um detalhe se o este é o seu bean todo tá faltando importar o driver do oracle, afinal quem tá acessando o oracle não é o Jsp é o bean…

Outra coisa, lembre-se que por convenssão toda classe em java deve começar com a primeira letra maiúscula…

public class Dao &#123;
// codigo aki...
&#125;

a classe ficaria mais ou menos assim:

public class Teste &#123;

    public static void main&#40;String&#91;&#93; args&#41; &#123;
        Dao d = new Dao&#40;&#41;;
        if &#40;d.operacao&#40;&#41;&#41; 
          System.out.println&#40;&quot;Legal...&quot;&#41;;
        else
           System.out.println&#40;&quot;Não funcionou...&quot;&#41;;
    &#125;
&#125;

Dá uma trabalhada nisso, que agente vai acompanhando aki…

Um abraço kra…

Legal, Rodirgo…

Na segunda tentativa, ou seja na conexao na pagina jsp, o seguinte erro foi lancado

org.apache.jasper.JasperException&#58; Unable to compile class for JSP

An error occurred at line&#58; -1 in the jsp file&#58; null

Generated servlet error&#58;
    &#91;javac&#93; Since fork is true, ignoring compiler setting.
    &#91;javac&#93; Compiling 1 source file
    &#91;javac&#93; Since fork is true, ignoring compiler setting.
    &#91;javac&#93; C&#58;Program FilesApache GroupTomcat 4.1workStandalonelocalhosthfb	este_jsp.java&#58;45&#58; package oracle.jdbc.driver does not exist
    &#91;javac&#93;   new oracle.jdbc.driver.OracleDriver&#40;&#41;; 
    &#91;javac&#93;                         ^
    &#91;javac&#93; 1 error

Tentei importar o pacote oracle.jdbc.driver.*; mas o erro continua e diz que este pacote nao existe.

Bom, na variavel CLASSPATH eu setei os zips classes12.zip e nls_charset12.zip, conforme instrucoes do oracle, copie e setei estes pacotes também no lib do web-inf do diretorio da minha aplicacao e também coloquei estes pacote na commom/lib do tomcat. OK?

Kra, onde devo olhar para solucionar este problema…

Desde já valeu…

seguinte renomeia o arquivo de arquivo.zip para arquivo.jar

Agora copie ele para dentro da seguinte pasta

$TOMCAT$\webapps\seusite\WEB-INF\lib\driver.jar

acho que o caminho é esse…

reinicia o tomcat e tenta de novo…

falow

Valeu Mano…

Porra, voce nao sabe como fiquei feliz… Estou sorrindo a toa…

Agora, isto tudo foi porque as classes do driver nao estavam sendo encontradas?

Enfim, onde devo coloca-las? Devo distribuir elas junto com a aplicacao? E porque a extensao .zip nao foi encontrada?

Resumindo, se possivel me da uma breve explicacao do que aconteceu e qual maneira correta.

Outra coisa, nao querendo abusar mas ja abusando, no inicio do topico voce deixou claro que se conectar via jsp nao e uma boa escolha, pergunto qual e o melhor metodo e mais utilizado para se conectar a um BD. Eh da maneira que eu fiz, via um JavaBean?

Veleu Kra, valeu mesmo…

Rapidinho:

Lugar de bibliotecas em aplicacoes web:

(diretorio-da-app)/WEB-INF/lib

SEMPRE :wink:

Pode ser .jar ou .zip, o Java não se importa muito em carregar classes de um ou de outro (mesmo pq, os jars soh apareceram no Java na versao 1.2).

Acho que é isso :smiley: