Struts2与spring结合时的高并发

原来见过一个项目,用了struts2,可是由于action里边用了类变量,仍然数据乱跳。
一般来说struts1,会出现数据乱跳,会认为正常,所以为了数据安全,struts1就不用类变量。
可是struts2,本来就是线程安全,用了也没事呀。
究其根源,原来如下。

1.struts2为每个线程提供一个action实例,多线程访问时不会出现问题。当使用spring管理struts2的action实例对象时,scope必须配置为prototype或者session,若配置为 singleton则多线程访问时会出现问题,多用户访问时有的用户访问到的是另一个用户的数据,数据会发生乱窜现象。 2.scope=“prototype”是为每个请求提供一个action实例。
scope=“session”是为每个会话提供一个action实例。 3.通常使用prototype,即让spring容器为每个请求提供一个action实例,好处是服务器端不用维护用户状态信息,否则使用session服务器端必须存储状态信息,用户多时占用服务器端内存过多。使用prototype时,必须自己在客户端维护用户的状态,每次访问服务端时将相应状态信息提交给服务器。例如scope=“prototype”时,页面一般< input name="id" type="hidden" value="${id}"/>用来存储用户的id信息,访问action时提交到server端供action中函数使用。而使用scope=“session”时,页面不必使用hidden的对象隐藏id信息,只要服务端获取过用户的id,action中的 id属性即会保存这个信息。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页