从GWT调用远程Servlet

时间:2011-02-08 11:43:12

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

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

以下是代码段:

    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不会!这是为什么?

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

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

远程servlet是需要设置CORS标头的远程servlet:

Access-Control-Allow-Origin: *

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

答案 2 :(得分:0)

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

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