我试图从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不会!这是为什么?
如您所见,我正在尝试设置一些请求标头,但没办法。
答案 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
)