当前位置: 首页 > 知识库问答 >
问题:

无状态会话bean和请求作用域bean之间的区别是什么

邵兴怀
2023-03-14

我知道无状态会话bean指的是EJB bean,而请求范围bean指的是CDI bean(或JSF托管bean),所以我将从Java EE教程中给出它们的两个定义开始。

无状态会话bean定义:

无状态会话bean不维护与客户端的会话状态。当客户机调用无状态bean的方法时,该bean的实例变量可能包含特定于该客户机的状态,但仅限于调用期间。当方法完成时,客户端特定状态不应保留。

html" target="_blank">用户在单个HTTP请求中与web应用程序的交互。

从这两个定义中我所理解的是,无状态会话bean的概念与请求作用域的概念相同,但我不太确定,因为命名为“session”使我感到困惑。所以,我问我自己,如果是这样的话(相同的概念),也许他们会有一个类似的命名(使用request而不是session)。

所以,我的问题是:EJB无状态会话bean和CDI/JSF请求作用域bean在概念上有什么区别吗?

共有1个答案

呼延高超
2023-03-14

差别很大。

无状态EJB在调用之间不维护状态。除了依赖于其他bean之外,它通常根本没有状态。它为其他组件提供服务。无状态bean的客户机可以调用它来为HTTP请求提供服务,但它们也可以在任何HTTP请求之外调用它(在批处理、排定的作业中或其他)。

请求范围的bean通常有一个状态(否则,它可能是应用程序范围的bean或无状态bean)。并且此状态在HTTP请求期间持续。不能在HTTP请求处理代码之外调用它。请求范围bean的一个很好的例子是当前用户:

    null
 类似资料:
  • 我正在学习j2ee,如果问题看起来很基本请原谅。 在httpsession中,会话ID存储在客户端,与之相关的数据存储在服务器端。 现在,当我在POJO上使用CDI@SessionScoped时,这是否意味着EJB容器(?)在会话中存储pojo。(Session.SetAttribute(POJO)) CDI可以区分SFB、SLB和POJO吗?

  • 问题内容: 假设我有一个实体类,汽车。 我的IDE使我可以从实体类自动生成会话bean,因此最终得到了CarFacade 我也可以生成JSF托管bean 我可以理解Entity类和其他Bean之间的有意义的区别,但是无状态会话Bean和托管Bean之间有什么区别?我读到无状态会话Bean用于实现在实体上运行的业务逻辑,而托管Bean用于通过在托管Bean上使用网页调用方法并进行托管Bean调用来与

  • 有状态会话bean定义如下: 无状态会话bean无状态会话bean不维护与客户端的会话状态。当客户机调用无状态bean的方法时,该bean的实例变量可能包含特定于该客户机的状态,但仅限于调用期间。当方法完成时,客户端特定状态不应保留。然而,客户端可能会更改池化无状态bean中实例变量的状态,并且此状态将保留到下一次调用池化无状态bean时。除了在方法调用期间,无状态bean的所有实例都是等效的,允

  • 对于有状态会话bean(SFSB)和无状态会话bean(SLSB)的用法,我有点困惑。 我知道SFSB与客户保持状态。这很有帮助:什么时候使用有状态会话bean而不是无状态会话bean? 这里和许多其他地方提供的示例是SFSB的购物车。 “如果一个任务需要一系列方法调用(不止一次),并且您需要保留以前的结果以在下一次调用中使用它们,那么就可以使用SFSB”--Source。这将更像是签出(页面之间

  • 问题内容: 有状态会话Bean定义如下: 有状态会话Bean对象的状态由其实例变量的值组成。在有状态会话Bean中,实例变量代表唯一的客户端Bean会话的状态。因为客户端与其bean进行交互(“交谈”),所以这种状态通常称为对话状态。 无状态会话Bean定义如下: 无状态会话Bean无状态会话Bean不会与客户端保持对话状态。当客户端调用无状态Bean的方法时,该Bean的实例变量可能包含特定于该

  • 我是JavaEE的新手,我试图找出无状态和有状态会话bean之间的区别。到目前为止我所理解的: 1.)在有状态会话bean中,bean的状态与客户机绑定;因此,只要我们与同一个用户在同一个会话中,就应该有相同的bean实例状态 2.)在无状态会话bean中,没有绑定到会话和客户机的状态;事实上,bean实例可以在用户的每次调用或请求中进行交换 为了尝试这一点,我编写了一个简短的servlet,它只