Tomcat6忽略web-inf / lib

时间:2011-08-28 17:49:11

标签: java tomcat jdbc classloader web-inf

简介: Tomcat6无法识别WebRoot / WEB-INF / lib中的ojdbc14.jar。我想我不需要配置任何东西,只需将.jar文件放在那里就可以了。

详细信息:

我已经创建了一个Web应用程序并将ojdbc14.jar放在WEB-INF / lib文件夹中。当我启动Tomcat6并且访问一个index.jsp页面,该页面创建一个启动与我的oracle数据库的连接的对象时,会出现错误,指出“无法加载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)。但我怀疑这个bug可能会持续这么多版本。
  3. Tomcat6已将ojdbc14.jar的内容包含在自己的lib文件中,并且再次将其添加到web-inf / lib会产生冲突。我不相信这一点,因为在从WEB-INF / lib删除ojdbc14.jar之后,问题仍然存在。
  4. 这是我的网络应用程序结构:

    • 的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 个答案:

答案 0 :(得分:9)

堆栈跟踪告诉您已在Tomcat的一侧创建DataSource<Resource>。在这种情况下,JDBC驱动程序JAR文件确实需要放在Tomcat的端口以及管理DataSource而不是您的webapp的Tomcat。将其放在Tomcat/lib中,此异常应该消失。您也可以将其放在外部文件夹中,并将其路径添加到Tomcat的公共类路径中,如common.loader文件中的/conf/catalina.properties属性所定义。

请注意,您不需要手动加载驱动程序。只需抓住DataSource,然后从中获取Connection