簡體   English   中英

MySql在已部署的Java Web應用程序中不起作用

[英]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應用程序訪問它。

假設您具有遠程服務器上的管理員權限,則需要

  1. 驗證數據源“ jdbc / SB”是否存在。 (資源/ JDBC / JDBC資源)
  2. 驗證datasoucre中的“池名”是否存在(資源/ JDBC /連接池)
  3. 打開適當的連接池,然后單擊“ ping”按鈕。
  4. 如果ping失敗,請在“其他屬性”選項卡下驗證連接參數。

可能還有其他十幾個問題。 您確實需要訪問服務器日志,以便查看具體的異常情況。 這不太可能是您的代碼,更可能是遠程服務器缺少驅動程序依賴性或配置不正確(連接池是數據源)

一些想法是
-登錄到文件而不是控制台
-在您的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

您確定遠程服務器上的數據庫設置正確嗎? 聽起來好像是防火牆問題。

不幸的是,我無法從服務器控制台讀取信息。

如果您可以通過外殼訪問遠程服務器,則解決方案很簡單:

  • 更改日志記錄配置,以便您的Web應用程序將日志記錄到文件而不是/控制台。
  • 登錄並閱讀文件。

(實際上,如果您使用的是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM