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

时间:2011-05-07 18:46:59

标签: java ajax gwt rpc

我是GWT的新手,并且一直试图拼凑一些东西,以便能够让一个单独的GWT应用程序与spring应用程序进行交互。我已经能够在我有一个扩展RemoteServiceServlet的类的地方工作,它现在能够成功地向我的spring应用程序发出GET请求并获得响应。虽然这是一个很好的起点,但我想弄清楚现在如何能够通过POST方法将实际对象从GWT(例如HashMap进行测试)发送到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();
}

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

最干净的方法是使用纯GWT堆栈(即gwt-dispatch,杜松子酒和guice。)对于这种方法,请看一下gwt-platform项目,干净的gwt客户端/服务器和DI框架。合而为一。

如果您没有足够的时间来更换技术堆栈并且您的服务器已经构建完毕,或者您对弹簧DI框架更加满意。您可以采用类似于spring4gwt项目的方法来集成spring servlet。

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

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