如何从GWT服务器范围中获取GWT基本URL或模块名称?
我知道您可以使用如何从GWT服务器范围中获取GWT基本URL或模块名称?,gwt,Gwt,我知道您可以使用GWT.getModuleName()或getHostPageBaseURL()从客户端获取GWT模块名称,但是可以从服务器访问它吗 我想要的是已部署应用程序的基本URL。例如,如果GWT应用程序部署为http://foo.com/deploy1/MyModule/我想知道的是请求来自http://foo.com/deploy1/ 只要从HTTP请求中获取URI,我就可以得到完整的模块路径,而我真正需要的是基本路径(它将部署在同一域的不同子路径下)您可以查看RefererHTTP
GWT.getModuleName()
或getHostPageBaseURL()
从客户端获取GWT模块名称,但是可以从服务器访问它吗
我想要的是已部署应用程序的基本URL。例如,如果GWT应用程序部署为http://foo.com/deploy1/MyModule/
我想知道的是请求来自http://foo.com/deploy1/
只要从HTTP请求中获取URI,我就可以得到完整的模块路径,而我真正需要的是基本路径(它将部署在同一域的不同子路径下)您可以查看
Referer
HTTP头:您需要了解GWT中服务器和客户端之间的关系
因此,您看到的是通常的GWT RPC存根,您看到的是客户机、服务器、共享文件夹(您可以添加公用文件夹,以放置html、jsp或其他可通过模块路径直接访问的文件)
您可能没有意识到的是,模块中的类不需要满足客户端RPC请求的服务器端响应程序。在模块中,您将拥有RPC请求定义接口,在该接口中定义服务器端响应程序的路径@RemoteServiceRelativePath(“/hello”)
要通过路径“/hello”满足RPC请求,不需要在任何模块的“服务器”文件夹中编写servlet代码。你甚至可以
@RemoteServiceRelativePath("/hello.jsp")
或
事实上,我有一个登录JSP,它接受来自几个模块的RPC请求,它必须找出哪个模块发出请求
或者您可以使用RequestBuilder或放置JSON javascript包含请求
考虑到这一点,RPC服务器端响应程序如何被约束为由任何模块定义,而不管它被放置在特定模块的文件夹中?您只需让客户端通知服务器端响应程序客户端属于哪个模块。使用Map或HashMap作为RpC传输的数据类型将非常有用。在使用REquestFactory的情况下,实体的标识将能够通过实体对象名称空间告诉服务器模块是什么
将为您提供/deploy1
路径
如果您需要完整的URL,您可以很容易地从另一个
HttpServletRequest
属性重建它,或者您可以从getRequestURL
开始,调整结果以替换路径部分。2年后,但是其他人可能会有同样的问题
无论如何,您可以通过使用
GWT.getModuleBaseURL()
来获得所需的确切数据。为了澄清这一点,我可以从HttpServletRequest
获取URI,但这给了我http://foo.com/deploy1/MyModule/
。我试图避免硬编码模块名MyModule
,或将其复制到属性文件中。它是在by GWT模块xml文件中定义的,但我不想让它与其他文件源代码或其他文件保持同步。我可以获取URI,但问题在于获取URI时没有GWT模块名(或者在运行时获取要修剪的模块名)。Referer
不会给我完整的子路径吗?+1,这是一个很好的解释,但是你没有像@ThomasBroyer那样提供检索基本URL问题的答案。我不确定我是如何忽略了这个方法的,但这似乎起到了作用。有时候最简单的答案就是最好的!根据文档,在服务器端使用RemoteServiceServlet.getRequestModuleBasePath()
也可以实现这一点。
@RemoteServiceRelativePath("/hello.php")