我知道第一个是一个类,第二个是一个接口,但关键是,为什么客户端服务要扩展RemoteService而ServiceImpl类扩展RemoteServiceServlet
那么幕后究竟是什么?!
我知道第一个是一个类,第二个是一个接口,但关键是,为什么客户端服务要扩展RemoteService而ServiceImpl类扩展RemoteServiceServlet
那么幕后究竟是什么?!
您正在尝试比较苹果和橙子。请阅读文档并制作任何简单的演示项目以清楚地理解这些概念。
RemoteService是客户端的 RPC 接口应该扩展的接口。RemoteServiceServlet是服务器上 RPC 服务实现的 servlet 基类。它反序列化来自客户端的请求并序列化传出的响应。
要使用 RPC,您需要在client
包中创建和定义自己的接口应该扩展RemoteService接口并指定服务器应该实现的方法。
package com.yourproject.client;
import com.google.gwt.user.client.rpc.RemoteService;
public interface CustomInfoService extends RemoteService {
Info getInfo(String infoId);
}
然后你需要在服务器端提供这个接口的实现。这应该是server
包中的一个 servlet,它扩展了RemoteServiceServlet并实现了CustomInfoService
.
package com.yourproject.server;
import com.yourproject.client.CustomInfoService;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
public class InfoServiceImpl extends RemoteServiceServlet implements CustomInfoService {
public Info getInfo(String infoId) {
//implementation (for example getting info from database)
}
}
确保正常工作,您还需要设置 servlet 映射,创建异步接口,调用它并在生成的回调中处理结果,为通过 RPC 传递的实例类实现接口Serializable或IsSerializable 。
RemoteService是一个标记接口,它允许 GWT 找到您的 RPC/RPCAsync 接口(以验证它们/与您的实现建立链接)。
RemoteServiceServlet是接收来自客户端的调用、反序列化参数、调用您的方法、序列化您的方法返回的内容(异常或返回的对象)并将其发送给客户端的 servlet。