struts单例和多例?

来源:互联网 发布:网络版权侵权 编辑:程序博客网 时间:2024/06/05 18:14
struts 2的Action是多实例的并非单例,也就是每次请求产生一个Action的对象。原因是:struts 2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面。如果Action是单实例的话,这些数据在多线程的环境下就会相互影响,例如造成别人填写的数据被你看到了。
而struts 1的Action是单实例的,因为它的数据保存在Form类中,多线程环境下,Action只负责处理一些逻辑,并没有数据,也就是大家把它当做一个工具使用。同样servlet也是单实例的
追问:

(struts 2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面。)
  这个怎么测试出效果,这样说有点不太懂呢。


(struts 1的Action是单实例的,因为它的数据保存在Form类中)
  如果我不用Form保存数据的话,是不是就不是单例了。
回答:
Struts 2中例如登陆系统要填写username和password,那么在Action类中一定会有private String username和private Sting password并且有get set方法,这就是我所说的数据。
 
struts 1的Action中不允许保存数据。必须放在Form中。
追问:
那我就不明白了,
struts 1 的Form和Struts2的 get set有什么不同,只是struts1把属性写在一个Form对象里面而已,如果
Struts2把属性也写到一个对象里面,那不也 是一样吗。
回答:
struts 1的数据不允许写在Action中。所有可以单实例。。而Form要多实例
Struts 2的数据一般写在Action中。所以多实例。。。
 
就像一个宿舍的可以共用一个扫帚、垃圾桶,但不能共用、银行卡。因为银行卡中有数据。
追问:
Struts2 怎么才能改成单例模式呢,是不是把你所说的get set封装到一个对象里面就可以了。

回答:
Struts2好像没办法改成单例模式,Struts2的Action都是一次请求一个对象,就是这么设定的。据我所知好像servlet可以通过一个配置改成多实例的,至于Action好像没办法改这种模式。
0 0