因为Action 都要转换成servelet的

解决方案 »

  1.   

    每次提交时,ActionServlet找到相应的RequestProcessor,把提交的数据组成FormBean,再找到Action,把从ActionServlet中得到的Request和Response放入到Action中,再执行Action中的Excute或Process。
    因此Action不是一个Servlet,也没有继承自HttpServlet。
    对于,任何一个请求过来。如果内存中有了Action实例,直接运行,如果没有创建就创建再执行。
    真正的好处在于,不用每次请求,再去创建一个实例,节约了系统资源。
    但在另一方面。就不能有只针对某个请求的变量了。
    在Struts中,甚至于FormBean,也可以只是一个实例,只是每次组装的时候,把数据填进去。
      

  2.   

    楼上的意思是,Action不是Servlet,但是面对MultiThread的请求,要怎么办呢?等待Action处理完一个,再处理下一个吗?这样不会影响效率吗?
      

  3.   

    呵呵,看看计算机运行程序的一些原理就明白了.
    运行函数时,会把以前的运行参数压到stack中,运行完此函数时,再返回原点.如:
    String中有几个静态方法,你也可以在多线程程序中用啊.它也没有同步啊.
    原理就是,如valueof()运行时,每次调运值都在各自的stack中运行,互不干涉.另外Collections中的方法,你看看,就会明白Action为什么会这样了.
      

  4.   

    多谢shagan(上海外地人)指点,我先看看资料正在看Struts的 source code 所以问题不少。