Базовый URL для приложения GWT
Я разрабатываю приложение GWT, которое создает отчеты для загрузки. Когда я запускаю в Eclipse, он имеет такой URL:
http://127.0.0.1:8888/MyApp.html
Но когда я упаковываю свое приложение для развертывания на веб-сервере (т.е. Tomcat), мой URL-адрес выглядит следующим образом:
http://localhost:8080/MyApp/MyApp.html
Есть ли способ получить базовый URL-адрес приложения? Как http://localhost:8080/MyApp/ во втором случае?
Ответы
Ответ 1
Метод doPost
на RemoteServiceServlet
передается HttpServletRequest
, отправленным клиентом. HttpServletRequest
имеет ряд доступных методов, которые могут построить базовый URL-адрес клиентского запроса. HttpServletRequest.getRequestURL() извлекает весь URL-адрес из запроса. Если вы просто хотите использовать базовый URL без имени страницы, вместо этого вы можете использовать комбинацию getRemoteHost, getRemotePort и getServletPath.
Пример:
doPost(request, response){
String baseURL = new StringBuilder();
baseURL.append(request.getRemoteHost());
baseURL.append(":");
baseURL.append(request.getRemotePort());
baseURL.append(request.getServletPath());
}
Ответ 2
Клиентская сторона:
GWT.getHostPageBaseURL();
или
GWT.getModuleBaseURL();
Вы можете получить URL-адрес любого сервлета из HttpServletRequest
с помощью этого простого метода:
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();
}
}
Ответ 3
Для клиентской стороны вы можете использовать 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. Здесь вы можете добавить фрагмент JavaScript на странице HTML хоста, чтобы установить значение:
<script type="text/javascript" language="javascript">
var location = { baseUrl: "http://localhost:8080/myapp" };
</script>
Затем загрузите значение на стороне клиента с помощью словаря GWT:
Dictionary theme = Dictionary.getDictionary("location");
String baseUrl = theme.get("baseUrl");
Чтобы использовать это, вам придется изменить страницу хоста HTML для локальных и производственных экземпляров.
Ответ 4
Я подозреваю, что это Tomcat, а не проблема GWT. Попробуйте переименовать файл WAR вашего упакованного приложения в ROOT.war и поместив его в папку Tomapp Webapps. Tomcat обычно рассматривает такое приложение как одно для развертывания в корневом контексте (т.е. Вы получите доступ к вашему/MyApp.html).