2

概要: Tomcat6 は、WebRoot/WEB-INF/lib にある ojdbc14.jar を認識できません。.jar ファイルをそこに置くだけで、何も構成する必要はないと思います。

詳細:

Web アプリケーションを作成し、ojdbc14.jar を WEB-INF/lib フォルダーに配置しました。Tomcat6 を起動し、Oracle データベースへの接続を開始するオブジェクトを作成する index.jsp ページにアクセスすると、「JDBC ドライバー クラス 'oracle.jdbc.OracleDriver' をロードできません」というエラーが発生します。どうやらTomcat6 は web-inf/lib/ojdbc14.jar の「oracle.jdbc.OracleDriver」クラスを認識できません

私はいくつかの調査を行い、次の理由を推測しました。

  1. Tomcat6 には、クラスをロードするいくつかの異なる方法があります。彼らは、リリースされるすべてのバージョンでそれを変更します。または
  2. Tomcat6 にはバグがあります。Tomcat3 で同様のバグを見つけました (こちらhttps://bugs.eclipse.org/bugs/show_bug.cgi?id=249044を参照)。しかし、このバグが非常に多くのバージョンで続くとは思えません。
  3. Tomcat6 はすでに ojdbc14.jar のコンテンツを独自の lib ファイルに含めており、それを web-inf/lib にもう一度追加すると競合が発生します。WEB-INF/lib から ojdbc14.jar を削除した後も問題が解決しないため、これは信じられません。

私のWebアプリケーション構造は次のとおりです。

  • ウェブルート
    • WEB-INF
      • クラス
        • 「接続を開始するためのクラス」
      • ライブラリ
        • ojdbc14.jar
    • index.jsp

エラー:

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.OracleDriver'
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:766)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
    at com.demo6.DataSourceExample.getConnection(DataSourceExample.java:18)
    at org.apache.jsp.index_jsp._jspService(index_jsp.java:63)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
    at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:760)
    ... 21 more
4

1 に答える 1

10

スタックトレースは、Tomcat 側でDataSourceasを作成したことを示しています。<Resource>その場合、JDBC ドライバーの JAR ファイルを実際に Tomcat の側に配置する必要があります。またDataSource、Web アプリケーションではなく を管理するのは Tomcat です。ドロップするとTomcat/lib、この例外は消えます。common.loader外部フォルダーにドロップして、ファイル内のプロパティで定義されているように、そのパスを Tomcat の共​​通クラスパスに追加することもでき/conf/catalina.propertiesます。

ドライバーを手動でロードする必要はありません。をつかみ、DataSourceそこから を取得しConnectionます。

于 2011-08-28T17:57:01.770 に答える