如何在具有分离服务器的环境中使用 GWT RPC:静态内容服务器和动态内容服务器
Posted
技术标签:
【中文标题】如何在具有分离服务器的环境中使用 GWT RPC:静态内容服务器和动态内容服务器【英文标题】:how to Use GWT RPC in env with separated server: static content server and dynamic content server 【发布时间】:2010-02-13 17:14:39 【问题描述】:尝试在我们的应用程序中使用 GWT RPC。我们的应用程序服务于静态
具有不同基本 url 的内容和动态内容。例如,网址
到 foo.jsp 可能有 http://localhost/context/foo.jsp
服务于
websphere,对于那个jsp里面的img/js,我们会有类似的url
http://localhost/uistatic/foo.js
,由 iis 提供服务,并生成 GWT
代码将被包含为http://localhost/uistatic/
......
现在,当使用 GWT RPC 时,GWT 默认的 modulebaseurl 实际上会
指向http://localhost/uistatic/
,这是不正确的,因为
调用 rpc 服务,我们可以通过做覆盖 ServiceEntryPoint
以下(使用 HostPageBaseURL):
serviceDef.setServiceEntryPoint(GWT.getHostPageBaseURL() +
GWT.getModuleName() + ......);
但是,要使用可序列化的 DTO 进行 rpc 调用,GWT 加载序列化
使用 modulebaseurl 的策略文件,这又是错误的 (http://localhost/uistatic/
),任何人都知道如何覆盖它,或任何其他
欢迎提出建议。
谢谢
【问题讨论】:
【参考方案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?
迈克尔
【讨论】:
【参考方案2】:您可以在 RemoteServiceServlets 中覆盖 doGetSerializationPolicy 以控制策略文件的加载方式。
【讨论】:
以上是关于如何在具有分离服务器的环境中使用 GWT RPC:静态内容服务器和动态内容服务器的主要内容,如果未能解决你的问题,请参考以下文章
GWT:客户端过程和 rpc 请求总是被多次调用,具有多个线程 id
RPC 的 GWT Servlet 模型是单线程模型,还是如何通过 GWT 实现高可用性?