struts1 是单例的 ,加载一次处理多个请求 ,有线程安全问题。
struts2 是用代理模式,每个请求重新加载处理类,不会有线程安全问题。
若果配合spring使用,以上两种都可以在spring中配置是否是单例的。

解决方案 »

  1.   

    action这样写的:
    @Controller("scanActionImpl")
    public class ScanActionImpl ...是在spring配置呀,也没设置scope
    但你点击第二个按钮的时候不应该获得B的值呀
    为什么还能获得,而且是第一个按钮设置的值B=2
      

  2.   

    spring默认是单例的,prototype,我就搞不懂第二次请求为啥它能获得B
      

  3.   

    这个实例化Action没有关系吧,你提交的属性被struts存在了对象栈里,你定义的是全局变量和具体的某一个Action没有关系,更扯不上spring什么事了吧。
      

  4.   

    提交的参数成了放在了对象栈里,那这样的话,在action里面的set,get方法岂不是不安全,你本来没传,但是他会默认是你上次传过来的...是这个意思么?
      

  5.   

    忘记问了。。你的两个按钮访问的是一个Action方法还是两个Action方法?
      

  6.   

    对,就是上面说的struts2是线程安全的,你每次请求都是一个action。你同一个方法就相当于是一个action请求,值栈和请求是一一对应的,。
      

  7.   

    wlwlwlwl015小灯光环 谢谢你的热心,我测试下,等下就给分,呵呵
      

  8.   

    我现在写两个Action方法,第二个方法没传B怎么也能获得到B呢?
    有点迷糊了...
      

  9.   

    把你的JSP和Action的代码贴上来,我好像没理解你的意思,说的不对。
      

  10.   

    Ext:
    第一个请求:
    var params = {startD:start,end:end,type:'pv-rank',sourceId:10};
    store_1.load({params:params});
    同一个页面中第二个请求:
    var params2 = {startD:start,end:end,type:'time'};
    store_2.load({params:params2});
    Action中属性:
    protected int sourceId; 有set,get方法
    store请求的url指向同一个Action的两个方法
    store_1指向的方法
    public void getScanDepth(){
     System.out.println(sourceId);
    }
    store_2指向的方法
    public void getScanDepth2(){
     System.out.println(sourceId);
    }
    store_2的参数没有sourceId,但却能打印出来sourceId=10
      

  11.   

    我晕。。你这就不是Action方法啊。。Action方法的返回值必须是String。。还有属性的修饰一般是public/private 。。定义private的时候才需要set方法。。等于说你这两个方法就是当作类里面的普通方法,没有牵扯到strus,也没有被拦截器拦截。。
    我也没用过EXT。。页面上的不是很清楚。。
      

  12.   

    这个是Ext ajax中的异步请求,就是ajax,返回的是json字符串,
    response.getWriter().println(json);返回到前台Action:
    @Controller("scanActionImpl")
    public class ScanActionImpl extends BasicActionSupportImpl implements IScanAction {}
      

  13.   

    @Controller("scanActionImpl")
    貌似用的是spring的mvc,但是有可以返回给struts
    应该是spring管理struts吧
    spring默认用的是单例模式,不知道这样理解对不对,我百度下
      

  14.   

    你这确实是springMVC,和struts是两个完全不同的东西,都是MVC框架而已。
    SSH是struts+spring+hibernate,这个可以说是spring管理struts。
    我上面说的那些还真不好测试,因为struts可以在一次请求之内共享数据。你这俩按钮就没办法了,怎么都是两次请求。
    EXT和springMVC都不熟悉。只能帮你到这了。
      

  15.   

    嗯,谢谢你这么久的帮助
    确实是spring管理struts的Action,
    @Scope("prototype")
    @Controller("scanActionImpl")
    如果把spring设置成prototype多例,就得不到B了,
    spring管理Action默认用的是单例模式
    看来还得多多学习呀
      

  16.   

    。。我都看晕了。。你这不是SpringMVC 果然还是struts。。怪不得。。如果你只用struts是不会出现这种情况的
      

  17.   

    恩恩,关键是spring过来捣乱了,