我正在开发一个生成报告供下载的GWT应用程序。当我在Eclipse中启动时,它有一个这样的URL:
http://127.0.0.1:8888/MyApp.html
但是当我打包我的应用程序以便在Web服务器(即Tomcat)中进行部署时,我的URL就是这样的:
http://localhost:8080/MyApp/MyApp.html
有没有办法获取应用的基本网址?就像第二种情况中的http://localhost:8080/MyApp/一样?
答案 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
方法传递了客户端发送的HttpServletRequest
。 HttpServletRequest
有许多可用的方法可以构造客户端请求的基本URL。 HttpServletRequest.getRequestURL()从请求中检索整个网址。如果您只想要没有网页名称的基本网址,则可以使用getRemoteHost,getRemotePort和getServletPath的组合。
示例:
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访问权限)。