我尝试了几种不同的方法,以便 Tomcat 在运行我的 Web 应用程序时加载 MySQL 驱动程序。我使用的是 Ubuntu 8.04,库来自 libmysql-java 包。它们位于下面显示的目录中:
〜$ ls / usr / share / java / mysql * /usr/share/java/mysql-connector-java-5.1.5.jar
我的 CLASSPATH 包含这个文件:
~$ 回显 $CLASSPATH .:/usr/lib/jvm/java-6-sun/bin:/usr/local/tomcat/lib/servlet-api.jar:/usr/share/java/mysql-connector-java-5.1.5.jar
我甚至将 .jar 文件的副本放在我的 Web 应用程序的 WEB-INF/lib/ 目录中:
在 /usr/local/tomcat/webapps/ohms/WEB-INF/lib$ ls mysql-连接器-java-5.1.5.jar
完成这些更改后,我重新启动 Tomcat,重新编译我的类,然后再次重新启动 Tomcat。此外,我还使用以下方法导入了必要的库:import java.sql.*;
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
但是,当运行该行时,我仍然收到错误Class.forName("com.mysql.jdbc.Driver").newInstance();
我在这里做错了什么?
答案1
Tomcat 不使用 webapp 的类加载器中的 CLASSPATH。您可以在common.loader
中的行中添加路径和文件conf/catalina.properties
。当 jar 位于 WEB-INF/lib 中时,类加载器应该已经找到该类。我无法解释为什么没有找到。如果您使用的是 5.5,则可以将 jar 放在 common/lib 中,如果使用的是 tomcat6,则可以放在 lib/ 中。此路径由更高级别的类加载器加载,应该首先被拾取。
答案2
是您的应用程序抛出了异常,还是 Tomcat 本身抛出了异常?
由于您使用的是 Class.forName(),我猜您没有在 Tomcat 本身中进行 JNDI 配置,但我还是会提出这种可能性。对于 JNDI,Tomcat 也需要能够看到驱动程序,并且它无法看到您放在应用程序的 WEB-INF/lib 目录中的 JAR。如果您将驱动程序放在 Tomcat 的公共 lib 目录中,那么 Tomcat 可以看到它,您的应用程序也可以看到它。这些目录就是 David 提到的目录。