【问题标题】:Calling remote Servlet from GWT从 GWT 调用远程 Servlet
【发布时间】:2011-06-23 09:16:31
【问题描述】:

我正在尝试从 GWT 调用远程 servlet,实际上 GWT-RPC 似乎不起作用,所以我正在尝试使用 RequestBuilder。

这里是sn-p的代码:

    String url = "http://some-remote-host:8888/GWTJSTest/SomeServlet?name=" + textBox.getText();
    RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.GET, url);
//              requestBuilder.setHeader("Origin", "*");
//              requestBuilder.setHeader("Access-Control-Allow-Origin", "*");
    try
    {
        requestBuilder.sendRequest(null, new RequestCallback()
        {
            public void onResponseReceived(Request request, Response response)
            {
                if (response.getStatusCode() == 200)
                {
                    Window.alert(response.getText());
                }else
                {
                    Window.alert(response.getText() + " : " + response.getStatusCode() + response.getStatusText());
                }
            }

            public void onError(Request arg0, Throwable arg1)
            {
                Window.alert(arg1.toString());

            }
        });
    } catch (RequestException e)
    {
        Window.alert("CATCH BLOCK: " + e.getMessage());
        e.printStackTrace();
    }

实际上,IE8 会在出现警告消息后返回数据,而 Firefox 则不会!这是为什么呢?

如您所见,我正在尝试设置一些请求标头但没有办法。

【问题讨论】:

  • 你不能调用其他服务器方法,只能调用脚本的服务器方法。你可以在你的服务器中使用代理servlet来调用其他服务器的方法。

标签: gwt gwt-rpc same-origin-policy


【解决方案1】:

如果您尝试向自己的服务器和端口(与您的 GWT 页面所在的端口相同)发出请求,请将第一行替换为:

String url = "/GWTJSTest/SomeServlet?name=" + textBox.getText();

如果您尝试与其他服务器或您自己服务器上的不同端口通信,Same Origin Policy 将阻止您这样做。您需要从自己的服务器代理它。

【讨论】:

    【解决方案2】:

    远程 servlet 需要设置您拥有的 CORS 标头:

    Access-Control-Allow-Origin: *
    

    如果您不希望其他域与远程 servlet 交互,您也可以只指定您自己的域而不是 *

    【讨论】:

      【解决方案3】:

      我已添加: <add-linker name="xs" />.gwt.xml

      然后将GWT-PRC替换为JsonpRequestBuilder(在服务器和客户端之间转换JSONP

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-25
        • 1970-01-01
        • 2011-07-09
        • 2012-04-05
        • 1970-01-01
        • 1970-01-01
        • 2012-02-13
        相关资源
        最近更新 更多