这是如何工作的,保持对请求数据的静态(全局)引用

时间:2011-05-28 18:38:42

标签: java jsf

我需要知道这是如何工作的:

HttpServletRequest request =  (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();

这意味着,在某些服务器收到请求的地方(实际上是Faces API那样做),它做了类似的事情:

FacesContext fx = new FacesContext();
fx.setRequest(httpServletRequest);
FacesContext.setCurrentInstance(fx);

所以..假设这种情况:

发送了一个请求...填充了FacesContext对象..然后它在此等待5秒(通过任何方式,例如使用Thread.sleep())..另一个请求发送谁 - 我的理解 - 将覆盖FacesContext.getCurrentInstance()对象的内容..所以当前一个请求来自睡眠时,它将读取覆盖内容..

我的理解是否真实?

1 个答案:

答案 0 :(得分:4)

不,这不是真的。每个HTTP请求/响应周期都在一个完全专用的线程中执行。 FacesContext在请求开始时创建,并存储为ThreadLocal变量,该变量在响应完成时被删除。 getCurrentInstance()会返回ThreadLocal变量。在同一个线程中执行的代码中的任何位置(读取:相同的请求)都可以访问相同的FacesContext实例。使用他们自己的 FacesContext实例在他们自己的线程中运行不同的请求。 FacesContext的创建和销毁由FacesServlet管理。

另见: