Struts2是在WebWork基础发展而来的。webwork是一个面向切面的开源框架,而webwork是基于wwork发展而来的,Xwork是一个命令模式,Struts2也属于MVC框架。把webwork改了一个名字就变成了Struts2.

    Struts2为了解决Struts1表现层的单一以及与servlet API的严重耦合而出现的,使应用难于测试。属于侵入性框架。所以产生了在webwork的基础上发展起来的Struts2.

    Struts2的优点:1、支持Ajax,2、支持Ognl标签,3、提供了强大的拦截器,4、线程安全(因为每次请求都会产生一个实例)。

    Struts2的缺点:耦合度低,比较复杂,源代码不好调试。

    Struts2请求处理流程:

        1、客户端发送请求(客户端初始化一个指向Servlet容器(如Tomcat)的请求);

        2、请求经过一系列过滤(如ActionContextCleanUp、SiteMesh等),ActionContextCleanUp->FilterDispatcher。

        3、FilterDispatcher通过ActionMapper来决定这个Request需求调用哪个Action,如果不是调用action则直接执行你的资源。

        4、如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;

        5、ActionProxy通过ConfigurationManager询问Struts配置文件(Struts.xml),找到需要调用的Actionlei .

        6、ActionProxy创建一个ActionInvocation的实例;

        7、ActionInvocation通过一系列的拦截器调用真正的Action,当然这涉及到相关拦截器的调用;

        8、Action执行完毕,ActionInvocation创建Result并返回,返回结果前要做些动作也是可以的。