Struts1 和 Struts2 是否是单例
来源:互联网 发布:数据中心网络设计方案 编辑:程序博客网 时间:2024/06/06 06:58
struts 2的Action是多实例的并非单例,也就是每次请求产生一个Action的对象。原因是:struts 2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面。如果Action是单实例的话,这些数据在多线程的环境下就会相互影响,例如造成别人填写的数据被你看到了;
struts 1的Action是单实例的,因为它的数据保存在Form类中,多线程环境下,Action只负责处理一些逻辑,并没有数据,也就是大家把它当做一个工具使用。同样servlet也是单实例的。
struts1 中actioin 是单例,即所有session对应一个action
由spring来创建action时,默认处理,为单例(既然是单例,即使你设置成了多例,也不影响程序功能)
struts2 中action 是多例,即一个session产生一个action。
由spring来创建action时,须设置为prototype的,不能是singleton。
个人感觉,之所以struts2中action必须是多例的,主要原因在与请求数据和返回数据,大多都封装到了action中,用于实例变量,这样以来,如果将action设置成单例模式,则多个线程访问的时候,就会共享这些数据,从而引起数据混乱或者线程安全问题!
线程模式:
" Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
" Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)
Action执行的控制:
" Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
" Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
- Struts1 和 Struts2 是否是单例
- Struts1 和 Struts2 是否是单例
- Struts1 和 Struts2 是否是单例
- struts1 ,struts2 是否是单例
- 框架struts2和struts1线程是否安全问题探讨
- Struts1和Struts2区别
- struts1和struts2对比
- struts1和struts2比较
- struts1和struts2区别
- struts1和struts2区别
- Struts2 和Struts1对比
- struts1 和 struts2 区别
- Struts1和Struts2比较
- Struts1 和 Struts2
- 区别struts1和struts2
- struts1和struts2区别
- Struts1 和 Struts2 比较
- struts1和struts2比较
- poj 1056 IMMEDIATE DECODABILITY
- web.xml里<filter-mapping>中的<dispatcher>作用
- VB.net学习笔记(十一)我的形态区别:Me,MyClass,MyBase,My
- android-----模拟器加载自己编译的内核(适用于驱动练习)
- timus 1149. Sinus Dances URAL 解题报告
- Struts1 和 Struts2 是否是单例
- 黑马程序员_读写TXT文件
- UVA11478 Halum (差分约束)
- 【deep learning学习笔记】Restricted Boltzmann Machines for Collaborative Filtering
- 跟我一起学Python之三:模块及保存运行
- JDBC连接MySQL数据库及示例
- poj 1159 Palindrome
- Windows操作系统I/O模型—笔记1(select (选择模型))
- Citrix 服务器虚拟化之二十二 桌面虚拟化之Provisioning Services创建标准映像实现无盘部署