有状态会话 bean 和 HTTP 会话之间有什么关系吗?哪些用例需要有状态会话 bean,哪些用例需要 HTTP 会话。我可以将有状态会话 bean 公开为一个安静的 Web 服务吗?
1 回答
HTTP 是一种无状态协议,这意味着它是服务器和客户端之间的实际传输协议—— “无状态,因为它在调用之间什么都不记得
现在首先阅读一下什么是 HTTPSession 和什么是 Session Bean(请记住,会话 Bean 是用于维护跨多个请求的数据状态,因此大多数会话 bean 是有状态会话 bean,因为它在整个会话中保存数据)
HTTP 会话
HttpSession 对象可以跨来自同一客户端的多个请求保存会话状态。换句话说,它是持久的用于与特定客户端的整个会话。我们可以使用它来存储我们从客户端返回的所有内容,以及客户端在会话期间发出的所有请求。
会话 Bean来自wiki
在 Java 平台企业版规范中,会话 Bean 是一种企业 Bean。会话 Bean 为客户端执行操作,例如计算或数据库访问。尽管会话 bean 可以是事务性的,但如果发生系统崩溃,它是不可恢复的。会话 bean 对象可以是无状态的,也可以跨方法和事务维护会话状态。如果会话 bean 保持状态,则如果必须从内存中删除对象,则 EJB 容器会管理此状态。但是,会话 bean 对象本身必须管理自己的持久数据。
用简单的话
会话跟踪是在网站访问者从一个页面移动到另一个页面时维护有关他们的信息或状态的过程。它需要 Web 开发人员的一些工作,因为它没有内置机制。从浏览器到 Web 服务器的连接通过无状态超文本传输协议 (HTTP)进行
,并且
SFSB 设计用于通过对同一会话 bean 的多次调用(即会话)来管理客户端状态。如果您查看 JBoss Seam,您会发现在会话上下文中大量使用了 SFSB。
在 EJB3 中,没有“无状态优于有状态会话 bean”这样的说法。例如,一个提供类似信用卡处理器的服务(无状态),另一个提供多屏向导用例的处理(有状态)。
在我看来,使用 HttpSession 和无状态会话 bean 管理状态非常困难且有问题。
编辑: HTTPSession 用于像用户会话一样保持会话跟踪
例如,您要创建一个 Login , Logout 机制,然后您必须需要 HTTPSession 因为当用户开始在不同页面之间导航时,此 HTTPsession 将记住 WHO 在问对于页面,否则不可能(因为 HTTP 是无状态协议)
现在在会话中,您只需设置用户名和密码的会话,并且您正在检查每个页面,如果该会话存在则显示该页面
现在,如果您必须跨多个请求发送该用户的大量信息,该怎么办?在这种情况下,您将在有状态会话 bean 中设置所有这些信息
但是现在,在现代框架会话和信息中,所有内容都存储在会话 bean 中,因为从会话 bean 可以轻松管理它们。
当我们纯粹使用 Servlet 和 JSP 技术时使用 HTTPSession