
[英]How can I prevent Tomcat6 from pre-loading JDBC Drivers in WEB-INF/lib?
[英]Tomcat6 ignores web-inf/lib
简介: 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'类 。
我做了一些研究并推测出以下原因:
这是我的Web应用程序结构:
错误:
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
stacktrace告诉你已经在Tomcat的一侧创建了一个DataSource
作为<Resource>
。 在这种情况下,JDBC驱动程序JAR文件确实需要放在Tomcat的端,以及管理DataSource
的Tomcat,而不是您的webapp。 将它放在Tomcat/lib
,这个异常就会消失。 您也可以将其放在外部文件夹中,并将其路径添加到Tomcat的公共类路径中,如/conf/catalina.properties
文件中的common.loader
属性所/conf/catalina.properties
。
请注意,您无需手动加载驱动程序。 只需抓住DataSource
,然后从中获取Connection
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.