GWT的RPC调用

首先在客户端,需要定义一个接口(这个接口的实现类则在服务器端)。这个接口要实现GWT RemoteService 接口。你可以在这个接口里面定义你需要的业务方法。另外你还可以通过一个annotation 来定义子路径:
package com.google.gwt.sample.stockwatcher.client;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
 
@RemoteServiceRelativePath("stockPrices")//子路径
public interface StockPriceService extends RemoteService {
 //客户端需要的业务方法
 StockPrice[] getPrices(String[] symbols);
}


 

实现类如下:

package com.google.gwt.sample.stockwatcher.server;

  

import com.google.gwt.sample.stockwatcher.client.StockPrice;

import com.google.gwt.sample.stockwatcher.client.StockPriceService;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

  

public class StockPriceServiceImpl extends RemoteServiceServlet implements StockPriceService {

  

 public StockPrice[] getPrices(String[] symbols) {

   // TODO Auto-generated method stub

   return null;

 }

  

}

接下来,要到web.xml中配置servlet

 

 <servlet>

   <servlet-name>stockPriceServiceImpl</servlet-name>

   <servlet-class>com.google.gwt.sample.stockwatcher.server.StockPriceServiceImpl</servlet-class>

 </servlet>

  

 <servlet-mapping>

   <servlet-name>stockPriceServiceImpl</servlet-name>

   <url-pattern>/stockwatcher/stockPrices</url-pattern>

 </servlet-mapping>

 

为了能进行异步调用,还要在客户端新增一个接口:

package com.google.gwt.sample.stockwatcher.client;

import com.google.gwt.user.client.rpc.AsyncCallback;

public interface StockPriceServiceAsync {

 void getPrices(String[] symbols, AsyncCallback<StockPrice[]> callback);

}

注意几点,这个接口的命名需要遵循规范:同步接口后面加Async

里面的方法要遵循规范:方法个数和名称完全一样,但是返回值一律没有了(因为是异步的),同时参数列表的最后,增加一个AsyncCallback,这是个泛型的容器类,里面的类别就是同步方法的返回类。这用来调用完成时做些处理。

 

接下来是真正调用的类,这个类命名没什么规定,但是要记得他是在client端的,因此有些限制。

 private ArrayList<String> stocks = new ArrayList<String>();

//创建一个代理,通过这个代理去访问后台的东西

private StockPriceServiceAsync stockPriceSvc = GWT.create(StockPriceService.class);

  

private void refreshWatchList() {

   // Initialize the service proxy.

   if (stockPriceSvc == null) {

     stockPriceSvc = GWT.create(StockPriceService.class);

   }

  

   // 实现一个匿名的Callback类

   AsyncCallback<StockPrice[]> callback = new AsyncCallback<StockPrice[]>() {

     public void onFailure(Throwable caught) {

       // TODO: Do something with errors.

     }

  

     public void onSuccess(StockPrice[] result) {

       updateTable(result);

     }

   };

  

   // 真正的调用

   stockPriceSvc.getPrices(stocks.toArray(new String[0]), callback);

 }

我们注意到,真正的调用代码上并没有出现url,那么GWT的客户端如何得知要访问哪个servlet?答案就在同步interfaceannotation中,看蓝色字体表示的单词就明白了。


你可能感兴趣的:(GWT的RPC调用)