总结: Struts2 + Spring 的线程安全问题
1. 首先Struts2 本身是安全的
其原理大概是:Strtus2会获取到用户的http请求,然后负责给每个请求实例化一个Action 对象,但是大家注意,这里的action对象和Struts1里面的action对象完全不是一个概念,struts1里面的action类就是一个servlet类,而这里的action类只是一个普通的java class。这也就是为什么Struts1里面的action是线程不安全的,而struts2里面的action是线程安全的原因。那我们在回头来看看struts2对servlet的处理和struts1有什么不同。看过前面分析的读者肯定知道,struts1的 action对servlet没有进行任何的包装,它是直接实现的Java WEB API 里面的servlet 接口。所以才会有线程安全的问题,但是struts2底层帮我们封装了Servlet,使开发人员不用直接接触Servlet。具体做法是:Strtus2截获servlet请求,然后给每个请求实例化一个Action对象,请求结束之后销毁Action对象。
2. Spring的单例模式
默认情况下Spring是单例的,所以虽然Struts2本身Action设计没有问题,但是如果在SPring中不做好配置的话,一样会导致线程问题,修改配置文件如下:

经过类似上述的配置,Struts2可以避免大部分的线程安全问题.
总结: Struts2 + Spring 的线程安全问题的更多相关文章
- 浅析Struts1和Struts2的Action线程安全问题 转
浅析Struts1和Struts2的Action线程安全问题 转 http://blog.csdn.net/virgoboy2004/article/details/5876133 [问题描述]最近 ...
- Spring MVC 线程安全问题的思考
Spring MVC 线程安全问题的思考 在读一些博文的时候发现有些文章对SpringMVC的Controller线程安全的验证并不正确,比如没有探究controller线程不安全的具体原因,比如将请 ...
- struts2学习笔记--线程安全问题小结
在说struts2的线程安全之前,先说一下,什么是线程安全?这是一个网友讲的, 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样 ...
- 浅析Struts1和Struts2的Action线程安全问题
tomcat容器对servlet的实现采用的是单例模式,对于一个servlet类,永远只有一个servlet对象存在. 下面我们来解释为什么Struts1是线程不安全的. 1.Struts1 Stru ...
- SpringMVC与Struts2关于controller线程安全问题
SpringMVC的controller是单例的,因此springMVC的controller不是线程安全的,在使用的时候要谨慎添加成员变量,因为所有的请求都会共享这个变量. 与springMVC不同 ...
- Servlet, Struts2和SpringMVC 并发访问线程安全问题
第一部分: Servlet不是线程安全的. 要解释Servlet为什么不是线程安全的,需要了解Servlet容器(即Tomcat)使如何响应HTTP请求的. 当Tomcat接收到Client的HTTP ...
- Spring中构造器、init-method、@PostConstruct、afterPropertiesSet孰先孰后,自动注入发生时间以及单例多例的区别、SSH线程安全问题
首先明白,spring的IOC功能需要是利用反射原理,反射获取类的无参构造方法创建对象,如果一个类没有无参的构造方法spring是不会创建对象的.在这里需要提醒一下,如果我们在class中没有显示的声 ...
- Struts1、Struts2的线程安全问题
Struts 1.x和Struts 2的Action是不是线程安全的? Struts 1.x在第一次请求某个Action时,会创建这个Action实例.但之后再请求该Action实例时,就用之前创建好 ...
- SSH面试题(struts2+Spring+hibernate)
struts2 + Spring +hibernate Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory ...
随机推荐
- 注册Model类
根据username查找是否存在相同的用户名的方法 自动填充功能填充注册时间字段 如果两次输入的密码一直则写入数据库的方法 userModel.class.php <?php /**** 燕十八 ...
- getOutputStream() has already been called for this response异常的原因和解决方法
今天在调试一个小web项目时,验证码不显示了,而且后台报错 getOutputStream() has already been called for this response 经过查找得知: 在t ...
- ASP.NET验证控件详解
现在ASP.NET,你不但可以轻松的实现对用户输入的验证,而且,还可以选择验证在服务器端进行还是在客户端进行,再也不必考虑那么多了,程序员们可以将重要精力放在主程序的设计上了. ASP.NET公有六种 ...
- JavaScript学习笔记(4)——JavaScript语法之变量
一.变量可以使用短名称(比如 x 和 y),也可以使用描述性更好的名称(比如 age, sum, totalvolume). 变量必须以字母开头 变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做 ...
- jQuery 源码分析6: jQuery 基本静态方法(二)
jQuery.extend({ // 遍历obj的所有值 // args 这参数只能内部调用的会用到 // 注意到,如果回调函数调用失败会直接跳出并中止遍历 // 当有args数组时,使用apply调 ...
- android 权限总结
1.拨打电话要权限 2.sd目录存东西要权限
- InstallShield 版本转换
InstallShield : 如何用低版本 打开高版本的工程 InstallShield 每个版本都有对应的版本号SchemaVersion,如下所示 InstallShield Versi ...
- syntax error near unexpected token `then'
#!/bin/bashclearfunction test{ if[$1 -eq "root"]&&[$2 -eq "123456"] ...
- libipq —— iptables用户空间数据包排队库
LIBIPQ(3) NAMElibipq —— iptables用户空间数据包排队库 SYNOPSIS #include <linux/netfilter.h>#include <l ...
- Mac 系统下安装 MySql
Mac原生没有带MySql,想要使用需要自己去安装. 下载. 首先去mysql官网下载安装包. 由于现在mysql对企业有服务,所以有所谓社区版(community)和企业版(enterprise), ...