如何在带有分离服务器的env中使用GWT RPC:静态内容服务器和动态内容服务器

时间:2010-02-13 17:14:39

标签: gwt rpc

尝试在我们的应用程序中使用GWT RPC。我们的应用服务静态 内容和动态内容与不同的基本网址。例如,网址 foo.jsp可能有http://localhost/context/foo.jsp服务 websphere,对于jsp中的img / js,我们会有url之类的 由{i}提供服务的http://localhost/uistatic/foo.js和GWT生成 代码将包含在http://localhost/uistatic/ ......

现在,当使用GWT RPC时,modulebaseurl GWT默认是实际的 指向http://localhost/uistatic/,这是不正确的 调用rpc服务,我们可以通过覆盖ServiceEntryPoint 以下(使用HostPageBaseURL):

serviceDef.setServiceEntryPoint(GWT.getHostPageBaseURL() + 
GWT.getModuleName() + ......); 

但是,要使用可序列化的DTO进行rpc调用,GWT加载序列化 使用modulebaseurl的策略文件,这又是错误的(http://localhost/uistatic/),任何人都知道如何覆盖它,或任何其他 建议是受欢迎的。

Thx

2 个答案:

答案 0 :(得分:1)

来自http://code.google.com/webtoolkit/doc/1.6/FAQ_Server.html#Does_the_GWT_RPC_system_support_the_use_of_java.io.Serializable

  

RPC现在在GWT编译期间生成序列化策略文件。序列化策略文件包含可以序列化的允许类型的白名单。它的名称是一个强大的哈希名称,后跟.gwt.rpc。为了启用对java.io.Serializable的支持,应用程序将通过网络发送的类型必须包含在序列化策略白名单中。此外,序列化策略文件必须作为公共资源部署到Web服务器,可通过ServletContext.getResource()从RemoteServiceServlet访问。如果未正确部署,RPC将以1.3.3兼容模式运行,并拒绝序列化实现java.io.Serializable的类型。

也许你可以覆盖/拦截对getResource的调用。

同时检查一下...... http://code.google.com/webtoolkit/doc/1.6/FAQ_Server.html#What_is_the_Same_Origin_Policy,_and_how_does_it_affect_GWT?

迈克尔

答案 1 :(得分:0)

您可以覆盖RemoteServiceServlet中的doGetSerializationPolicy来控制策略文件的加载方式。