无法在Tomcat环境下获取MySQL的JDBC驱动程序

问题描述:

我一直在尝试获取JDBC连接到MySQL的驱动程序类。 工作站上运行Linux,Fedora 10中 我已经手动设置CLASSPATH变量的面向Java的CLI是这样的:无法在Tomcat环境下获取MySQL的JDBC驱动程序

bash-3.2$ echo $CLASSPATH 
/home/cmao/public_html/jsp/mysql-connector-java-5.1.12-bin.jar 

这说明我已经添加了最新的MySQL连接jar归档到我的CLASSPATH变量。

我已经创建了可以发现here

和源代码此页面测试JSP页面:

<%@page language="java"%> 
<%@page import="java.sql.*"%> 
<%@page import="java.util.*"%> 
<html> 
<head> 
    <title>UTS JDBC MySQL connection test page</title> 
</head> 
<body> 
<% 
    Connection con = null; 
    out.print("Java version is : " + System.getProperty("java.version") + "<br />"); 
    out.print("Tomcat version is : " + application.getServerInfo() + "<br />"); 
    out.print("Servlet version is: " + application.getMajorVersion() + "<br />"); 
    out.print("JSP version is : " + JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion() +"<br />"); 
    //out.print("Java classpath is : " + System.getProperty("java.class.path")+ "<br />"); 
    //out.print("JSP classpath is : " + appliaction.getAttribute("org.apache.catalina.jsp_classpath") + "<br />"); 
    //out.print("Tomcat classpath is : " + System.getProperty("org.apache.tomcat.common.classpath") + "<br />"); 

    try 
    { 
     Class c = Class.forName("com.mysql.jdbc.Driver"); 
    } 
    catch(Exception e) 
    { 
     out.println("Error! Failed to obtain JDBC driver for MySQL... Missing class \"com.mysql.jdbc.Driver\"<br />"); 
    } 
%> 
</body> 
</html> 

没有那些注释掉的行会的工作,各种Jsper Expetions会抛出。

您可以检查从以下链接的错误页: classpath Error page catalina Error page tomcat Error page

看来,从我有限的JSP和Servlet,Tomcat的环境知识 “忽略” 我的Java CLASSPATH?在这种情况下,我不能配置MySQL JDBC包来让我的Servlet(JSP不过是一个Servlet)工作。

我不知道如何解决这个问题。如果我使用Eclipse或NetBeans之类的IDE并创建真正的Java“Web应用程序”,以便通过使用web.config XML配置文件来“自行配置”所有内容,会更好吗?所以我当然可以绕过这个Tomcat环境限制?

非常感谢您提前提出的建议。

+1

相关:http://stackoverflow.com/questions/2591505/java-lang-classnotfoundexception-com-mysql-jdbc-driver Duffymo说得对。当你考虑将JAR放入'/ WEB-INF/lib'中时,Eclipse/Netbeans会自动将它放入构建路径中。您不需要手动管理它。也就是说,我知道这只是一个测试,但实际上,您不应该使用* scriptlets *(这些“”事物)在JSP文件中编写原始Java代码。该代码属于真正的Java类;) – BalusC 2010-05-19 01:22:03

+1

BalusC也完全正确:JSP中没有scriptlet。如果你不使用JSTL,那么你做错了。 – duffymo 2010-05-19 01:32:31

+0

@duffymo:我敢打赌,你们会看到学生们如何完成他们的JSP任务会感到震惊 - 所有内容都直接写入JSP中。在讲座中“教”的唯一东西是一些JSP,甚至不是Servlets ...... JSTL ......嗯,我不认为讲师自己理解普通标签:)我们只是在做“相反的方式”这个uni课:) – 2010-05-19 01:39:41

这说明我已经添加了最新的 MySQL连接JAR档案我 CLASSPATH变量。

Tomcat(以及所有其他Java EE应用程序服务器)忽略任何系统CLASSPATH环境变量对您来说太糟糕了。

你应该添加JDBC驱动程序的JAR文件在以下两处之一:

  1. WEB-INF/lib中为您的网络背景下, 这意味着它仅适用于 您的应用程序(可能不是一个坏东西)
  2. 如果您使用的是版本5.x,则在Tomcat server/lib中,如果使用的是6.x版本,则在/ lib中。

我相信Tomcat 6.x要求您将JDBC驱动程序JAR放在/ lib中。

+0

哦......我明白了,所以他们这样做是有目的的......现在工作站是一个共享环境(所有学生都使用相同的环境),我认为我必须创建自己的Web应用程序并配置JDBC驱动程序我。我相信,出于安全原因,我无法访问Tomcat的lib文件夹。 感谢您的澄清。我现在将开始使用NetBeans :) – 2010-05-19 01:24:26

+0

没错。你不能指望被设置的CLASSPATH,它对每个应用程序和应用程序服务器都需要不同。最好尝试将它保存在您自己的WAR文件中。你有一个自包含的方式。 – duffymo 2010-05-19 01:31:47

+0

yaaay正确的答案。 – mafiOSo 2013-11-11 08:57:15

您可能想要了解如何打包war文件,因为如果您要有多个文件,这将是安装web应用程序的最简单方法。

你的jar文件将会进入lib目录,并且很容易被tomcat找到。

+0

同意。这只是一个测试页面,看看我是否很幸运能够“默认”安装MySQL的JDBC驱动程序。我确定他们安装了适用于Oracle9i的驱动程序,但不幸的是,它不适用于MySQL ... – 2010-05-19 01:27:19