如何从ExternalContext获取webapp的绝对URL?

yeg*_*256 14 java jsf jsf-2

我正在尝试从ExternalContext检索Web应用程序的根URL ,但无法理解使用哪种方法...

Bal*_*usC 17

更简洁的方法是:

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

然后,当方案http和端口80等等时,您不需要忽略端口.


Jig*_*shi 13

你可以ExternalContextFacesContext和中提取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();
Run Code Online (Sandbox Code Playgroud)

资源


dfr*_*ser 7

这是我发现的最简单的方法,它不涉及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();
 }
Run Code Online (Sandbox Code Playgroud)