【问题标题】:Failed to obtain JDBC Driver for MySQL under Tomcat environmentTomcat环境下获取MySQL JDBC Driver失败
【发布时间】:2011-02-21 04:17:02
【问题描述】:

我一直在尝试获取用于 JDBC 连接到 MySQL 的 Driver 类。 该工作站在 Linux、Fedora 10 上运行。 我已经通过 CLI 手动设置了 Java 的类路径变量,如下所示:

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

这表明我已将最新的 mysql 连接 jar 存档添加到我的 CLASSPATH 变量中。

我创建了一个测试 JSP 页面,可以找到 here

这个页面的源代码是:

<%@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环境限制了?

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

【问题讨论】:

  • 相关:stackoverflow.com/questions/2591505/… Duffymo 做对了。当您考虑将 JAR 放到 /WEB-INF/lib 中时,Eclipse/Netbeans 会自动将它放入构建路径中。您无需手动管理它。也就是说,我知道这只是一个测试,但实际上您不应该使用 scriptlets(那些 &lt;% %&gt; 的东西)在 JSP 文件中编写原始 Java 代码。该代码属于真正的 Java 类;)
  • BalusC 也完全正确:JSP 中没有小脚本。如果你没有使用 JSTL,那你就错了。
  • @duffymo :我敢打赌,你们看到学生如何完成 JSP 作业会感到震惊——所有内容都直接写入 JSP。讲座中唯一“教”的东西是一点 JSP,甚至没有 Servlets... JSTL...嗯,我认为讲师自己并不理解常见的标签 :) 我们只是在做“相反的方式”这个uni类:)
  • 太糟糕了。了解 JSP 被编译成 servlet 很重要,因此无论您是否知道,您都在编写它们。来自 O'Reilly 的 Hans Bengston 的 JSP 书籍是最好的,因为它从一开始就教授 JSTL。

标签: java jsp tomcat jdbc


【解决方案1】:

这表明我添加了最新的 mysql连接jar存档到我的 CLASSPATH 变量。

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

您应该在以下两个位置之一添加 JDBC 驱动程序 JAR:

  1. WEB-INF/lib 用于您的 Web 上下文, 这意味着它仅适用于 您的应用(可能不是坏事)
  2. 如果您使用的是 5.x 版,则在 Tomcat 服务器/lib 中;如果您使用的是 6.x 版,则在 /lib 中。

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

【讨论】:

  • 哦...我明白了,所以他们是故意这样做的...现在工作站是一个共享环境(我相信所有学生都使用相同的环境),我认为我必须创建自己的Web 应用程序并自己配置 JDBC 驱动程序。我相信出于安全原因,我无法访问 Tomcat 的 lib 文件夹。感谢您的澄清。我现在将开始使用 NetBeans :)
  • 没错。您不能指望 CLASSPATH 被设置,并且每个应用程序和应用程序服务器都需要不同。最好尝试将其保存在您自己的 WAR 文件中。这样你就有了一个独立的包。
【解决方案2】:

您可能想学习如何打包一个 war 文件,因为如果您要拥有多个文件,那将是安装 Web 应用程序的最简单方法。

您的 jar 文件将放在 lib 目录中,并且很容易被 tomcat 找到。

【讨论】:

  • 同意。这只是一个测试页面,看看我是否有幸“默认”安装了一个工作的 MySQL JDBC 驱动程序。我确信他们为 Oracle9i 安装了驱动程序,但不幸的是没有为 MySQL 安装驱动程序......
猜你喜欢
  • 2023-04-03
  • 2020-06-27
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 1970-01-01
相关资源
最近更新 更多