Struts2的工作原理
来源:互联网 发布:三笠宫崇仁亲王知乎 编辑:程序博客网 时间:2024/06/07 01:21
struts2的工作原理图
请求首先通过Filter chain,Filter主要包括ActionContextCleanUp,它主要清理当前线程的ActionContext和Dispatcher;FilterDispatcher主要通过AcionMapper来决定需要调用哪个Action。
ActionMapper取得了ActionMapping后,在Dispatcher的serviceAction方法里创建ActionProxy,ActionProxy创建ActionInvocation,然后ActionInvocation调用Interceptors,执行Action本身,创建Result并返回,当然,如果要在返回之前做些什么,可以实现PreResultListener。
2. Struts2部分类介绍
ActionMapper
ActionMapper其实是HttpServletRequest和Action调用请求的一个映射,它屏蔽了Action对于Request等java Servlet类的依赖。Struts2中它的默认实现类是DefaultActionMapper,ActionMapper很大的用处可以根据自己的需要来设计url格式,它自己也有Restful的实现,具体可以参考文档的docs\actionmapper.html。
ActionProxy&ActionInvocation
Action的一个代理,由ActionProxyFactory创建,它本身不包括Action实例,默认实现DefaultActionProxy是由ActionInvocation持有Action实例。ActionProxy作用是如何取得Action,无论是本地还是远程。而ActionInvocation的作用是如何执行Action,拦截器的功能就是在ActionInvocation中实现的。 ConfigurationProvider&Configuration
ConfigurationProvider就是Struts2中配置文件的解析器,Struts2中的配置文件主要是尤其实现类XmlConfigurationProvider及其子类StrutsXmlConfigurationProvider来解析。
3. Struts2请求流程
1、客户端发送请求
2、请求先通过ActionContextCleanUp-->FilterDispatcher
3、FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action
4、如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy,这儿已经转到它的 Delegate--Dispatcher来执行
5、ActionProxy根据ActionMapping和ConfigurationManager找到需要调用的Action类
6、ActionProxy创建一个ActionInvocation的实例
7、ActionInvocation调用真正的Action,当然这涉及到相关拦截器的调用
8、Action执行完毕,ActionInvocation创建Result并返回,当然,如果要在返回之前做些什么,可以实现 PreResultListener。添加PreResultListener可以在Interceptor
struts2工作原理
(a)用户发送http(httpServletRequest)请求,请求web服务器(Tomcat),web服务器加载web部署描述文件(web.xml),执行过滤器
ActionContextCleanUp,Other filters,filterDispatcher等等 ActionContextCleanUp:需要与装饰器(siteMesh)插件一起使用,作用:使用装饰器插件,struts2中Action不再管理Action中属性,使用ActionContextCleanUp来清理Action中属性other filters:其他过滤器(siteMesh)filterDispatcher:struts2核心控制器
注意:过滤器执行是有顺序(同图),值栈在filterDispatcher中创建
(b)filterDispatcher询问ActionMapper是否请求Action,如果不请求Action,就不再实行struts2容器,否则filterDispatcher会调用ActionProxy,ActionProxy通过配置文件管理器(Configuraction Manager)加载struts.xml 配置文件,找到相应Action
(c)ActionProxy会创建Action Invocation对象先执行struts2中相应的拦截器,在行所请求Action
(d)Action Invocation执行Result找到分发页面
(e)(反向)执行struts2中拦截器或拦截器栈
(f) 响应(HttpServletResponse)给客户端
struts2优势:
与Servlet API(Servlet容器)解耦
- Struts2的工作原理
- Struts2的工作原理
- Struts2的工作原理
- Struts2的工作原理
- struts2的工作原理
- Struts2的工作原理
- Struts2的工作原理
- struts2的工作原理
- struts2的工作原理
- Struts2的工作原理
- struts2的工作原理
- Struts2的工作原理
- Struts2的工作原理
- Struts2的工作原理
- Struts2的工作原理
- Struts2的工作原理
- Struts2的工作原理
- Struts2 的工作原理
- 审对23案81名刑事被告人
- 精简菜单和完整菜单之间进行切换
- 1207: [HNOI2004]打鼹鼠
- 多浏览器测试对比工具
- 互联网思维:3个片段,9大招式,19条法则
- Struts2的工作原理
- Linux System Programming note 4 —— Advanced File I/O
- 关于数据结构的学习
- MySQL学习笔记之十六 使用MySQL内建复制功能
- 成功不是终点,失败也并非末日,最重要的是继续前进的勇气
- 用 VC2012 产生脱离VC运行库的 C/C++ 程序
- 此博客不再更新!
- 单链表是否有环
- 开源 免费 java CMS - FreeCMS1.9 会员权限管理