FacesContext和“Servlet”上下文

有没有相当于FacesContext,但在servlet环境中?

我有一些DAOSessionManager处理我的数据库的事务。 当使用JSF编写当前页面时,我可以使用FacesContext来识别当前的http请求,但是servlet呢?

我找不到任何方法来获取当前的Servlet上下文或httpRequest …

谢谢。

PS:是的,从我的DAO层引用FacesContext是一种耻辱,但这是一个开始。

这是ServletContext 。 它可以通过inheritance的getServletContext()方法在servlet类中使用。

 protected void doGet(HttpServletRequest request, HttpServletResponse response) { ServletContext context = getServletContext(); // ... } 

FacesContext的主要区别在于ServletContext不是ThreadLocal ,因此您无法像FacesContext#getCurrentInstance()那样从当前线程中“静态地”获取它。 您真的需要将ServletContext引用传递到DAO方法中的任何位置:

 someDAO.doSomething(getServletContext()); 

或者更好的是,为了避免紧密耦合,只需从中提取所需信息并传递它:

 Object interestingData = getServletContext().getAttribute("interestingData"); someDAO.doSomething(interestingData); 
 ServletContext servletContext = (ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext();