[英]Java application deployed on Tomcat doesn't connect to jdbc-mysql
[英]MySql doesn't work from deployed java web app
我使用struts制作了一個頁面。 在本地主機(glassfish)上運行時,它工作正常。 但是,當我將WAR文件復制到遠程服務器並從那里運行應用程序時,登錄表單不起作用。 這意味着在mysql數據庫上連接時出了點問題。
我該如何解決?
程式碼片段:
Connection conn = null;
Statement stmt = null;
try{
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("jdbc/SB");
conn = ds.getConnection();
stmt = conn.createStatement();
ResultSet rs = null;
if(stmt.execute("SELECT * FROM users WHERE username='"+loginform.getUsername()+"' AND geslo=MD5('"+loginform.getPassword()+"') LIMIT 1;"))
{
rs = stmt.getResultSet();
}
rs.next();
不幸的是,我無法從服務器控制台讀取信息。 我應該怎么做才能看到異常(遠程日志記錄?)?
感謝回復。
更新:-本地和遠程GlassFish 3.0.1均在運行。 -我的工作環境是NetBeans 6.9.1。 -本地部署只需在NetBeans中完成。 我只是單擊項目名稱,然后單擊發布。 對於遠程部署,管理員為我提供了訪問FTP服務器的權限,我僅在其中復制了WAR文件。 -MySQL服務器位於其他位置。 關鍵是,可以從localhost Web應用程序訪問它,但不能從同一遠程Web應用程序訪問它。
假設您具有遠程服務器上的管理員權限,則需要
可能還有其他十幾個問題。 您確實需要訪問服務器日志,以便查看具體的異常情況。 這不太可能是您的代碼,更可能是遠程服務器缺少驅動程序依賴性或配置不正確(連接池是數據源)
一些想法是
-登錄到文件而不是控制台
-在您的Struts頁面上打印日志
-也許您沒有授予權限或防火牆問題即可訪問數據庫
我敢打賭,您無權訪問數據庫...
嘗試將其作為測試...在另一台計算機上安裝MySQL客戶端,然后從那里連接到MySQL服務器。
如果失敗,則:
假設您使用以下身份登錄:用戶:test密碼:password
然后打開Mysql客戶端並輸入:
use nameOfDatabase;
GRANT ALL ON nameofDatabase.* TO 'userName'@'ipaddressOfServerOrDNSName';
那應該做。
還有其他授予訪問權限的方法,請參見http://dev.mysql.com/doc/refman/5.1/en/grant.html
您確定遠程服務器上的數據庫設置正確嗎? 聽起來好像是防火牆問題。
不幸的是,我無法從服務器控制台讀取信息。
如果您可以通過外殼訪問遠程服務器,則解決方案很簡單:
(實際上,如果您使用的是Tomcat,則無論如何,寫入System.out / System.err的內容都會寫入文件。也許對Glassfish也是這樣。)
如果您沒有外殼程序訪問權限,則可能必須修改Web應用程序以提供額外的頁面,該頁面可用於從Web瀏覽器下載或查看日志文件。 如果您必須訴諸於此,請注意明顯的安全問題。
這是我的韋格(眼神guess測)....
您的本地應用服務器已安裝MySql驅動程序。 JDBC資源也已正確定義。 MySql服務器可能正在您的本地主機上運行。 您已經在NetBeans中本地開發了應用程序。
當您將應用程序從NetBeans部署到本地服務器上時,IDE確保該服務器已安裝數據庫驅動程序。 部署到遠程主機時,NetBeans無法做到這一點。 如果使用其他部署方法,則無法自動安裝驅動程序。 這是一個容易忘記的步驟。
您可以通過編寫一個嘗試加載或使用驅動程序jar文件中的類之一的Web應用程序來確定服務器上是否安裝了MySql驅動器。 如果訪問產生異常,則可以通過將MySql驅動器包含在Web應用程序的WEB-INF / lib中來獲得某些工作。
NetBeans還可以幫助人們創建和管理其JDBC資源定義。 如果您創建針對本地主機上的數據庫的應用程序,則JDBC資源會將本地主機作為URL的一部分。 當應用程序與數據庫服務器部署在同一服務器上時,這將非常有用。 如果將應用程序移動到另一台服務器,則需要更改JDBC資源以解決DB服務器不在本地主機上的可能性。
如果您沒有對遠程服務器的管理員訪問權限,則將難以獲取定義的資源。 如果遠程服務器是GlassFish 3.1域/實例,則可以利用應用程序范圍的資源來獲取為應用程序定義的資源。
關於訪問日志文件。
如果使用asadmin部署到遠程服務器上,則在使用GlassFish v2.x時,此命令將幫助您訪問服務器日志: http : //docs.sun.com/app/docs/doc/821-0179 / display-log-records-1?l = zh-CN&a = view 。 您也可以通過管理控制台訪問日志。
如果使用rcp部署應用程序,請將其復制到遠程服務器的autodeploy目錄中,則可能需要查看是否可以將日志復制到本地計算機上。
例如...如果您的管理員告訴您使用ftp命令進行部署,如下所示:
ftp> cd /a/b/glassfish/domains/domain1/autodeploy
ftp> put MyGreatWebapp.war
您可以通過執行以下操作來獲取日志:
ftp> cd /a/b/glassfish/domains/domain1/logs
ftp> get server.log
實驗....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.