假设以下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
实例关联的各自单独方法单独收集方案,服务器名称,端口,上下文路径等部分不感兴趣。
答案 0 :(得分:0)
只需将FacesContext.getCurrentInstance().getExternalContext()
传递给您的实用程序方法即可公开javax.servlet.*
API ...