Tomcat6 игнорирует web-inf / lib - PullRequest
2 голосов
/ 28 августа 2011

Краткое описание: Tomcat6 не может распознать мой файл ojdbc14.jar в WebRoot / WEB-INF / lib.Я полагаю, мне не нужно ничего настраивать, просто поместив туда файл .jar, и он должен работать.

Подробности:

Я создал вебприложение и поместите ojdbc14.jar в папку WEB-INF / lib.Когда я запускаю Tomcat6 и обращаюсь к странице index.jsp, которая создает объект, который инициирует соединение с моей базой данных oracle , возникает ошибка, говорящая "Не удается загрузить класс драйвера JDBC 'oracle.jdbc.OracleDriver'".Очевидно, Tomcat6 не может распознать класс 'oracle.jdbc.OracleDriver' в web-inf / lib / ojdbc14.jar .

Я провел некоторое исследование и предположил следующие причины:

  1. Tomcat6 имеет несколько различных способов загрузки классов.Они меняют его в каждой выпущенной версии.Или
  2. В Tomcat6 есть ошибка.Я обнаружил похожую ошибку в Tomcat3 (см. Здесь https://bugs.eclipse.org/bugs/show_bug.cgi?id=249044). Но я сомневаюсь, что эта ошибка может продолжаться для стольких версий.
  3. Tomcat6 уже включил содержимое ojdbc14.jar в свой собственный файл lib, и естьконфликт, добавив его в web-inf / lib еще раз. Я не верю этому, потому что после удаления ojdbc14.jar из WEB-INF / lib проблема сохраняется.

Вот мой вебструктура приложения:

  • WebRoot
    • WEB-INF
      • классы
        • 'Класс для инициирования соединения'
      • lib
        • 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

1 Ответ

10 голосов
/ 28 августа 2011

Stacktrace сообщает, что вы создали DataSource как <Resource> на стороне Tomcat.В этом случае JAR-файл драйвера JDBC действительно необходимо поместить в сторону Tomcat, а Tomcat управляет DataSource, а не вашим веб-приложением.Бросьте его в Tomcat/lib, и это исключение должно исчезнуть.Вы также можете поместить его во внешнюю папку и добавить его путь к общему пути к классам Tomcat, определяемый свойством common.loader в файле /conf/catalina.properties.

Обратите внимание, что вам не нужно загружать драйвер вручную.Просто возьмите DataSource и получите от него Connection.

...