【问题标题】:GWT getting path of the applicationGWT 获取应用的路径
【发布时间】:2012-08-31 04:57:24
【问题描述】:

我有一个 GWT 应用程序,当我在运行应用程序后在本地部署主页时是 localhost:8888/myapp.html 但是当我们将它部署到服务器时,在应用程序运行其主页后是 107.20.239.198:8080/myapp/ myapp.html。

现在我的应用程序的所有相关路径都失败了。我需要确切路径的地方,我无法得到。因为现在路径不同了。例如,当我单击应用程序中的特定小部件时 -> 它重定向到路径 '/# + "place no.1" + "place no.2" '

但现在它在服务器上部署时会失败,因为现在它需要路径 -> '/myapp/# + "place no.1" + "place no.2" '。

那么我怎样才能使它通用,以便我可以同时处理这两个条件。

谁能帮我解决这个问题?

附:我希望我能很好地表达我的问题,否则你可以评论它,以便我更好地解释它。

【问题讨论】:

  • 您好,我也想在服务器上获取我的 gwt 应用程序路径以访问服务器上的文件。我尝试了 ServletContext.getRealPath() 但无法解决它(收到关于调用非静态方法的错误!)。我还在 GWT.getModuleBaseUrl() 或 GWT.getHostPageBaseUrl() 上得到了 tomcat UnsatisfiedLinkError。我可以知道您是否找到任何解决方案?

标签: java gwt


【解决方案1】:

从您上面提到的本地 url,看起来您正在 AppEngine 的服务器上运行它。最好先在本地部署您的应用程序Tomcat。并确保一切正常。这些是您可以用来在应用程序启动时获取relative/absolute urls 的几种方法。

GWT.getHostPageBaseURL(); GWT.getModuleBaseURL(); GWT.getModuleName();

希望对你有帮助。

【讨论】:

  • 如果我使用你提到的我得到这个错误:com.google.gwt.core.client.impl.Impl.getModuleName()Ljava/lang/String; RequestURI=/***Servlet 引起:java.lang.UnsatisfiedLinkError: com.google.gwt.core.client.impl.Impl.getModuleName()Ljava/lang/String;
  • 希望您在客户端使用这些方法,并将所需的资源路径与上述方法的输出一起附加。您可以从上面选择任何一种方法,只选择 Sysout 方法的输出以查看它返回的内容。
  • 您好,感谢您的回答,我在 GWT.getModuleBaseUrl() 或 GWT.getHostPageBaseUrl() 上收到了 tomcat UnsatisfiedLinkError。我究竟做错了什么? java.lang.UnsatisfiedLinkError: com.google.gwt.core.client.impl.Impl.getModuleBaseURL()Ljava/lang/String;
  • @Ehsan 您使用的是哪个浏览器。这些方法必须在client 包中调用。您也可以在 shared 包中调用它,前提是它正在客户端执行。客户端我的意思是通过浏览器。 UnsatisfiedLinkError 即将到来,因为您正试图在服务器端运行它。在内部,GWT.getHostPageBaseURL(); 将调用浏览器的原生 javascript 方法。
  • 感谢您的回复。我认为我的问题是我在服务器上调用它。但是服务器端有什么方法吗?
【解决方案2】:

您应该在应用程序中使用相对于您的上下文的相对路径。使用request.getContextPath(),您将能够获得正确的上下文路径。但是,如果您将在代码中使用“/”,您将始终引用您的上下文路径,无论上下文是什么。因此,要创建指向内部页面的链接,您将使用 /internal.html。在您的本地计算机上将转换为 localhost:8888/internal.html,但在服务器上它将是:107.20.239.198:8080/myapp/internal.html。

【讨论】:

  • 但我在演示者类中,所以我如何访问 HttpRequest ?
  • 您应该使用 request.getContextPath() 以及 @pratikabu 仅在您想要获取/显示 url 时提到的方法。我建议您应该使用上下文的相对路径。如果您像 /anotherPage.html 一样引用它,则不需要将某些内容重定向到另一个内部页面的路径。而是使用 '/# + "place no.1" + "place no.2" ' 构建动作,你应该尝试:'/ + "place no.1" '
  • 我正在重定向到一个地方而不是 .html 页面,所以我必须像这样构建我的 URL,而且我不能使用 request.getContextPath(),因为我在演示者类中:(
【解决方案3】:

正如@Anuj Kulkarni 所述,您应该真正使用相对路径,否则您将始终遇到这些问题。但我有 1 个特殊的问题,我无法做到这一点。因此,如果您愿意,可以使用:

if (!GWT.isProdMode())

您可以在此处为您的开发环境和部署定义不同的 url。 但是,如果您在代码中多次使用它,则确实意味着您做错了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2014-11-07
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    相关资源
    最近更新 更多