如何从GWT服务器范围获取GWT基本URL或模块名称?

时间:2011-06-27 20:00:58

标签: gwt

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

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

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

4 个答案:

答案 0 :(得分:9)

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

如果您需要完整的网址,则可以轻松地从其他HttpServletRequest属性重新构建网址,或者您可以从getRequestURL开始并调整结果以替换路径一部分。

答案 1 :(得分:3)

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

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

您可能没有意识到的是,模块内的类不需要满足客户端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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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