1

我正在尝试学习 jsf,我读到的是它是一个有状态的 Web 框架。但是如果我不使用 jsf 而只使用 servlet,我可以使用会话范围来实现这种状态。那么 steful web 框架是什么意思呢?请求范围和会话范围都相同(有状态)?

4

1 回答 1

1

请求范围和会话范围都相同(有状态)?

这是错误的。@RequestScoped并且@SessionScoped既不相同,也不都是有状态的。

@RequestScopedbean 是无状态的。此处没有存储超过 1 个请求的持续时间。有一个@RequestScopedbean 池,它们可以重复使用并在不同用户之间共享。这只有在请求本身包含所有必要信息时才有可能。

@SessionScopedbean 是有状态的。它与某个用户(会话)相关联,不能共享。它将为多个请求存储,并且可以保持状态(因此是有状态的)。

“有状态”和“无状态”有许多不同的定义,但您可以将这两个范围的属性作为无状态和有状态的示例。

但是即使只使用@RequestScopedbean,您的 JSF 应用程序也可能不是完全无状态的,因为 JSF 在内部是如何工作的。不过,新的 JSF 2.2 朝着无状态又迈进了一步。有关如何使用 JSF 完全无状态的更多详细信息,请参阅此说明。

但请记住,在许多情况下,有状态(或非无状态)是没有问题的,并且并非所有无状态应用程序在定义上都比有状态应用程序更好。

于 2013-10-18T19:11:50.923 回答