是否有任何等效于 FacesContext,但在 servlet 环境中?
我有一些处理我的数据库事务的 DAOSessionManager。当使用 JSF 编写当前页面时,我可以使用 FacesContext 来识别当前的 http 请求,但是 servlet 呢?
我找不到任何方法来获取当前的 Servlet 上下文或 httpRequest...
谢谢。
PS:是的,从我的 DAO 层引用 FacesContext 是一种耻辱,但这是一个开始。
是否有任何等效于 FacesContext,但在 servlet 环境中?
我有一些处理我的数据库事务的 DAOSessionManager。当使用 JSF 编写当前页面时,我可以使用 FacesContext 来识别当前的 http 请求,但是 servlet 呢?
我找不到任何方法来获取当前的 Servlet 上下文或 httpRequest...
谢谢。
PS:是的,从我的 DAO 层引用 FacesContext 是一种耻辱,但这是一个开始。
这是ServletContext
. 它可以通过继承的getServletContext()
方法在 servlet 类中使用。
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
ServletContext context = getServletContext();
// ...
}
的主要区别FacesContext
在于ServletContext
is not ThreadLocal
,因此您不能像 do 那样从当前线程“静态”获取它FacesContext#getCurrentInstance()
。您确实需要在需要的任何地方将引用传递ServletContext
给 DAO 方法:
someDAO.doSomething(getServletContext());
或者更好的是,为了避免紧密耦合,只需从中提取所需的信息并传递它:
Object interestingData = getServletContext().getAttribute("interestingData");
someDAO.doSomething(interestingData);
ServletContext servletContext = (ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext();