Google Web Toolkit (GWT) Web 应用程序与 MySQL 在 Eclipse 中工作正常,但在 openSUSE 服务器上无法工作
我编写了一个托管在外部 openSUSE 服务器上的 GWT Web 应用程序。我使用 Google 的 GWT RPC 与服务器通信,并将数据从客户端发送到更新 MySQL 数据库的服务器。在 Eclipse 中一切都工作得很好,但是一旦我将 /war 目录移动到服务器(包括 java-connector 所需的 mysql-connector-java-5.1.18-bin.jar 文件),我的本地 SQL 数据库服务器没有更新。为什么它不起作用?这是某种 mysql 配置问题吗?
我已经在服务器上设置了一个数据库,其名称和表与我的本地计算机(我在其中使用 Eclipse 进行调试)上的数据库完全相同。我没有从 GWT 收到任何错误(因此服务器访问工作正常),并且我的 SQL 日志文件也没有显示任何错误。
我尝试重新启动 mysql,检查 mysql 的端口 3306 是否打开并正在侦听,禁用防火墙,并尝试为主机尝试 localhost 和 127.0.0.1。
我无法弄清楚问题是什么,请有人帮助我!我在这里要疯了!
这是我的服务器端代码,它在 Eclipse 中工作正常,但在服务器上不行!
package com.mycompany.mywebapp.server;
@SuppressWarnings("serial")
public class GreetingServiceImpl extends RemoteServiceServlet implements
GreetingService {
public String[] greetServer(String[] input) {
//Data is entered into MySQL database on server side
Connection con = null;
Statement st = null;
String url = "jdbc:mysql://127.0.0.1:3306/testdb";
String user = "username";
String password = "pass";
try{
con = DriverManager.getConnection(url,user,password); //establishes connection to database
st = con.createStatement(); //object for sending SQL statements to database
for (int i=0;i<input.length;i++){
String DataToSend = input[i];
String part1 = DataToSend.substring(0,DataToSend.indexOf("["));
String part2 = DataToSend.substring(DataToSend.indexOf("["),DataToSend.indexOf("]")+1);
//store values into mysql database
String query = "INSERT INTO boundingboxes(name, box) VALUES('"+part1+"','"+part2+"')";
st.executeUpdate(query);
}
}catch (SQLException ex){
Logger lgr = Logger.getLogger(Version.class.getName());
lgr.log(Level.SEVERE, ex.getMessage(), ex);
}finally{
//make sure to avoid null pointerexception
try{
if (st !=null){
st.close();
}
if (con != null){
con.close();
}
}catch (SQLException ex){
Logger lgr = Logger.getLogger(Version.class.getName());
lgr.log(Level.WARNING, ex.getMessage(), ex);
}
}
return input;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我找到了解决我的问题的方法:
要摆脱 NoClassDefFoundError,应用程序使用的外部 .jar 文件应直接复制到 /WEB-INF/lib/ 中。
Apache 需要 jdbc-msql 的额外配置步骤。首先,确保您已为 SQL 数据库设置正确的 GRANT 权限。
接下来,遵循他的解决方案,该解决方案取自: http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-j2ee.html#connector-j-usagenotes-tomcat
首先,安装 . $CATALINA_HOME/common/lib 中 Connector/J 附带的 jar 文件,以便容器中安装的所有应用程序都可以使用它。
接下来,通过将声明资源添加到定义 Web 应用程序的上下文中的 $CATALINA_HOME/conf/server.xml 来配置 JNDI 数据源:
I found the solution to my problems:
To get rid of the NoClassDefFoundError, the external .jar files used by your app should be copied into the /WEB-INF/lib/ directly.
Apache requires an extra configuration step for jdbc-msql. Firstly, make sure that you have set the correct GRANT permissions set up for your SQL database.
Next, follow his solution which is taken from: http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-j2ee.html#connector-j-usagenotes-tomcat
First, install the .jar file that comes with Connector/J in $CATALINA_HOME/common/lib so that it is available to all applications installed in the container.
Next, Configure the JNDI DataSource by adding a declaration resource to $CATALINA_HOME/conf/server.xml in the context that defines your web application: