我用struts搭的网站框架,在action里用private String userType;来接收页面的参数.
class文件实例化后将参数保存了,现在问题就出来了,A用户登陆后,B用户登陆,Action里的private将存储A的信息,这时A操作数据库,
却将private中B的信息存进了数据库.怎么解决这个并发问题?

解决方案 »

  1.   

    修改一下
    我用struts2搭的网站框架,在action里用private String userType;来接收页面的参数. 
    class文件实例化后将参数保存了,现在问题就出来了,A用户登陆后,B用户登陆,Action里的private将存储B的信息,这时A操作数据库, 
    却将private中B的信息存进了数据库.怎么解决这个并发问题?
      

  2.   

    这种问题真的出现了吗?会不会是自己在机子上测试的时候没记清根本是两个用户不同的action请求,请仔细测试,要不就是比把数据放到缓存里了产了这种错觉。
      

  3.   

    这个问题在s2中不存在,因为每个请求都会创建一个独立的Action实例!这个是和struts 1.x不同的地方!!!
      

  4.   

    如果你有使用Spring来实例化action bean的话,Spring 默认是是使用单例模式, 也就是所有的ACTION请求使用同一个Action实例, 为了解决这个问题,应SPRING修改XML配置文件, 例如:
        <bean id="Login" class="com.abc.Login" scope="prototype">
            <property name="userService" ref="UserService"/>
        </bean>即修改scope为prototype, 这样每一个HTTP REQUEST 系统将会生成一个新的ACTION BEAN, 这样就解决了线程安全问题。希望我的回答可以帮助到楼主, 谢谢。
      

  5.   


    你说的这种情况,在Struts2中是不可能的。你实测的,还是你猜测的。
      

  6.   

    光用struts2是不可能有这种情况的 struts2的action不是单例的 每次请求都创建一个新的实例
    如果加入spring 并将action交给spring管理 那么应该在 spring的配置里加scope="prototype"
    spring 默认scope="singleton"
      

  7.   

    深圳JAVA J2EE QQ①群 32763598 深圳JAVA J2EE QQ②群  6086837 
    欢迎深圳的JAVA程序员加入,共同探讨技术与工作、项目合作、共享信息、结交朋友  
      加入请输入验证信息:SZJP