struts2中action是多例的,即一个session产生一个action
如果是单例的话,若出现两个用户都修改一个对象的属性值,则会因为用户修改时间不同,两个用户访问得到的属性不一样,操作得出的结果不一样.
举个例子:有一块布长度300cm,能做一件上衣(用掉100cm)和一件裤子(用掉200cm);甲和乙同时访问得到的长度都是300cm,
甲想做上衣和裤子,他先截取100cm去做上衣,等上衣做完再去做裤子,而乙这时正好也拿100cm去做上衣,那好,等甲做完上衣再做裤子的时候发现剩下的布(100cm)已经不够做裤子了.....这就是影响系统的性能,解决的办法就是给甲和乙一人一块300cm的布,就不会出现布被别人偷用的事情,也是就单实例和多实例的区别
如果设置成单例,那么多个线程会共享一个ActionContext和ValueStack,这样并发访问的时候就会出现问题了
struts 2的Action是多实例的并非单例,也就是每次请求产生一个Action的对象。原因是:struts 2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面。如果Action是单实例的话,这些数据在多线程的环境下就会相互影响,例如造成别人填写的数据被你看到了。所以Struts2的Action是多例模式的。
问题出现了,可以让struts2的action变成单例模式么?我在使用spring来生成action的时候,发现生成的action居然全是单例的。这不是让我的程序默认就跑出bug来么?上个用户提交的信息,如果下个用户没填,居然跑到上个用户输入的信息去了。
背景:
1) Struts2会对每一个请求,产生一个Action的实例来处理.
2) Spring的Ioc容器管理的bean默认是单实例的.
首先从数据安全性的问题上考虑,我们的Action应该保证是多例的,这样才不会出现数据问题。但是如果有的action比如只有admin才能操作,或者某些action,全站公用一个来提高性能,这样的话,就可以使用单例模式
不过幸好,Spring的bean可以针对每一个设置它的scope,所以,上面的问题就不是问题了。如果用单例,就在spring的action bean配置的时候设置scope="prototype".好吧,问题到此结束。
 

最新文章

  1. AFNnetworking详解
  2. left join 条件区别
  3. js中比较实用的时期格式化
  4. sql bcp 笔记
  5. SpringMvc 单例
  6. 导出用户列表到Excel的几种方法
  7. 01-08-01【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate中的一级缓存
  8. 【Android - 框架】之刷新加载框架Ultra-Pull-To-Refresh的使用
  9. php报警:Strict Standards: Only variables should be passed by reference in
  10. 未能找到类型或命名空间名称“XXXX”(是否缺少 using 指令或程序集引用?) 转
  11. nexus5 root教程
  12. iOS经常使用的加密算法
  13. vue2 与后台信息交互
  14. 201521123050 《Java程序设计》第5周学习总结
  15. iOS中 CoreGraphics快速绘图(详解) 韩俊强的博客
  16. Triangle Count
  17. HDU--4417 Super Mario (主席树模版题)
  18. 弹性布局(Flex布局)整理
  19. Zookeeper单机安装部署与配置(二)
  20. 没加载redis类,却可以实例化redis

热门文章

  1. 桌面以及任务栏的所有浏览器,被加上了 hao.360.cn的网址
  2. ping 原理与ICMP协议[转]
  3. WPF特效和例子
  4. django网站
  5. 获取iframe(angular 动态页面)高度
  6. 一张思维导图教你使用google一下
  7. c++运算符优先级表
  8. UVA-1152 4 Values whose Sum is 0 (二分)
  9. OAF调用JavaScript新开窗口
  10. https ddos攻击——由于有了认证和加解密 后果更严重 看绿盟的产品目前对于https的ddos cc攻击需要基于内容做检测