Struts2的运行流程及其工作原理
Struts2是一套非常优秀的Web应用框架,实现优雅、功能强大、使用简洁。可以说是Struts2是一款非常成熟的MVC架构。
在我们学习Struts2时,最好是先学习它的运行流程、核心概念,从中得到启发,提升自己,而不仅仅是学习怎么怎么使用它。
在网上看到这样一句话:
你千万不要成为一个只会熟练使用框架的程序员,那样,你会疲于奔命,你也许永远只会使用 Hadoop ,而写不出一个 Hadoop ,你只是一个 Hadoop程序员,而不是一个分布式工程师。
你也许永远只会使用 Struts,而忘记了自己写 filter,你只是一个 SSH 程序员,而不是一个 Web 工程师。
话不多说,一起走进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:用来处理请求,封装数据。
- 二、运行流程
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
注意:Action完整的调用过程都是由ActionInvocation对象负责
![](/assets/blank.gif)
拦截器的运行被分成两部分,一部分在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的运行流程及其工作原理相关推荐
- php的工作原理,PHP的运行机制和工作原理的内容
这篇文章给大家介绍的内容是关于PHP的运行机制和工作原理的内容,有着一定的参考价值,有需要的朋友可以参考一下. 一.PHP设计理念及特点 多进程模型:由于PHP是多进程模型,不同请求间互不干涉,这样保 ...
- MyBatis核心流程以及工作原理
MyBatis核心对象 根据以下这四大核心对象,我们就能理清MyBatis的工作原理. SqlSession对象,该对象中包含了执行SQL语句的所有方法.类似于JDBC里面的Connection. E ...
- zookeeper集群部署监控与选举同步流程等工作原理
部署一个zookeeper集群,要多简单就能有多简单(下载压缩包,解压,修改配置文件zoo.cfg,执行启动脚本),但是想要真的把这套东西玩好了,还是需要费些功夫研究一番的.就跟自己搭建一个lnmp的 ...
- 【struts2】Struts2的运行流程
1)前提条件 在讲解流程之前,假设我们已经建立了的一个名为strutsDeepen的web工程,该工程仅仅实现了简单的用户登陆与欢迎界面.具体的实现为: 在web.xml中配置了Struts2的过滤器 ...
- springmvc工作流程_SpringMVC工作原理
买了好多书,但是没有一本是看完的,这是看完的第一本书,虽然页数不多.技术早就用了老多遍了,还是总结一下吧! 一.MVC模式 MVC是 model.view.和controller的缩写,分别代表web ...
- springmvc工作流程_springMVC工作原理及流程详细讲解
简述 本文主要介绍springMVC工作原理. 工作原理 客户端发送HTTP请求,DispatcherServlet控制器拦截到请求,调用HandlerMapping 解析请求对应的Handler,H ...
- Hadoop学习笔记 --- YARN执行流程与工作原理
一.YARN简述 首先介绍一下YARN 在Hadoop2.0版本引进的资源管理系统,直接从MapReduce V1演化而来(由于引擎的功能缺陷): 原因是将MapReduce1中的Job Tracke ...
- ssh工作流程(工作原理)
目录 ssh简介 加密的方式 ssh工作流程 1.版本号协商 2.密钥和算法协商 产生会话密钥的流程: 认证阶段 基于口令的认证: 基于公钥的认证:免密登录 ssh简介 ssh: secure she ...
- SpringMVC执行流程及工作原理
1.SpringMVC的原理和组成 从上图中可以看出:SpringMVC是属于SpringWeb里面的一个功能模块(SpringWebMVC).专门用来开发SpringWeb项目的一种MVC模式的技术 ...
最新文章
- linux 网络编程之信号机制
- 电容触摸按键IC AT42QT1070
- 第一章 为什么使用单元测试
- F5 配置手册 -F5 BIG-IP 10.1-2-配置-基本参数
- jsp里面声明了utf-8格式,也写了字符编码过滤器,数据库编码也是utf-8,就连java.......
- MMJ-Spring Boot(Java)获取小程序Openid
- 前端学习(2848):鼠标点击事件
- linux 下的sar工具命令小结
- Spark之性能优化(重点:并行流数据接收)
- matlab的小波分析,Matlab下小波分析wavelet常用命令
- 图书馆管理系统(连接数据库)
- 硬笔书法三要素:笔法、结构和章法
- [转]决定人生的三种成本:机会成本,沉没成本,边际成本
- 团组情景意识概念模型
- 旅游业休克:“云旅游+直播买货”急救
- 游承超:钢化玻璃膜既保护屏幕又不影响触感(4P)
- 家用小型中央空调发展的现状与趋势
- 【Java】银行账户管理系统
- 计算机考研分数403,总分403分过来人分享成功考研经验_跨考网
- assert()使用