从不同的网址

时间:2016-10-27 02:46:51

标签: gwt gwt-rpc gwt-2.7 gwt-2.8

我正在使用网址导航到我的GWT应用内的不同屏幕。例如:

http://127.0.0.1/home
http://127.0.0.1/info/contact-us
http://127.0.0.1/app/index.html

我有一个servlet,它提供包含GWT所需脚本元素的html(我的GWT模块名称为“app”):

<script type="text/javascript" language="javascript" src="/app/app.nocache.html">
</script>

这适用于GWT 2.6.1。在浏览器开发工具中,可以看到我RemoteService的{​​{1}}发出了RPC调用

问题是当我升级到GWT 2.8 时,我的应用程序的RPC调用端点现在是不同的,这取决于使用的URL。例如:

http://127.0.0.1/app/rpc

对于上述URL,模块始终正确加载并执行,但在前两种情况下RPC失败。只有最后一个URL允许我的应用程序进行RPC调用。

可以通过将客户端服务代理强制转换为http://127.0.0.1/home -> http://127.0.0.1/rpc http://127.0.0.1/info/contact-us -> http://127.0.0.1/info/rpc http://127.0.0.1/app/index.html -> http://127.0.0.1/app/rpc 并使用ServiceDefTarget来设置RPC端点。如下:

setServiceEntryPoint()

但是,请求有效内容仍包含对错误模块库的引用。在RPC请求上发送的http标头也具有不正确的值:

ourInstance = (MyRemoteServiceAsync)GWT.create(MyRemoteService.class);
ServiceDefTarget serviceDefTarget = (ServiceDefTarget) ourInstance;
serviceDefTarget.setServiceEntryPoint("/app/rpc");

有没有办法强制客户端的RPC机制使用正确的RPC URL X-GWT-Module-Base:http://127.0.0.1/foo/bar/ ?或者也许是正确设置模块库的方法?

更新1

在GWT 2.7中看到相同的行为。

此外,在WAR中部署时,/app/rpc文件不会加载,因为它也是相对于URL请求的。这非常糟糕,因为这意味着模块代码不会被缓存,因为这个URL每次都不同。需要在选择器<module-hash>.cache.js中进行修复。 是否有人在现实世界中实际使用GWT与网址链接?

1 个答案:

答案 0 :(得分:1)

通过在html文档的<meta>元素中指定<head>元素,引导程序nocache.js选择器javascript将选择正确的模块baseUrl。 baseUrl必须是完全指定的绝对URL,并以/结尾。

对于我的例子,确切的元素是:

<head>
   ...
   <meta name="gwt:property" content="baseUrl=http://127.0.0.1/app/" />
   ...
</head>