从JSF中的当前HTTP请求获取直到上下文路径的URL

时间:2015-04-08 10:45:00

标签: jsf jsf-2.2

假设以下URL(包含或不包含任何查询字符串和/或额外路径信息)。

https://localhost:8181/ContextPath/xxx/page.xhtml

我需要从中提取以下部分。

https://localhost:8181/ContextPath

即。直到上下文路径。


这可以通过一种方式来定义我们感兴趣的实用方法,就像下面的代码一样。

public static String getBaseURL(HttpServletRequest request) {
    String url = request.getRequestURL().toString();
    return new String(url.substring(0, url.length() - request.getRequestURI().length())) + request.getContextPath();
}

可以从托管bean调用它,如下所示。

HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
String link=Utility.getBaseURL(request);

但这又需要暴露我不感兴趣的基础javax.servlet.* API。

是否有一种理智的JSF方式,可以在不明确公开底层Servlet API的情况下获取当前HTTP请求的URL部分?


我对使用与HttpServletRequest实例关联的各自单独方法单独收集方案,服务器名称,端口,上下文路径等部分不感兴趣。

1 个答案:

答案 0 :(得分:0)

只需将FacesContext.getCurrentInstance().getExternalContext()传递给您的实用程序方法即可公开javax.servlet.* API ...