GWT应用程序的基本URL

时间:2011-12-05 21:45:53

标签: url gwt

我正在开发一个生成报告供下载的GWT应用程序。当我在Eclipse中启动时,它有一个这样的URL:

http://127.0.0.1:8888/MyApp.html

但是当我打包我的应用程序以便在Web服务器(即Tomcat)中进行部署时,我的URL就是这样的:

http://localhost:8080/MyApp/MyApp.html

有没有办法获取应用的基本网址?就像第二种情况中的http://localhost:8080/MyApp/一样?

4 个答案:

答案 0 :(得分:17)

客户方:

GWT.getHostPageBaseURL();

GWT.getModuleBaseURL();

服务器端,您可以使用以下简单方法从HttpServletRequest获取任何servlet的URL:

public static String getBaseUrl( HttpServletRequest request ) {
    if ( ( request.getServerPort() == 80 ) ||
         ( request.getServerPort() == 443 ) ) {
      return request.getScheme() + "://" +
             request.getServerName() +
             request.getContextPath();
    } else {
      return request.getScheme() + "://" +
             request.getServerName() + ":" + request.getServerPort() +
             request.getContextPath();
    }
}

答案 1 :(得分:5)

对于客户端,您可以使用Window.Location

例如:

public static String getUrlString(String path) {
    UrlBuilder urlBuilder = new UrlBuilder();
    urlBuilder.setHost(Window.Location.getHost());
    urlBuilder.setPath(path);

    String port = Window.Location.getPort();
    if (!port.isEmpty())
        urlBuilder.setPort(Integer.parseInt(port));

    return urlBuilder.buildString();
}

另一种方法是使用GWT Dictonary。在这里,您可以在主机HTML页面中添加一小段JavaScript来设置值:

<script type="text/javascript" language="javascript">
  var location = { baseUrl: "http://localhost:8080/myapp" };
</script>

然后使用GWT Dictionary:

将值加载到客户端
   Dictionary theme = Dictionary.getDictionary("location");
   String baseUrl = theme.get("baseUrl");

要使用此功能,您必须更改本地和生产实例的HTML主页。

答案 2 :(得分:2)

doPost上的RemoteServiceServlet方法传递了客户端发送的HttpServletRequestHttpServletRequest有许多可用的方法可以构造客户端请求的基本URL。 HttpServletRequest.getRequestURL()从请求中检索整个网址。如果您只想要没有网页名称的基本网址,则可以使用getRemoteHostgetRemotePortgetServletPath的组合。

示例:

doPost(request, response){
    String baseURL = new StringBuilder();
    baseURL.append(request.getRemoteHost());
    baseURL.append(":");
    baseURL.append(request.getRemotePort());
    baseURL.append(request.getServletPath());
}

答案 3 :(得分:0)

我怀疑这是一个Tomcat,而不是GWT问题。尝试将打包的应用程序的WAR文件重命名为ROOT.war并将其放在Tomcat的webapps文件夹中。 Tomcat通常将这样的应用程序视为在根上下文中部署的应用程序(即,您将获得/MyApp.html访问权限)。