struts1.x的Action线程安全问题

本文讨论了Struts1.x框架中的线程安全问题,特别是直接在Action中定义实例变量可能导致的数据污染风险。建议使用ActionForm来避免此类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在几个项目发现了struts 1.x的一个安全性问题是值得注意的。以前一直没有在意。因为过去的模式是前台页面数据通过actionForm传入,action中的excute方法接收,这个问题是不存在的。

但是,如果在action 中直接定义实例变量,问题就很大了。原因其实也很简单:

为了确保线程安全(thread-safe),在一个应用的生命周期中,Struts框架只会为每个Action类创建一个Action实例(与servlet是一样的)。所有的客户请求共享一个Action实例,并且所有请求线程可以同时执行它的execute()方法。
所以,每个action只有一个实例, 在action打印this也可以看到, 确实是一样的,
所以, 不要在Action里面生命全局的变量记忆数据, 没有意义而且不安全。

使用actionForm则不会有问题,原因也很简单:

actionForm 是通过参数形式传入action的,不存在共享变量的问题,其实每个request产生的actionForm实例也是不同的。

因此在使用struts 1.x的时候要注意线程安全性问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值