struts2中Action单例和多例
来源:互联网 发布:淘宝店能转让吗 编辑:程序博客网 时间:2024/06/05 15:55
struts2的action是多实例的,也就是每次请求产生一个Action对象。因为:struts2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面。如果Action是单实例的话,这些数据在多线程的环境下就会相互影响,例如造成别人填写的数据被你看到了。而struts1的Action是单实例的,因为他的数据保存在Form类中,多线程环境下,Action只负责处理一些逻辑,并没有数据,也就是大家把它当做一个工具使用。同样servlet也是单实例的。
项目采用了Struts2+Spring的装配模式,Spring管理Struts2的Action自动设置为单例。这样Action的生命周期为服务器的生命周期,也就是说不关闭服务器,Action一直存在,Action中的属性也一直存在。
这种现象好处在于,分页对象所需要的数据对象存在于Action中是不被销毁的直到页面重新对数据对象输入查询条件。
这样做的缺点在于,一,两个浏览器同时操作一个页面,会在查询等条件的保存上产生冲突,致使A浏览器的查询条件影响到B浏览器的查询结果;二,没有良好设计的系统中,重用Action和多次利用Action的时候无法有效甄别数据的有效性。
因此思考是否可以通过一些办法来解决此类问题。
办法一:设置Action bean的生命周期为Session,即每个浏览器的打开影响着一套Action的生命周期,解决不同用户互相影响的问题;
(通常和spring整合使用的时候,在struts.xml文件要配置一个元素 或者在struts.property文件中配置 struts.objectFactory = spring 。。。可以在spring的配置文件中的bean元素里用一个scope属性来配置action是用什么生命周期,singleton,prototype,request,session等等)
办法二:通过设置过滤器或者拦截器,或者设置类中的单独属性,判断查询条件是否由理想对象传来,如果不是则销毁值对象,如果是则继承值对象的查询条件。
一些关于拦截器的资料:http://blog.csdn.net/feng_sundy/archive/2007/10/11/1820668.aspx
- struts2中Action单例和多例
- Struts2中Action的单例与多例
- Struts2和Spring整合, Action单例和多例的问题
- Struts2 action的单例与多例
- Struts2 action的单例与多例
- Struts2 action的单例与多例
- Struts2 action的单例与多例
- Struts2 action的单例与多例
- struts1、struts2、spring mvc的action和HttpServlet、filter是否单例
- Struts2单例和多例
- struts2单例和多例
- struts2单例Action带来的问题与思考
- struts2单例Action带来的问题与思考
- Struts2中Action和ActionSupport
- Struts2 action与String bean的单例与多例
- servlet是单例和struts2的action多例的理解
- servlet是单例和struts2的action多例的理解
- servlet是单例和struts2的action多例的理解
- HIVE的MAP/REDUCE原理
- 封装SDK和Framework
- linux/Centos下查看和修改网卡Mac地址(ifconfig命令)
- 进程上下文和中断上下文
- Android中滑屏实现----手把手教你如何实现触摸滑屏以及Scroller类详解
- struts2中Action单例和多例
- OpenGL入门——GLFW
- 启动tomcat,解决了Eclipse控制台乱码问题后,在Eclipse调试时,依然有中文乱码问题(解决)
- 将指定文件夹下文件及子文件夹下的文件复制到同一级目录
- FPGA 按键控制数码管
- 结构型模式7之1-Proxy代理模式例子理解
- Prim Dijkstra 区别
- centos 7 dns 依赖
- Android小问题:String转换Json,以及org.json.JSONObject与org.json.JSONArray相互添加