struts单例和多例?

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值