Как получить абсолютный URL веб-приложения от ExternalContext? - PullRequest
14 голосов
/ 01 марта 2011

Я пытаюсь получить корневой URL-адрес веб-приложения из ExternalContext , но не могу понять, какой метод использовать ...

Ответы [ 5 ]

17 голосов
/ 01 марта 2011

Более краткий способ:

HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
String url = request.getRequestURL().toString();
String baseURL = url.substring(0, url.length() - request.getRequestURI().length()) + request.getContextPath() + "/";

Тогда вам не нужно возиться с пропуском портов, если схема http, порт 80 и т. Д.

13 голосов
/ 01 марта 2011

Вы можете получить 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();

источник

7 голосов
/ 28 марта 2012

Это самый простой способ, который я обнаружил, который не включает в себя таинственные манипуляции со строками в различных частях 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();
 }
3 голосов
/ 30 апреля 2013

У меня есть один похожий на BalusC:

FacesContext context = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
String requestURL = request.getRequestURL().toString();
String url = requestURL.substring(0, requestURL.lastIndexOf("/"));
2 голосов
/ 01 марта 2011

Позвольте мне немного перефразировать ответ Джигара:

final ExternalContext ectx = context.getExternalContext();
String url = ectx.getRequestScheme()
  + "://" + ectx.getRequestServerName()
  + ":" + ectx.getRequestServerPort()
  + "/" + ectx.getRequestContextPath();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...