Web应用程序无法与数据库建立连接

时间:2011-08-09 21:08:16

标签: java database eclipse tomcat war

我的应用程序在Tomcat上运行时,在webapps文件夹中作为.war部署时无法连接到我的数据库,但是当我直接通过Eclipse运行它时它可以连接。两种情况下的代码完全相同。此外,webapps文件夹中最初可以连接到数据库的其他应用程序不能再这样做了。 jdbc代码是正确的,因为我已经使用离线应用程序或通过eclipse运行它来测试它,但是当我使用localhost在Chrome上访问它时却没有。我的tomcat服务器发生了什么?

注意:JDBC驱动程序是MS Access。

2 个答案:

答案 0 :(得分:1)

  

两种情况下的代码完全相同。

不,不是;如果它完全一样,你就可以正确连接。

  

但是当我直接通过Eclipse运行它时它可以连接

这是否意味着您有一个主要方法来驱动正确连接的代码?你这样做的方式通常不同于网络应用程序 - 你知道吗,对吗?

如果您可以发布异常或日志消息,那将会有很大帮助。

我猜它可能是以下任何一种;猜测是必要的,因为你没有提供足够的信息来得到可靠的答案:

  1. 在一个配置下运行时,JDBC驱动程序JAR不可用;在这种情况下,您会看到ClassNotFoundException
  2. 您尚未在Tomcat中正确配置JNDI data source
  3. 您没有将JDBC驱动程序JAR放在Tomcat / lib目录中。
  4. 可能是其他可能性。

    更新:

    由于您正在使用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启动脚本中。