MySql无法在已部署的Java Web应用程序中运行

时间:2010-12-10 21:40:29

标签: java mysql struts glassfish

我使用struts创建了一个页面。在localhost(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中完成本地部署。我只需单击项目名称,然后单击“发布”。对于远程部署,admin允许我访问FTP服务器,我只是复制WAR文件。 - MySQL服务器位于其他地方。关键是,它可以从localhost Web应用程序访问,但不能从同一个远程Web应用程序访问。

6 个答案:

答案 0 :(得分:1)

假设您拥有远程服务器的管理员权限,则需要

  1. 验证数据源“jdbc / SB”是否存在。 (资源/ JDBC / JDBC资源)
  2. 验证datasoucre中的“poolname”是否存在(资源/ JDBC /连接池)
  3. 打开相应的连接池,然后单击“ping”按钮。
  4. 如果ping失败,请在“附加属性”选项卡下验证连接参数。
  5. 也可能有十几个其他问题。您确实需要访问服务器日志,以便查看特定异常。它不太可能是您的代码,更可能是远程服务器缺少驱动程序依赖性或未正确配置(连接池是数据源)

答案 1 :(得分:0)

有些想法是 - 登录文件而不是控制台
- 在struts页面上打印日志
- 也许你没有授权或防火墙问题来访问数据库

答案 2 :(得分:0)

我敢打赌,你无权访问数据库......

尝试将其作为测试...在另一台机器上安装MySQL客户端,然后从那里连接到MySQL服务器。

如果失败则:

说你登录: 用户:测试 密码:密码

然后打开Mysql客户端并输入:

use nameOfDatabase;
GRANT ALL ON nameofDatabase.* TO 'userName'@'ipaddressOfServerOrDNSName';

应该这样做。

还有其他方式可以提供访问权限,请参阅http://dev.mysql.com/doc/refman/5.1/en/grant.html

答案 3 :(得分:0)

您确定远程服务器上的数据库设置正确吗?这听起来像是一个防火墙问题。

答案 4 :(得分:0)

  

不幸的是我无法从服务器控制台读取。

如果您具有远程服务器的shell访问权限,则解决方案很简单:

  • 更改日志记录配置,以便您的webapp记录到文件而不是/和控制台。
  • 登录并阅读文件。

(的确,如果您使用的是Tomcat,写入System.out / System.err的内容无论如何都要写入文件。也许Glassfish也是如此。)

如果您没有shell访问权限,则可能需要修改Web应用程序以提供可用于从Web浏览器下载或查看日志文件的额外页面。如果你不得不诉诸于此,请注意明显的安全问题。

答案 5 :(得分:0)

这是我的weg(狂野的猜测)......

您的本地应用服务器已安装MySql驱动程序。 JDBC资源也已正确定义。 MySql服务器可能正在您的localhost上运行。您已在NetBeans中本地开发了应用程序。

将NetBeans中的应用程序部署到本地服务器时,IDE会确保服务器已安装数据库驱动程序。部署到远程主机时,NetBeans无法执行此操作。如果使用其他部署方法,则驱动程序安装不会自动化。这是一个容易忘记的步骤。

您可以通过编写尝试加载或使用驱动程序jar文件中的某个类的Web应用程序来查明服务器上是否安装了MySql驱动器。如果访问生成异常,您可以通过在Web应用程序的WEB-INF / lib中包含MySql驱动器来获得有用的功能。

NetBeans还可以帮助人们创建和管理他们的JDBC资源定义。如果您创建的应用程序以localhost上的数据库为目标,则JDBC资源将localhost作为URL的一部分。当应用程序部署到与DB服务器相同的服务器上时,这将非常有用。如果将应用程序移动到另一台服务器,则需要更改JDBC资源以考虑数据库服务器不在本地主机上的可能性。

如果您没有远程服务器的管理员权限,则无法获取定义的资源。如果您的远程服务器是GlassFish 3.1域/实例,您可以利用application scoped resources来获取为您的应用定义的资源。

关于访问日志文件。

如果您使用asadmin部署到远程服务器上,如果您正在使用GlassFish v2.x,此命令将帮助您访问服务器日志:http://docs.sun.com/app/docs/doc/821-0179/display-log-records-1?l=en&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

...实验