2010-05-19 48 views
3

我一直在嘗試獲取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

回答

6

這說明我已經添加了最新的 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

1

您可能想要了解如何打包war文件,因爲如果您要有多個文件,這將是安裝web應用程序的最簡單方法。

你的jar文件將會進入lib目錄,並且很容易被tomcat找到。

+0

同意。這只是一個測試頁面,看看我是否很幸運能夠「默認」安裝MySQL的JDBC驅動程序。我確定他們安裝了適用於Oracle9i的驅動程序,但不幸的是,它不適用於MySQL ... – 2010-05-19 01:27:19

相關問題