摘要: Tomcat6無法識別WebRoot/WEB-INF/lib中的ojdbc14.jar。我想我不需要配置任何東西,只需將.jar文件放在那裏,它應該可以工作。Tomcat6忽略web-inf/lib
詳情:
我創建了一個Web應用程序,並把ojdbc14.jar的在WEB-INF/lib文件夾。當我啓動Tomcat6和訪問一個index.jsp頁面,該頁面創建一個對象,該對象啓動到我的oracle數據庫的連接,發生錯誤「不能加載JDBC驅動程序類'oracle.jdbc.OracleDriver'」。顯然Tomcat6無法識別web-inf/lib/ojdbc14.jar中的'oracle.jdbc.OracleDriver'類。
我做了一些研究,推測原因如下:
- 的Tomcat6得到了加載類的一些不同的方式。他們在發佈的每個版本中進行更改。或者
- Tomcat6有一個錯誤。我在Tomcat3中發現了一個類似的bug(請參閱https://bugs.eclipse.org/bugs/show_bug.cgi?id=249044)。但我懷疑這個bug可能會持續這麼多版本。
- Tomcat6已經將ojdbc14.jar的內容包含在它自己的lib文件中,並且再次將它添加到web-inf/lib中有衝突。我不相信這一點,因爲從WEB-INF/lib刪除ojdbc14.jar後,問題依然存在。
這裏是我的web應用程序結構:
- 的WebRoot
- WEB-INF
- 類
- 禮 '一種用於啓動連接類' b
- ojdbc14.jar的
- 類
- 的index.jsp
- WEB-INF
錯誤:
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
我加載類的方式是通過調用'Class.forName(「oracle.jdbc.OracleDriver」);' – stackoverflower