java - GWT/Mysql/Java 连接数据库

标签 java mysql gwt

我对 gwt 还很陌生,弄清楚与 mysql 数据库的连接让我很困惑。由于直接教程很少,所以我在这里提出了另一个 stackoverflow 问题。

http://stackoverflow.com/questions/8335322/java-gwt-mysql-connection-refused/8388422#8388422

虽然我无法正确理解。很少有事情,这个项目没有使用 GAE,只是使用 GWT,正如另一个问题中先前的答案所建议的那样。是的,我可以通过另一个示例程序连接到我的数据库,因此数据库的链接是打开的。我还将 mysql 驱动程序导入到/WEB-INF/lib 中,并将其添加到我的 java 构建路径中。

问题的关键是,我不知道为什么我无法连接,而且我的控制台毫无用处,如果有人能立即看到我做错了什么那就太棒了,或者如果有的话一种打印出更多错误消息的方法,这会很棒,而且我不知道如何查看服务器端资源的控制台(我在某处读到可能有更多错误,然后显示了什么?)谢谢。

这是我的 GreetingServiceImpl.java 相关代码

 private final Connection connect() {
    String driver = "com.mysql.jdbc.Driver";
    String dblink = "jdbc:mysql://localhost:3306/";
    String dbname = "gwttest";
    String dbuser = "user";
    String dbpass = "test";
    try {
      Class.forName(driver).newInstance();
    } catch (InstantiationException e) {
      e.printStackTrace();
    } catch (IllegalAccessException e) {
      e.printStackTrace();
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
    Connection conn = null;
    try {
      conn = DriverManager.getConnection(dblink + dbname, dbuser, dbpass);

    } catch (SQLException e) {
      System.err.println("mysql connection error: ");
      e.printStackTrace();
    }
    return conn;
  }

这是我的helloserver.java相关代码

Button b = new Button("test");
vPanel.add(b);
b.addClickHandler(new ClickHandler() {
  @Override
  public void onClick(ClickEvent event) {
      GreetingServiceAsync testservice= (GreetingServiceAsync) GWT.create(GreetingService.class);
    testservice.echo("test", new AsyncCallback<String>() {

        @Override
        public void onFailure(Throwable caught) {
            // TODO Auto-generated method stub
             vPanel.add(new Label("error"));
             //vPanel.add(new Label(caught.printStackTrace());
             caught.printStackTrace();
        }

        @Override
        public void onSuccess(String result) {
            // TODO Auto-generated method stub
            vPanel.add(new Label(result));
        }

    });
  }
});

这是我在运行并单击按钮时收到的错误消息(除了我的 html 中弹出的“错误”)

 com.google.gwt.user.client.rpc.StatusCodeException: 404 <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 404 NOT_FOUND</title>
</head>
<body><h2>HTTP ERROR: 404</h2><pre>NOT_FOUND</pre>
<p>RequestURI=/helloserver/greet</p><p><i><small><a href="http://jetty.mortbay.org/">Powered by Jetty://</a></small></i></p><br/>                                                
</body>
</html>
at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:209)
at com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:287)
at com.google.gwt.http.client.RequestBuilder$1.onReadyStateChange(RequestBuilder.java:395)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338)
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:279)
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:242)
at sun.reflect.GeneratedMethodAccessor23.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
at java.lang.Thread.run(Unknown Source)

最佳答案

该错误表明 RPC 存在问题。数据库连接问题应该导致异常序列化到客户端,而不是给出 404。检查 web.xml 和 servlet 是否配置正确。请参阅:https://developers.google.com/web-toolkit/doc/latest/tutorial/RPC .

如果存在任何 JDBC 错误,那么它们应该在 DevMode 窗口中可见,或者在服务器的日志目录中(如果在服务器上运行)可见。看起来根本没有到达 GreetingServiceImpl 类,因此在那里看不到任何东西。

将 JDBC 代码提取到单独的类中,并与 GWT 分开进行测试可能会更容易。在将所有内容组合在一起之前先让一件事发挥作用。通过 main 方法或 JUnit 测试运行它,然后您就知道问题是出在 JDBC 代码还是其他地方。

关于java - GWT/Mysql/Java 连接数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15102458/

相关文章:

java - 我可以在 Dart 中使用 GWT 库吗?

java - Gwt youtube 数据 api v3

java - 创建同一个类的实例时,出现类的 noClassDefFoundError 错误。为什么会这样?

java - org.hibernate.exception.GenericJDBCException : could not insert:

mysql - 将字符串更改为日期时间,然后将数据复制到新表并进行比较

MySQL 在 Mac OS X 上更改 root 默认密码

java - gwt-maven-插件 : Plugin requires Maven version 2. 1

java - 如何配置GC不让世界停止?

java - 我应该为 Socket 上的每个读/写创建一个新线程吗?

java - org.slf4j.impl.StaticLoggerBinder.SINGLETON 错误