【发布时间】:2013-07-05 10:54:01
【问题描述】:
我想知道是否可以使用 GWT 的序列化程序。在使用 GWT 的 rpc-mechnism 时,GWT 在客户端对对象进行序列化,在服务端对对象进行反序列化。对于这种机制,您必须使用 GWT 的特殊 servlet (RemoteServiceServlet)。但我想使用普通的 HttpServlets,因此我必须自己序列化和反序列化对象。
【问题讨论】:
标签: gwt servlets serialization
我想知道是否可以使用 GWT 的序列化程序。在使用 GWT 的 rpc-mechnism 时,GWT 在客户端对对象进行序列化,在服务端对对象进行反序列化。对于这种机制,您必须使用 GWT 的特殊 servlet (RemoteServiceServlet)。但我想使用普通的 HttpServlets,因此我必须自己序列化和反序列化对象。
【问题讨论】:
标签: gwt servlets serialization
您需要查看的所有代码都在RemoteServiceServlet.java 中。专注于processCall 方法。
RPC.decodeRequest(payload, ...) 会给你一个 RPCRequest 对象,其中包括要调用的方法和反序列化的参数。
对RPC.invokeAndEncodeResponse() 和RPC.encodeResponseForSuccess() 方法的响应进行编码。
[编辑]
在客户端,值得看看 RPC 生成器生成的代理类,具体来说是 YourService_Proxy.java 文件。编译项目后,生成的文件会留在项目文件夹结构中的某个位置(不过,您可以使用 -gen 指示此文件夹)。
有趣的代码在RemoteServiceProxy 中,查看createStreamWritter 方法,您可以看到如何序列化您的对象。在createStreamReader 中,您可以看到如何反序列化来自服务器的消息。
【讨论】:
SerializerInt ser = new Serializer();
ser.writeValue("test");
ser.writeValue(new int[]{5,1,6});
String buffer = ser.getBuffer();
SerializerInt des = new Serializer(buffer);
des.readString()
des.readIntegerArr()
【讨论】: