3

是否有任何等效于 FacesContext,但在 servlet 环境中?

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

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

谢谢。

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

4

2 回答 2

2

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

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

的主要区别FacesContext在于ServletContextis not ThreadLocal,因此您不能像 do 那样从当前线程“静态”获取它FacesContext#getCurrentInstance()。您确实需要在需要的任何地方将引用传递ServletContext给 DAO 方法:

someDAO.doSomething(getServletContext());

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

Object interestingData = getServletContext().getAttribute("interestingData");
someDAO.doSomething(interestingData);
于 2010-09-20T18:34:49.140 回答
-1
ServletContext servletContext = (ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext();
于 2012-12-18T10:29:07.357 回答