2013-01-12 41 views
2

具有從測試Servlet,我加載驅動程序有問題,錯誤只是正在的Java Servlet和JDBC驅動程序問題

拋出java.lang.ClassNotFoundException:com.mysql.jdbc.Driver

運行通過tomcat的servlet - 作爲localhost:8080頁面正在瀏覽器中顯示出來,而且沒有問題。該servlet試圖連接到在MySQL工作臺中運行的數據庫。

 String driver = "com.mysql.jdbc.Driver";  
     Class.forName(driver).newInstance(); 
     // Make db connection 
     con = DriverManager.getConnection(url, USERNAME, PASSWORD); 
     st = con.createStatement(); 

系統變量設置如下:

JAVA_HOME:C:\ Program Files文件\的Java \ jdk1.7.0我的servlet類,它嘗試加載驅動程序中

代碼_02 \

CLASSPATH: C:\ apache-tomcat-6.0.35 \ lib \ servlet-api.jar; C:\ ProgramFiles \ Java \ jre7 \ lib \ mysql-connector-java-5.1.22-bin ;

路徑:C:\ Program Files文件\的Java \ jdk1.7.0_02 \ BIN

現在,就我所看到的,一切看起來正常進行設置。我很感激任何關於什麼可能會導致這個問題的意見,因爲我很無能,因爲如何解決這個問題。

非常感謝。

回答

1

classpath中的這一部分是奇怪:

C:\ProgramFiles\Java\jre7\lib\mysql-connector-java-5.1.22-bin 

我本來期望一些jar文件,這裏的驅動程序類。

1

環境變量CLASSPATH僅在命令控制檯使用javajavac命令,甚至那麼只有當你不使用任何的-cp-classpath-jar參數。在部署到Tomcat的webapp的運行時期間沒有使用它。

相反,webapp的默認類路徑覆蓋了其他/WEB-INF/lib文件夾。您需要確保將JDBC驅動程序JAR(!)文件放在那裏(並且絕對不是 Servlet API JAR文件!)。

您也不應該在JRE的/lib/lib/ext文件夾中丟棄任意JAR文件。這會使您的(web)應用程序變得不便攜,因爲它們不會在JRE的/lib文件夾中沒有JDBC驅動程序JAR文件的環境中運行。對於Web應用程序,它確實需要放在/WEB-INF/lib文件夾中,以便它可以作爲Web應用程序的一部分進行分發。


無關到具體問題,newInstance()調用上的MySQL JDBC驅動程序是多餘的。只有在舊的MM驅動程序上纔有這個問題。又見What is the difference between "Class.forName()" and "Class.forName().newInstance()"?

+0

作爲補充,當談到使用_JNDI Datasource_官方[Tomcat的文檔] (http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html)建議將JDBC jar文件複製到_ $ TOMCAT_HOME/lib_。在與MySQL,Oracle DB和PostgreSQL相關的例子中,清楚地說明了這一點。這裏是引用:'將Postgres JDBC jar複製到$ CATALINA_HOME/lib。和Oracle一樣,爲了讓DBCP的類加載器能夠找到它們,這些jar也需要在這個目錄中。無論下一步採取哪個配置步驟,都必須完成此操作 – informatik01

0

您的MySQL驅動程序類路徑似有不妥:

應該是:

/path/mysql-connector-java-ver-bin.jar 

More info