您的位置:首页 > 编程语言 > Java开发

Struts2处理流程分析

2016-06-18 20:44 344 查看




Struts2处理流程分析


Struts2处理流程图




具体分析

客户端产生一个HttpServletRequest的请求,该请求被提交到一系列的标准过滤器(Filter)组件链中

如ActionContextCleanUp:它主要是清理当前线程的ActionContext、 Dispatcher,

FilterDispatcher主要是通过ActionMapper来决定需要调用那个Action,

FilterDispatcher是控制器的核心,也是MVC中控制层的核心组件 )。

核心控制器组建FilterDispatcher根据ActionMapper中的设置获得是否需要调用某个Action组件 来处理这个HttpServletRequest请求,如果ActionMapper决定调用某个Action组件,FilterDispatcher核 心控制器组建就会把请求的处理权委托给ActionProxy组件
ActionProxy组建通过ConfigurationManager组件获得Struts2框架的配置文件struts.xml,最后找到需要调用的目标Action组件类,然后ActionProxy组建 就创建出一个实现了命令模式的ActionInvocation类的对象实例类的对象实例(这个过程包括调用Action组件本身之前调用多个的拦截器 组建的before()方法 ) 同时ActionInvocation组件通过代理模式调用目标Action组建。但是在调用之前ActionInvocation组建会根据配置文件中的设置项目加载与目标Action组建相关的所有拦截器组建(Interceptor)。
一旦Action组建执行完毕,ActionInvocation组建将根据开发人员在Struts2.xml配置文件中定义的各个配置项目 获得对象的返回结果--为这个Action组建的结果码(一个像SUCCESS,INPUT)然后根据该返回的结果调用目标JSP页面以实现显示输出。
最后各个拦截器组建会被再次执行(但是顺序和开始时相反,并调用after()方法),然后请求最终被返回给系统的部署文件中配置的其他过滤 器,如果已经设置了ActionContextCleanUp过滤器,那么FilterDispatcher就不会清理在ThreadLocal对象中保 存的ActionContext信息。如果没有设置ActionContextCleanUp过滤器,FilterDispatcher就会清除掉所有的 ThreadLocal对象。


更加清晰的来说就是:

客户端初始化一个指向servlet容器的请求。

请求经过一系列的过滤器( ActionContextCleanUp、SiteMesh )

FilterDispatcher被调用,并询问ActionMapper来决定这个请求是否需要调用某个Action

ActionMapper决定要调用那一个Action,FilterDispatcher把请求交给ActionProxy。

ActionProxy通过Configurate Manager询问Struts配置文件,找到要调用的Action类

ActionProxy创建一个ActionInvocation实例

ActionInvocation实例使用命令模式来调用,回调Action的exeute方法

一旦Action执行完毕,ActionInvocation负责根据Struts.xml的配置返回结果。


比较重要的类的介绍

ActionMapper其实是HttpServletRequest和Action调用请求的一个映射 ,他屏蔽了Action对于Request等Java servlet类的依赖。Struts2中它的默认实现类是DefaultAtionMapper,ActionMapper很大的用处可以根据自己的需要来设计url格式,它自己也有Restful的具体实现。

ActionProxy和ActionInvocation:

Action的一个代理,由ActionProxyFactory创建,它本身不包括Action实例,默认实现DefaultActionProxy是由ActionInvocation持有Action实例。 ActionProxy作用是如何取得Action,无论是本地还是远程 。而 ActionInvocation的作用是如何执行Action ,拦截器的功能就是咱ActionInvocation中实现的。

ConfigurateProvider和Configuration

ConfigurationProvider就是Struts2中配置文件的解析器,Struts2中的配置文件主要是实现XmlConfigurationProvider及其子类StrutsXmlConfigurationProvider来解析。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息