Struts2的运行流程及其工作原理
来源:互联网 发布:淘宝无线开放平台 编辑:程序博客网 时间:2024/04/24 12:35
Struts2是一套非常优秀的Web应用框架,实现优雅、功能强大、使用简洁。可以说是Struts2是一款非常成熟的MVC架构。
在我们学习Struts2时,最好是先学习它的运行流程、核心概念,从中得到启发,提升自己,而不仅仅是学习怎么怎么使用它。
一、系统架构
Struts2的官方文档附带了Struts2的架构图。从这张图可以很好的去理解Struts2
关于图中的Key:
- Servlet Filters:过滤器链,客户端的所有请求都要经过Filter链的处理。
- Struts Core:Struts2的核心部分,但是Struts2已经帮我们做好了,我们不需要去做这个
- Interceptors,Struts2的拦截器。Struts2提供了很多默认的拦截器,可以完成日常开发的绝大部分工作;而我们自定义的拦截器,用来实现实际的客户业务需要的功能。
- User Created,由开发人员创建的,包括struts.xml、Action、Template,这些是每个使用Struts2来进行开发的人员都必须会的。
- 1.FilterDispatcher是整个Struts2的调度中心,也就是MVC中的C(控制中心),根据ActionMapper的结果来决定是否处理请求,如果ActionMapper指出该URL应该被Struts2处理,那么它将会执行Action处理,并停止过滤器链上还没有执行的过滤器。
- 2.ActionMapper 会判断这个请求是否应该被Struts2处理,如果需要Struts2处理,ActionMapper会返回一个对象来描述请求对应的ActionInvocation的信息。
- 3.ActionProxy,它会创建一个ActionInvocation实例,位于Action和xwork之间,使得我们在将来有机会引入更多的实现方式,比如通过WebService来实现等。
- 4.ConfigurationManager是xwork配置的管理中心,可以把它看做struts.xml这个配置文件在内存中的对应。
- 5.struts.xml,是开发人员必须光顾的地方。是Stuts2的应用配置文件,负责诸如URL与Action之间映射关系的配置、以及执行后页面跳转的Result配置等。
- 6.ActionInvocation:真正调用并执行Action,它拥有一个Action实例和这个Action所依赖的拦截器实例。ActionInvocation会按照指定的顺序去执行这些拦截器、Action以及相应的Result。
- Interceptor(拦截器):是Struts2的基石,类似于JavaWeb的Filter,拦截器是一些无状态的类,拦截器可以自动拦截Action,它们给开发者提供了在Action运行之前或Result运行之后来执行一些功能代码的机会。
- 7.Action:用来处理请求,封装数据。
- 二、运行流程
注意:Action完整的调用过程都是由ActionInvocation对象负责
拦截器的运行被分成两部分,一部分在Action之前运行,一部分在Result之后运行,而且顺序是刚好反过来的。也就是在Action执行前的顺序,比如是拦截器1、拦截器2、拦截器3,那么运行Result之后,再次运行拦截器的时候,顺序就变成拦截器3、拦截器2、拦截器1了。
这就好比,你要去奶奶家,需要通过 水泊梁山->盘丝洞 -> 索马里,到了奶奶家,看奶奶回来的时候,就必须要通过 索马里 -> 盘丝洞 -> 水泊梁山。
所以ActionInvocation对象执行的时候需要通过很多复杂的过程,按照指定拦截器的顺序依次执行。
对应Struts2的架构图如下
9.到了奶奶家,然后执行Action的execute方法
10.然后根据execute方法返回的结果(Result),去struts.xml中匹配选择下一个页面
11.根据结果(Result)找到页面后,在页面上(有很多Struts2提供的模板),可以通过Struts2自带的标签库来访问需要的数据,并生成最终页面
注意:这时还没有给客户端应答,只是生成了页面
12.最后,ActionInvocation对象倒序执行拦截器,从奶奶家回来
13.ActionInvocation对象执行完毕后,已经得到响应对象(HttpServletResponse)了,最后按与过滤器(Filter)配置定义相反的顺序依次经过过滤器,向客户端展示出响应的结果
得到完整Struts2架构图
- Struts2的运行流程及其工作原理
- Struts2的运行流程及其工作原理
- Struts2 --- Struts2的运行流程及其工作原理
- 走进Struts2(一) — Struts2的运行流程及其工作原理
- struts2的工作流程和运行原理
- struts2的工作原理,流程
- Struts2的工作原理及工作流程
- Struts2的工作原理及工作流程
- struts2 工作原理,流程
- struts2 工作原理,流程
- struts2工作原理(流程)
- Struts2的优势及其工作原理
- struts2工作原理 工作流程
- struts2的工作流程和原理
- struts2的执行流程及工作原理
- struts2的执行流程、工作原理
- struts2的执行流程、工作原理
- Struts2的工作流程及原理
- JQuery解析XML
- http://cssload.net/----动画
- Leetcode189: Peeking Iterator
- .net(c#)操作IIS大全
- 源码推荐(12.09):超强 AFN 封装,一行搞定自适应label&适配iPhone
- Struts2的运行流程及其工作原理
- Luajit反编译之探索记
- 一步一步学习TypeScript(07.Any类型)
- thinkphp 3.2 =》0623-8_执行查询sql
- 【code】animate综合动画
- 简单的计算器算法
- Apache Kafka-0.8.1.1源码编译
- jmeter之http请求-文件上传脚本编写
- iOS之瀑布流,我觉得比较有创意的博客地址