Struts1线程问题

Struts1线程问题

Struts1是单例模式,它继承了tomcat对servlet的实现,所以这里的action在被tomcat实例化之后也是单例了,所以,struts1就产生了多线程问题了,所有的请求共用一个实例,线程是不安全的,所有的Action请求只有

一个Action对象处理,

因此尽量不要在Action中定义实例变量(或者使用synchronized进行同步),在execute方法中使用局部变量是最简单的保证线程安全的办法

也可以使用LocalThread来定义属性


Struts2线程问题

Struts2是线程安全的,每个请求对应一个Action实例,原因是struts2获取到用户的http请求,为每个请求实例化一个Action对象,Struts2的action类只是一个普通的java class

在Struts1中没有对servlet进行任何的封装,他是直接实现的java web api里面的servlet接口,所以才会有线程安全的问题,但是Struts2底层帮我们封装了Servlet,使开发人员

不必直接接触Servlet:具体实现是:Struts2截取Servlet请求,然后给每个请求实例化一个Action对象,请求结束之后销毁Action对象,Struts2中的Action和普通的Java类没有

任何区别,也就不用像Struts1里面那样去实现一个Struts的接口,所以我们可以用Spring去管理Struts2的Action,这个时候我们要注意,因为当我们在Spring里面去定义bean的

时候,spring默认用的是单例模式,所以这个时候需要修改Spring配置文件,将scope从single修改为prototype。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值