当Dispatcher送请求到拦截器的时候,不是请求参数都放到ActionContext里面了吗?所以Action里面可以不用写任何实例变量,方法里面需要的话,直接从线程本地变量ActionContext里面读数据不就行了!为什么要Action做成多实例的呢?单例就可以啦。难道是我遇到的业务要求太简单了,所以不需要在Action里面配实例变量? 我觉得可以放到Action里面的变量,也可以放到ActionContext里面。

解决方案 »

  1.   

    代码里写很多ActionContext相关的代码,移植性和可测试性就很差了,所以在action里面需要使用实例变量做数据传递,从而action不能单例化。
      

  2.   

    谢谢你的回答!~有可能需要移植到哪里去呢?Action不就是Struts2的东西吗?Action本身的作用就是调用服务和转向,好像从概念上讲的话,不需要自己保存数据。
      

  3.   

    是这样的。Strut2的Action不是Servlet,如果某个变量,在多个方法中使用,在并发环境下,则可能产生数据问题。所以多例还是有必须的
      

  4.   

    干这么多事只有一个目的,增强开发的方便性。
    按楼主说的就是想struts1一样,写一堆赋值代码取值代码什么的。
    而struts2的这种设计配合其拦截器真的可有大大的提高开发的方便性。
      

  5.   

    这个我当然知道,我是说如果Action不设置实例变量,单实例,方法从ActionContext获取数据,这种方式我想是可行的,但是看到Action是多例的时候,我在怀疑Action设置成多例的必要性。单例比多例省空间多了,效率可能差不多。
      

  6.   

    细细品味你的话,可能我对Action的定位和Servlet重复。那Action的定位和Servlet的区别在哪里呢?