如何在没有请求的 servlet 的情况下在 jsf 托管 Bean 中获取请求 url?
假设 URL 是 http://localhost:8080/project-name/resource.xhtml,
我想在 JSF 受管 Bean 中获取以下 http://localhost:8080/project-name。
假设 URL 是 http://localhost:8080/project-name/resource.xhtml,
我想在 JSF 受管 Bean 中获取以下 http://localhost:8080/project-name。
我假设您正在使用JSF 2和Java EE 6来回答这个答案。
实际机制的实现将根据您需要原始 URL 的程度而有所不同。
您首先需要访问底层 Servlet 容器(假定为一个,而不是 Portlet 容器)生成的 HttpServletRequest 对象。使用以下方式使用 FacesContext
对象访问 HttpServletRequest 对象:
HttpServletRequest origRequest = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
类
提供了几种实用工具方法来获取原始请求的近似表示形式:
getRequestURL()
,它提供原始请求,不包括查询字符串getScheme
、、、、、和其所有输出可以按顺序组合以获得原始请求。如果您想要 URL 的较小片段,则可能必须省略后面的调用。getServerName
getServerPort
getContextPath
getServletPath
getPathInfo
getQueryString
您可以按如下方式获取它:
HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
String url = req.getRequestURL().toString();
return url.substring(0, url.length() - req.getRequestURI().length()) + req.getContextPath() + "/";
// ...
请注意,可能有更好的方法来满足要求。在 JSF 托管 Bean 中获取原始 Servlet API 是一个代码异味警报。