GWT,修改使用 InputStreamReader 和 java.net.URL 类通过 Post 发送 HashMap 或其他对象的代码?

Posted

技术标签:

【中文标题】GWT,修改使用 InputStreamReader 和 java.net.URL 类通过 Post 发送 HashMap 或其他对象的代码?【英文标题】:GWT, modifying code that uses InputStreamReader and java.net.URL class to send a HashMap or other object through Post? 【发布时间】: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();

【问题讨论】:

【参考方案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 之间的通信的东西,但我想这只是我对它的新鲜感 也可以查看gwt-platform's simple spring sample

以上是关于GWT,修改使用 InputStreamReader 和 java.net.URL 类通过 Post 发送 HashMap 或其他对象的代码?的主要内容,如果未能解决你的问题,请参考以下文章

Ext-GWT TreeGrid 间接调用了 GWT-RPC 回调?为啥?

使用 GWT 连接到 SQL Server

如何在悬停时增加 gwt menuitem

您如何在不同的项目中将 JPA 对象与 GWT 一起使用?

GWT 超级开发模式 - bindAddress - 未显示更改

GWT错误:无法反序列化响应