Struts1、Struts2的线程安全问题
Struts 1.x和Struts 2的Action是不是线程安全的?
Struts 1.x在第一次请求某个Action时,会创建这个Action实例。但之后再请求该Action实例时,就用之前创建好的这个Action处理,即它是单例模式。所以Struts 1.x的Action不是线程安全的。
但是为什么我们在使用Struts 1.x开发的时候一般不用考虑线程安全问题呢?
那是因为Struts 1.x的方法调用模式用到的参数一般都是局部变量(包括request, response,session,config,page,pageContext等,如下面的方法定义),局部变量是线程安全的,因此不存在线程安全问题。 但是要是在execute中使用了实例变量,就会存在线程安全问题。所以我们用Struts 1.x开发时尽量不要使用实例变量,如果一定要用或者有这种需要,那么我们一定要意识到使用实例变量是存在线程安全的,可以使用同步机制去处理线程安全问题。
public ActionForward execute (ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ActionException;
注:application在整个系统内被使用,所以不是线程安全的.
Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题 。
在Sping + Struts 2的应用中,由Spring来管理Struts 2的Action,而IoC容器管理的bean默认是单实例的
(scope="singleton"),加上Struts 2的Action就像一个POJO一样,定义了很多的类变量,这就有线程安全问题了。解决些问题最简单的办法就是不使用单例模式(设置scope="prototype")。
<bean id="testAction" class="com.webapp.action.TestAction" scope="prototype">
Servlet是线程安全的吗?
servlet是单实例多线程运行方式,所以对象变量线程不安全,局部变量线程安全。
Struts1、Struts2的线程安全问题的更多相关文章
- 浅析Struts1和Struts2的Action线程安全问题 转
浅析Struts1和Struts2的Action线程安全问题 转 http://blog.csdn.net/virgoboy2004/article/details/5876133 [问题描述]最近 ...
- 总结: Struts2 + Spring 的线程安全问题
1. 首先Struts2 本身是安全的 其原理大概是:Strtus2会获取到用户的http请求,然后负责给每个请求实例化一个Action 对象,但是大家注意,这里的action对象和Struts1里面 ...
- struts2学习笔记--线程安全问题小结
在说struts2的线程安全之前,先说一下,什么是线程安全?这是一个网友讲的, 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样 ...
- Servlet, Struts2和SpringMVC 并发访问线程安全问题
第一部分: Servlet不是线程安全的. 要解释Servlet为什么不是线程安全的,需要了解Servlet容器(即Tomcat)使如何响应HTTP请求的. 当Tomcat接收到Client的HTTP ...
- 【转】Struts2的线程安全 和Struts2中的设计模式----ThreadLocal模式
[转]Struts2的线程安全 和Struts2中的设计模式----ThreadLocal模式 博客分类: 企业应用面临的问题 java并发编程 Struts2的线程安全ThreadLocal模式St ...
- Spring中构造器、init-method、@PostConstruct、afterPropertiesSet孰先孰后,自动注入发生时间以及单例多例的区别、SSH线程安全问题
首先明白,spring的IOC功能需要是利用反射原理,反射获取类的无参构造方法创建对象,如果一个类没有无参的构造方法spring是不会创建对象的.在这里需要提醒一下,如果我们在class中没有显示的声 ...
- Struts2的线程安全性
[什么是线程安全性?] 在多线程并发访问的情况下,如果一个对象中的变量的值不会随访问的线程而变化则是线程安全的.反之则称为非线程安全的. [Servlet是线程安全的吗?] [非线程安全的] publ ...
- springmvc线程安全问题
对于使用过SpringMVC和Struts2的人来说,大家都知道SpringMVC是基于方法的拦截,而Struts2是基于类的拦截.struct2为每一个请求都实例化一个action所以不存在线程安全 ...
- 被我们忽略的HttpSession线程安全问题
1. 背景 最近在读<Java concurrency in practice>(Java并发实战),其中1.4节提到了Java web的线程安全问题时有如下一段话: Servlets a ...
随机推荐
- ubuntu14.04 qt4开发环境搭建(vnc use gnome)
1,安装qt开发环境软件包:apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer qtcreator; 2 ...
- SQL分类取每一类第一项
实际应用中经常会碰到这样的需求,在给定的数据集中要求返回每一类型中最大的一条,抑或是最小的一条,抑或是按时间排序最近的一条等等.很多人面对这样的需求显得束手无策,其实这个需求实现有很多种方法,今天给大 ...
- BZOJ 1024 SCOI 2009 生日快乐 深搜
题目大意:有一块蛋糕,长为X,宽为Y.如今有n个人来分这块蛋糕,还要保证每一个人分的蛋糕的面积相等.求一种分法,使得全部的蛋糕的长边与短边的比值的最大值最小. 思路:刚拿到这个题并没有什么思路.可是定 ...
- C++游戏编程(一开篇)
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7318264 作者:毛星云 邮箱: h ...
- 后台找到repeater里面的div并添加客户端点击事件
public partial class Inv_SelectWorkservice : System.Web.UI.Page,IPostBackEventHandler{ } 通过OnItemCre ...
- javascript高级知识分析——灵活的参数
代码信息来自于http://ejohn.org/apps/learn/. 使用数量可变的参数对编程很有好处 function merge(root){ for(i = 0 ; i < argum ...
- vue+webpack一些知识
使用mac的用户需要获取权限才可以使用npm install指令 设置node目录的权限指令 sudo chmod -R 777 /usr/local/lib/node_modules/ 大家都知道国 ...
- html5滑动手势
<div id="divMove" style="height: 100px;"></div> <div id="sli ...
- hibernate 简单查询
1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql = "from Users"; ...
- kafka 使用、介绍
kafka 是一个消息系统, 具体资料可以参考官网: BrokerKafka集群包含一个或多个服务器,这种服务器被称为broker Topic每条发布到Kafka集群的消息都有一个类别,这个类别被称 ...