[英]Web application cannot establish connection to database
我的應用程序在 Tomcat 上運行時,在 webapps 文件夾中部署為 a.war 時無法連接到我的數據庫,但是當我直接通過 Eclipse 運行它時,它可以連接。 兩種情況下的代碼完全相同。 此外,webapps 文件夾中的其他應用程序原本可以連接到數據庫,現在也無法連接。 jdbc 代碼是正確的,因為我已經使用離線應用程序或通過 eclipse 運行它時對其進行了測試,但當我使用 localhost 在 Chrome 上訪問它時則不然。 我的 tomcat 服務器發生了什么事?
注意:JDBC 驅動程序是 MS Access 驅動程序之一。
兩種情況下的代碼完全相同。
不,這不對; 如果它完全相同,您將正確連接。
但是當我直接通過 Eclipse 運行它時它可以連接
這是否意味着您有一個主要方法來驅動正確連接的代碼? 您執行此操作的方式通常不同於 web 應用程序 - 您知道,對吧?
如果您可以發布異常或日志消息,那將有很大幫助。
我猜它可能是以下任何一種; 猜測是必要的,因為您沒有提供足夠的信息來獲得可靠的答案:
ClassNotFoundException
。可能是其他可能性。
更新:
由於您使用的是 Access,並且沒有提供其他信息,我猜您正在使用相對文件路徑來訪問 Access .mdb
文件。 您在 Eclipse 中成功運行的命令行應用程序可以正常工作,因為您提供了相對於項目根目錄正確的相對文件路徑。 當您部署到 Tomcat 時,該相對路徑不再正確,因此您的應用程序無法再找到數據庫。
聽起來您沒有打印堆棧跟蹤以查找錯誤,因此您丟失了可能幫助您解決這個問題的信息。
Microsoft Access 不是多用戶數據庫。 在 Tomcat 上運行的基於 web 的應用程序肯定是多線程的。 您不應將 Access 用於 web 應用程序。 我會考慮切換到另一個數據庫。
首先,您需要驗證數據庫文件的路徑。 事實上,我相信它必須是 tomcat 正常工作的絕對路徑。 最簡單的做法是將數據庫文件放在 C:\data 或類似文件中,然后在代碼中硬編碼路徑。 當然,該文件將在您的戰爭之外,因此不可移植(即,可部署到遠程服務器)。
其次,您確實需要確保 JDBC 驅動程序可用。 如果您在代碼中使用 Class.forName 來加載驅動程序,您只需確保包含驅動程序的 jar 位於 tomcat 類路徑(其中將包括您的 webapp)目錄中。 如果您使用 -Djdbc.drivers JVM 標志方法,則需要將其添加到 tomcat 啟動腳本中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.