我的应用程序在Tomcat上运行时,在webapps文件夹中作为.war部署时无法连接到我的数据库,但是当我直接通过Eclipse运行它时它可以连接。两种情况下的代码完全相同。此外,webapps文件夹中最初可以连接到数据库的其他应用程序不能再这样做了。 jdbc代码是正确的,因为我已经使用离线应用程序或通过eclipse运行它来测试它,但是当我使用localhost在Chrome上访问它时却没有。我的tomcat服务器发生了什么?
注意:JDBC驱动程序是MS Access。
答案 0 :(得分:1)
两种情况下的代码完全相同。
不,不是;如果它完全一样,你就可以正确连接。
但是当我直接通过Eclipse运行它时它可以连接
这是否意味着您有一个主要方法来驱动正确连接的代码?你这样做的方式通常不同于网络应用程序 - 你知道吗,对吗?
如果您可以发布异常或日志消息,那将会有很大帮助。
我猜它可能是以下任何一种;猜测是必要的,因为你没有提供足够的信息来得到可靠的答案:
ClassNotFoundException
。可能是其他可能性。
更新:
由于您正在使用Access,并且不提供其他信息,我猜您正在使用相对文件路径来访问Access .mdb
文件。您在Eclipse中成功运行的命令行应用程序可以正常工作,因为您提供了相对于项目根目录的相对文件路径。部署到Tomcat时,该相对路径不再正确,因此您的应用程序无法再找到该数据库。
听起来你没有打印堆栈跟踪是否有错误,所以你输掉的信息可能会帮助你解决这个问题。
Microsoft Access不是多用户数据库。在Tomcat上运行的基于Web的应用程序肯定是多线程的。您不应该将Access用于Web应用程序。我考虑转换到另一个数据库。
答案 1 :(得分:0)
首先,您需要验证数据库文件的路径。事实上,我认为它必须是tomcat正常工作的绝对路径。最简单的方法是将数据库文件放在C:\ data或类似文件中,然后对代码中的路径进行硬编码。当然,该文件将在您的战争之外,因此不可移植(即,可部署到远程服务器)。
其次,您需要确保JDBC驱动程序可用。如果在代码中使用Class.forName来加载驱动程序,则只需要确保包含驱动程序的jar在tomcat类路径中(包括webapp的lib目录)。如果使用-Djdbc.drivers JVM标志方法,则需要将其添加到tomcat启动脚本中。