1、Struts2的产生
由于Struts1设计上的缺陷,使它越来越不能满足开发的高要求,于是WebWork进入Struts1开发团队的视线。WebWork引进的新思想、新概念和功能,Struts1具有高市场占有率,于是2个开发团队进行了合作,共同退出了Struts2。
虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。
(图1:Struts2的产生)
2.Struts2的结构
一个请求在Struts2框架中的处理分为以下几个步骤:
2.1 客户端发出一个Http请求到web容器;
2.2 这个请求会经过图中的几个过滤器(ActionContextCleanUp、其他web应用过滤器),最后会到达FilterDispatcher过滤器(最新版本2.3.16中使用StrutsPrepareAndExecuteFilter);
2.3 调用FilterDispatcher核心控制器,ActionMapper查找需要调用的Action对象,返回Action对象的代理(ActionProxy);
2.4 ActionProxy从配置管理器中读取Struts2的相关配置(struts.xml以及它包含的.xml配置文件),然后创建ActionInvocation对象;
2.5 ActionInvocation在调用Action之前会依次的调用所用配置拦截器,执行结果后返回结果字符串;
2.6 ActionInvocation负责查找结果字符串对应的(Result),然后执行这个Result, 返回对应的结果视图(如JSP、ftl等) 来呈现页面;
2.7 调用所用配置拦截器(与2.5中顺序相反),响应(HttpServletResponse)被返回给浏览器。
(图2:Struts2的结构)