日期:2014-05-19  浏览次数:20701 次

Struts 单例的一点疑惑
Struts1.X是单例的,那么模拟一个业务场景是:向数据库记录一个登陆用户的信息,需要用到From缓存,多个浏览器同时访问Action的保存用户信息的方法,因为是单例的,所以共用一个Form,会不会造成数据覆盖?如果会覆盖,即使单例有一定的好处,但安全上存在这么大的问题,为什么还要使用这种实现方式或者有其什么对应措施?

------解决方案--------------------
Struts1.X是单例的,但是表单的值是通过参数从ActionForm传入的,如下面的form,每个请求的产生的form是不同的,怎么可能相互覆盖呢?execute(ActionMapping mapping, ActionForm form,
ServletRequest request, ServletResponse response) 主要是注意在Struts1的ACTION中不要使用成员变量,如果这样此成员变量会被多个线程共享,有线程安全问题。STRUTS2的ACTION已经不再是单例的,所以表单的值是通过ACTION的成员变量来传递的,这是STRUTS1和STRUTS2的主要区别之一。
------解决方案--------------------
1 这个会话 应该是request 。
2 方法是Thread 独享的,也就意味着线程调用方法时的局部变量(不是全局变量)也是唯一的。