2.2 Struts 2工作流程结构
前面简要介绍了从Struts 1和WebWork到Struts 2的发展过程,下面简单介绍Struts 2的工作流程结构。
Struts 2的工作流程结构图如图2.3所示。
图2.3 Struts 2的工作流程结构图
该流程图概括了Struts 2的整个工作过程,从发出请求直至最终生成响应并返回给客户端一个页面的全部过程。下面分步讲解整个流程的工作情况。
(1)客户端提交一个(HttpServletRequest)请求。
(2)请求被提交到一系列(主要是3层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、FilterDispatcher)。注意:这里是有顺序的,先是ActionContext CleanUp,再是其他过滤器(SiteMesh等),最后到FilterDispatcher。
(3)FilterDispatcher接收到请求后,询问ActionMapper是否需要调用某个Action来处理这个(HttpServletRequest)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。
(4)ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类(该Action类一般是程序员自定义的处理请求的类)。
(5)ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action。但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。
(6)一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。然后根据结果返回对应的视图呈现给客户端(JSP、FreeMarker等)。
在项目中应用Struts 2框架其实和传统的JSP+JavaBean+Servlet开发项目差不多,只是用Struts 2代替了Servlet部分做控制器,然后在JSP中应用一些Struts 2提供的标签。Struts 2有效地把它们整合在一起,从而增强了规范性。