Как получить абсолютный URL-адрес webapp из ExternalContext?
Я пытаюсь получить корневой URL-адрес веб-приложения из ExternalContext, но не могу понять, какой метод использовать...
Ответы
Ответ 1
Вы можете получить ExternalContext
из FacesContext
и извлечь request
из внешнего контекста, затем
String file = request.getRequestURI();
if (request.getQueryString() != null) {
file += '?' + request.getQueryString();
}
URL reconstructedURL = new URL(request.getScheme(),
request.getServerName(),
request.getServerPort(),
file);
reconstructedURL.toString();
источник
Ответ 2
Более краткий способ:
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
String url = request.getRequestURL().toString();
String baseURL = url.substring(0, url.length() - request.getRequestURI().length()) + request.getContextPath() + "/";
Тогда вам не нужно возиться с опущением портов, когда схема http
и порт 80
и т.д.
Ответ 3
Это самый простой способ, который я нашел, который не включает в себя таинственные манипуляции с строками на разных частях URL-адреса. Кажется, что он работает во всех случаях, включая различные протоколы и порты.
String getAbsoluteApplicationUrl() throws URISyntaxException {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
URI uri = new URI(request.getRequestURL().toString());
newUri = new URI(uri.getScheme(), null,
uri.getHost(),
uri.getPort(),
request.getContextPath().toString(),null, null);
return newUri.toString();
}
Ответ 4
У меня есть одно похожее на BalusC:
FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
String requestURL = request.getRequestURL().toString();
String url = requestURL.substring(0, requestURL.lastIndexOf("/"));
Ответ 5
Позвольте мне повторить фразу Jigar немного:
final ExternalContext ectx = context.getExternalContext();
String url = ectx.getRequestScheme()
+ "://" + ectx.getRequestServerName()
+ ":" + ectx.getRequestServerPort()
+ "/" + ectx.getRequestContextPath();