【问题标题】:GWT, modifying code that uses InputStreamReader and java.net.URL class to send a HashMap or other object through Post?GWT,修改使用 InputStreamReader 和 java.net.URL 类通过 Post 发送 HashMap 或其他对象的代码?
【发布时间】:2011-05-07 18:46:58
【问题描述】:

我对 GWT 还很陌生,并且一直在尝试拼凑一些东西,以便能够让单独的 GWT 应用程序与 spring 应用程序交互。我已经能够在我有一个扩展 RemoteServiceServlet 的类的地方完成这项工作,现在它能够成功地向我的 spring 应用程序发出 GET 请求并获得响应。虽然这是一个很好的起点,但我想弄清楚现在如何能够通过 POST 方法将实际对象从 GWT(例如用于测试的 HashMap)发送到 Spring。

如果有任何建议可以为我指明正确的方向,我将不胜感激,我对此知之甚少,并且一直在查看教程,但我一直有点困惑,不太确定如何尝试实施这。关于这一点,在下面的代码中,我不太确定在什么时候实际调用了 spring 应用程序,是在创建 new URL 的时候吗?

下面是我用来从 GWT 发出 GET 请求的代码示例:

private String getSpringResponse(String message) {

    BufferedReader reader = null;
    StringBuilder sb = new StringBuilder();
    try {
        URL url = new URL("http://localhost:8080/spring-hibernate-mysql/test/test/"+message+"/");
        reader = new BufferedReader(new InputStreamReader(url
                .openStream()));

        while(reader.ready()){
            sb.append(reader.readLine());
        }

        reader.close();

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return sb.toString();
}

【问题讨论】:

    标签: java ajax gwt rpc


    【解决方案1】:

    您可以通过 URLConnection 创建 POST 请求:http://www.exampledepot.com/egs/java.net/Post.html

    如果您的 Spring 服务器使用 JSON 回复,您可以使用 GSON 映射到您的类,或者如果它返回 XML,您可以使用 use JAXB。

    也可以通过cross-site requests 直接从 GWT 与 Spring 服务器通信。在这种情况下,Spring 服务器应该返回 JSON。

    【讨论】:

    • 谢谢,是的,我刚刚了解了跨站点请求的 JSON 返回,但我已经有不使用 JSON 的 javascript/spring 代码,所以我更喜欢一种可以避免重写的方法。至于 URL Connection 的 POST 方法,您知道我是否可以通过它发送对象(例如即使只是一个基本的 HashMap)?感谢您的建议
    • 你必须序列化对象。这就是 JSON 或 XML 的用途。你的 Spring 服务器接受什么?
    【解决方案2】:

    最简洁的方法是使用纯 GWT 堆栈(即 gwt-dispatch、gin 和 guice。)对于这种方法,请查看 gwt-platform 项目,clean gwt 客户端/服务器和 DI 框架全部滚动合二为一。

    如果您没有精力更改技术堆栈并且您的服务器已经构建,或者您更喜欢使用 spring DI 框架。您可以采用类似于 spring4gwt 项目的方法来集成 spring servlet。

    使用spring4gwt,您似乎只需要确定要集成到 GWT 客户端的 spring 服务并在客户端上定义标准 RemoteService 类。

    最新版本的 GWT 将自动处理所有标记为 Serializable(包括 HashMap)或 IsSerializable(用于自定义数据类)的类的序列化。请参阅gwt serialization docs。

    【讨论】:

    • 感谢您的信息,我非常愿意在服务器端使用 Spring,我听说过 spring4gwt,所以我会研究一下,老实说,我似乎很难理解其中的一些关于 gwt 和 spring 之间的通信的东西,但我想这只是我对它的新鲜感
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 2010-09-13
    相关资源
    最近更新 更多