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



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

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

这意味着,在某些情况下,当服务器接收到请求(实际上是FacesAPI)时,它会执行以下操作:

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

所以。。假设这种情况:

发送了一个请求。。。已填充FacesContext对象。。然后它在此期间等待5秒(通过任何方式,例如使用Thread.sleep())。。另一个发送的请求,据我所知,他将覆盖FacesContext.getCurrentInstance()对象的内容。。因此,当上一个请求来自睡眠时,它将读取被覆盖的内容。。

我的理解是真的吗???

不,这不是真的。每个HTTP请求/响应周期都在一个完全专用的线程中执行。FacesContext在请求开始时创建,并作为ThreadLocal变量存储,当响应完成时,该变量将被丢弃。getCurrentInstance()返回ThreadLocal变量。在同一线程中执行的代码中的任何位置(读取:同一请求)都可以访问同一FacesContext实例。不同的请求在它们自己的线程中运行,具有它们自己的FacesContext实例。CCD_ 9的创建和销毁由CCD_。

另请参阅:

  • java线程本地单例-它是什么?-相关答案
  • servlet是如何工作的?实例化、会话、共享变量和多线程-解释servlet生命周期
  • 如何在servlet环境中初始化API——实现ThreadLocal的代码示例

相关内容

  • 没有找到相关文章

最新更新