【问题标题】:How to get the GWT base URL or Module Name from the GWT server scope?如何从 GWT 服务器范围获取 GWT 基本 URL 或模块名称?
【发布时间】:2013-05-28 22:59:00
【问题描述】:

我知道您可以使用GWT.getModuleName()getHostPageBaseURL() 获取客户端的GWT 模块名称,但是可以从服务器访问它吗?

我要的是已部署应用程序的基本 URL。例如,如果 GWT 应用程序部署为 http://foo.com/deploy1/MyModule/ 我想知道的是请求来自 http://foo.com/deploy1/ 的基本 URL

简单地从 HTTP 请求中获取 URI 会给我完整的模块路径,当我真的想要基础时(它将部署在同一域的不同子路径下)

【问题讨论】:

  • 澄清一下,我可以从HttpServletRequest 获取URI,但这给了我http://foo.com/deploy1/MyModule/。我试图避免对模块名称 MyModule 进行硬编码或将其复制到属性文件中。它由 GWT 模块 xml 文件定义,但我宁愿不承担与其他文件源代码或其他文件保持同步的负担。

标签: gwt


【解决方案1】:

getContextPath() 将为您提供/deploy1 路径。

如果您需要完整的 URL,您可以轻松地从其他 HttpServletRequest 属性重构它,或者您可以从 getRequestURL 开始并调整结果以替换 path 部分。 p>

【讨论】:

  • 我不确定我是如何忽略这种方法的,但这似乎可以解决问题。有时最简单的答案就是最好的!
【解决方案2】:

你需要了解GWT中服务器和客户端的关系。

所以,您正在查看通常的 Greetings GWT RPC 存根,您会看到客户端、服务器、共享文件夹(并且您可以添加公共文件夹以放置 html、jsp 或其他可通过模块路径直接访问的文件)。

您可能没有意识到,对客户端 RPC 请求的服务器端响应者不需要由模块中的类来满足。在模块中,您将拥有 RPC 请求定义接口,您可以在其中定义服务器端响应程序的路径 @RemoteServiceRelativePath("/hello")。

要通过路径“/hello”满足 RPC 请求,您无需在任何模块的“server”文件夹中编写 servlet。你甚至可以拥有

@RemoteServiceRelativePath("/hello.jsp")

@RemoteServiceRelativePath("/hello.php")

事实上,我有一个登录 JSP,它接受来自几个模块的 RPC 请求,它必须找出发出请求的模块。

或者您可以使用 RequestBuilder 或放置 JSON javascript-include 请求。

考虑到这一点,如何将 RPC 服务器端响应程序限制为由任何模块定义,而不管它是否放置在特定模块的文件夹中?您只需让客户端通知服务器端响应者客户端属于哪个模块。使用 Map 或 HashMap 作为 RpC 传输的数据类型将非常有帮助。如果您使用的是 REquestFactory,实体的标识将能够通过实体对象命名空间告诉您的服务器模块是什么。

http://h2g2java.blessedgeek.com/2009/08/gwt-rpc.html

【讨论】:

  • +1 以获得出色的解释,但您并没有像 @ThomasBroyer 那样真正提供检索基本 URL 的问题的答案。
【解决方案3】:

您可以检查Referer http 标头:http://en.wikipedia.org/wiki/HTTP_referrer

【讨论】:

  • 我试图澄清这个问题。我可以获取 URI,但问题在于获取 URI 没有 GWT 模块名称(或在运行时获取模块名称以进行修剪)。 Referer 不会给我完整的子路径吗?
【解决方案4】:

晚了 2 年,但其他人可能有同样的问题。

无论如何,您可以使用GWT.getModuleBaseURL() 获得您想要的确切数据。

【讨论】:

  • 根据文档,这也应该可以在服务器端使用RemoteServiceServlet.getRequestModuleBasePath()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 2013-03-20
  • 2017-01-22
  • 1970-01-01
相关资源
最近更新 更多