1、有状态(Stateful)
可以在不同的方法调用间保持针对各个客户端的状态
与客户端的联系必须被维持,这样做开销要大一些
有状态也可以这样理解,它存在存储能力,也就是说至少有一个属性来标识它目前的状态,例如:
注意:有状态会话bean,每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。
2、无状态(Stateless)
在不同方法调用间不保留任何状态
事务处理必须在一个方法中结束,这样占用资源较少,还可以被共享
无状态从字面的意思来理解就是没有能够标识它目前状态属性的bean,例如:
生成的两个实例对象,它们都是没有状态的,对于客户端来说,它们是没有差别的(但stateless1 != stateless2),所以同一个无状态回话bean的实例都是相同的,可以被不同的客户端重复使用。
无状态会话bean:bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean。但无状态会话bean并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意的。
3、总结
无状态的会话bean不保持任何与客户端的会话状态,发给 bean的每一次请求需同时提供数据来进行请求处理。有状态的会话bean,与之相反,可以保持状态,并且该状态可以在与客户的多次会话中存在。
有状态的bean带来了支持会话状态的好处但同时付出了性能的代价。无状态bean具有更好的性能,但却又不具备与客户端的亲合力。struts2中将
Action和ActionForm合二为一,就有了状态,因为每次请求都创建一个新的实例,所以没有线程安全问题,而struts1就不能这么做
了,struts1的Action采用的是单例模式,仅有Action的一个实例来处理所有的请求,所以使用struts1的时候要特别小心,要保证
Action的资源是线程安全最好采用无状态。
摘自:http://blog.163.com/lfsyhuangaigang@126/blog/static/77436670201322092944359/