2

从测试 servlet 加载我的驱动程序时出现问题,错误只是

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

通过 tomcat 运行 servlet - 由于 localhost:8080 页面显示在浏览器中,因此运行没有问题。servlet 正在尝试连接到 MySQL 工作台中运行的数据库。

我的 servlet 类中的代码,它尝试加载驱动程序:

        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_02\

类路径: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

现在,据我所见,一切看起来都已正确设置。我将不胜感激有关可能导致问题的任何输入,因为我对如何解决此问题一无所知。

非常感谢。

4

3 回答 3

2

环境变量CLASSPATH仅由命令控制台中的javaand命令使用javac,即使这样也仅在您不使用任何-cp,-classpath-jar参数时使用。在部署到 Tomcat 的 web 应用程序运行时未使用它。

相反,webapp 的默认类路径包括/WEB-INF/lib文件夹。您需要确保将 JDBC 驱动程序 JAR(!) 文件放入其中(绝对不是Servlet API JAR 文件!)。

您也不应该将任意 JAR 文件放入JRE/lib或文件夹中。/lib/ext这将使您的(Web)应用程序不可移植,因为它们不会在/libJRE 文件夹中没有 JDBC 驱动程序 JAR 文件的环境中运行。对于 Web 应用程序,它确实需要放在/WEB-INF/lib文件夹中,以便它可以作为 webapp 的一部分分发。


与具体问题无关newInstance(),调用在 MySQL JDBC 驱动程序上是多余的。仅在具有相关错误的旧 MM 驱动程序上才需要。另请参阅“Class.forName()”和“Class.forName().newInstance()”有什么区别?

于 2013-01-12T17:47:06.423 回答
1

类路径的这一部分很奇怪:

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

我本来希望jar这里有一些带有驱动程序类的文件。

于 2013-01-12T17:47:43.023 回答
0

您的 MySql 驱动程序的类路径似乎是错误的:

应该:

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

更多信息

于 2013-01-12T17:49:06.630 回答