Tomcat6忽略web-inf / lib [英] Tomcat6 ignores web-inf/lib

查看:257
本文介绍了Tomcat6忽略web-inf / lib的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Brief: Tomcat6 can't recognize my ojdbc14.jar in WebRoot/WEB-INF/lib. I suppose I don't need to configure anything, just putting the .jar file in there and it should work.

详细信息:

我创建了一个Web应用程序并将ojdbc14.jar放在WEB-INF / lib文件夹中。当我启动Tomcat6并且访问一个index.jsp页面,该页面创建一个启动与我的oracle数据库的连接的对象时,会出现错误,指出无法加载JDBC驱动程序类'oracle.jdbc.OracleDriver'。显然 Tomcat6无法识别web-inf / lib / ojdbc14.jar中的'oracle.jdbc.OracleDriver'类

I've created a web application and put ojdbc14.jar in WEB-INF/lib folder. When I start Tomcat6 and access an index.jsp page which creates an object that initiates a connection to my oracle database, an error occurs saying "Cannot load JDBC driver class 'oracle.jdbc.OracleDriver'". Apparently Tomcat6 can't recognize the 'oracle.jdbc.OracleDriver' class in web-inf/lib/ojdbc14.jar.

我'我做了一些研究并推测出以下原因:

I've done some research and speculate the following reasons:


  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之后,问题仍然存在。

  1. Tomcat6 has got some different ways of loading classes. They change it in every version released. Or
  2. There is a bug with Tomcat6. I found a similar bug in Tomcat3 (see here https://bugs.eclipse.org/bugs/show_bug.cgi?id=249044). But I doubt this bug could last for so many versions.
  3. Tomcat6 has included ojdbc14.jar's content in its own lib file already, and there's a conflict by adding it to web-inf/lib once more. I don't believe this, because after deleting ojdbc14.jar from WEB-INF/lib, the problem persists.

这是我的网站申请结构:

Here's my web application structure:


  • WebRoot

    • WEB-INF

      • classes

        • '用于启动连接的类'


        • ojdbc14.jar

        错误:

        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
        


        推荐答案

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

        The stacktrace tells that you've created a DataSource as <Resource> in Tomcat's side. In that case, the JDBC driver JAR file really needs to be put in Tomcat's side as well as it's Tomcat who manages the DataSource, not your webapp. Drop it in Tomcat/lib and this exception should disappear. You could also drop it in an external folder and add its path to Tomcat's common classpath as definied by common.loader property in /conf/catalina.properties file.

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

        Please note that you don't need to load the driver manually. Just grab the DataSource and then get the Connection from it.

        这篇关于Tomcat6忽略web-inf / lib的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆