2011-02-08 42 views
0

我想從GWT調用遠程servlet,實際上GWT-RPC似乎不起作用,所以我正在嘗試使用RequestBuilder進行操作。從GWT調用遠程Servlet

下面的代碼片段:

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

你不能調用其他服務器的方法,你只能只能調用腳本的服務器方法..您可以在服務器中使用代理servlet來調用其他服務器的方法。 – 2011-02-08 14:06:38

回答

0

我說: <add-linker name="xs" />.gwt.xml

然後替換GWT-PRCJsonpRequestBuilder(轉化的服務器和客戶端之間JSONP

0

如果你想使你自己的服務器和端口(同一個,你的GWT頁面上)的請求,替換第一行:

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

如果你想與另一臺服務器或者您自己的服務器上的其他端口通話,Same Origin Policy會阻止您這麼做。你需要從你自己的服務器代理它。

0

遠程servlet的是,需要設置CORS頭,你有一個:

Access-Control-Allow-Origin: * 

或者,也可以只是你自己的域名,而不是*如果你不希望其他領域與互動遠程servlet。