Struts2框架及实现原理和工作流程

来源:互联网 发布:网络黄金闫波 编辑:程序博客网 时间:2024/05/19 16:02
Struts2为提供了一个为用户快速构建应用程序的平台。
Struts2是基于OpenSymphony的网络工程框架。
Struts2实现模型视图控制器(MVC)设计模式。
在Struts2的模型、视图和控制器中分别实现了Action,result和FilterDispatcher。
该控制器的工作是将用户的请求(request)映射到适当的action。
Struts2 的 FilterDispatcher 进行着控制器的工作。
模型包含数据和业务逻辑。
在Struts2 的模型中,实现了Action部分。
视图是MVC模式的显示部分。

Struts 2的视图是一般是使用JSP,Velocity Template,Freemaker或其他表示层技术实现的


控制器接收用户请求(request),并确定哪些Struts2的Action被调用。
框架创建一个Action实例 关联ActionInvocation新创建的实例。
Struts2调用的action应该通过一系列应用程序的XML文件中定义的拦截器拦截处理。
框架调用ActionInvocations invoke()方法开始执行action。
当每次invoke()方法被调用,ActionInvocation咨询其状态并执行下一个拦截器。
ActionInvocation控制堆栈中通过调用interceptors intercept()方法的拦截器。
拦截器的intercept()方法依次调用ActionInvocation 的invoke()方法直到所有拦截器都被调用,最后action本身将被调用,相应的结果将返回给用户。
一些拦截器工作在Action执行之前,一些拦截器工作在Action执行之后,这没有必要的,它应该在每次调用的时候都工作。这些拦截器是调用之前和之后的都运行。
首先是所有的拦截器按着他们在栈中定义的顺序执行。
当action被调用,result将生成。

再次,所有的拦截器按目前堆栈相反的顺序调用。


Strut2的另外2个重要特征是ONGL和ValueStack。
Object-Graph Navigation Language (OGNL) 是一种强大的表达式语言是用来查询和操纵ValueStack中的数据。
OGNL帮助数据传输和类型转换。
OGNL表达式语言提供简化stytax引用Java对象。
OGNL被用于绑定Java端数据属性的string-based视图层。


总结:


客户端提交一个(HttpServletRequest)请求,请求被提交到一系列(主要是3层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、 FilterDispatcher)。注意:这里是有顺序的,先ActionContext CleanUp,再其他过滤器(Othter Filters、SiteMesh等),最后到FilterDispatcher。


FilterDispatcher是控制器的核心,就是MVC的Struts 2实现中控制层(Controller)的核心。


FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServlet Request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。


ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类。例如,用户注册示例将找到UserReg类。


ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action。但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。


一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。



原创粉丝点击