我正在使用 url 导航到我的 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
的RPC 调用http://127.0.0.1/app/rpc
问题是当我升级到 GWT 2.8 时,我的应用程序的 RPC 调用端点现在不同且错误,具体取决于使用的 URL。例如:
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
对于上述 URL,模块始终正确加载和执行,但是 RPC 在前两种情况下失败。只有最后一个 URL 允许我的应用程序进行 RPC 调用。
可以通过将客户端服务代理转换为ServiceDefTarget
并使用setServiceEntryPoint()
. 如下:
ourInstance = (MyRemoteServiceAsync)GWT.create(MyRemoteService.class);
ServiceDefTarget serviceDefTarget = (ServiceDefTarget) ourInstance;
serviceDefTarget.setServiceEntryPoint("/app/rpc");
但是,请求负载仍然包含对不正确模块库的引用。在 RPC 请求上发送的 http 标头也具有不正确的值:
X-GWT-Module-Base:http://127.0.0.1/foo/bar/
有没有办法强制客户端的 RPC 机制使用正确的 RPC URL /app/rpc
?或者也许是一种正确设置模块库的方法?
更新 1
在 GWT 2.7 中看到相同的行为。
此外,当部署在 WAR 中时,<module-hash>.cache.js
文件不会加载,因为它也是相对于 url 请求的。这很糟糕,因为这意味着模块代码不会被缓存,因为这个 url 每次都不一样。需要在选择器中进行修复<module>.nocache.js
。有没有人在现实世界中使用带有 url 链接的 GWT?