我使用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应用程序访问。
答案 0 :(得分:1)
假设您拥有远程服务器的管理员权限,则需要
也可能有十几个其他问题。您确实需要访问服务器日志,以便查看特定异常。它不太可能是您的代码,更可能是远程服务器缺少驱动程序依赖性或未正确配置(连接池是数据源)
答案 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访问权限,则解决方案很简单:
(的确,如果您使用的是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
...实验