流程说明:

1.客户端浏览器(Client)向服务器发送一个 http 请求(HttpServletRequest)

2.Container(容器) 通过 web.xml 映射请求,并获得控制器(Controller)的名字

3.Container 调用控制器(StrutsPrepareAndExecuteFilter 或 FilterDispatcher)。在Struts 2.1.3 以前调用 FilterDispatcher,Struts 2.1.3以后调用 StrutsPrepareAndExecuteFilter。

4.Controller 调用 ActionMapper,ActionMapper 返回 ActionMapping 对象。

5.Controller 将请求的控制权委派给 ActionProxy,并把请求数据传给 ActionProxy

6.ActionProxy 调用配置管理器(ConfigurationManager) 读取配置文件的信息(struts.xml)

7.ActionProxy 拿到 Action、Interceptor等相关数据后,调用 ActionInvocation,并把 Action、Interceptor 等相关数据及请求数据传递给 ActionInvocation。

8.ActionInvocation 调用前置拦截器,把 request 请求里面的参数封装到 ActionContext 对象中的 ValueStack 对象中的值栈对象里面。

如果 Action 的属性名与 ValueStack 对象中的值栈对象的属性名相同(即与 request 请求里的参数相同),则将 ValueStack 对象中的值栈对象的属性值赋给对应的 Action 属性。

9.根据 Action 的配置信息,调用 Result 组件。

11.Result 信息返回给 ActionInvocation。将结果信息封装到 HttpServletResponse 对象中

12.容器将 HttpServletResponse 对象中信息打成响应数据包发送给客户端。

有疑问:
听说特定请求映射到特定 Action的相关信息存储在 ActionMapping 对象中,这就奇怪了,确定执行哪个 Action 不是由 ConfigurationManager 干的吗?如果 ActionMapper 就确定了哪个 Action,那后面调 ConfigurationManager 读取配置文件岂不是多余了?

ActionMapping 对象中刚开始时是空的,ConfigurationManager 对象去解析 struts.xml 后,将请求与 Action 的映射关系封装到 ActionMapping 对象中。

Struts2请求处理的内部流程说明(版本一)相关推荐

  1. Struts2请求处理的内部流程说明(版本二)

    文章目录 请求处理流程图 流程说明 请求处理流程图 流程说明 第 1 步: 客户端初始化一个指向 Servlet 容器(例如 Tomcat)的请求,例如:在浏览器中输入 http:localhost: ...

  2. Struts2请求处理流程及源码分析

    Struts2请求处理流程及源码分析 根据Web.xml配置,请求首先经过ActionContextCleanUp过滤器,其为可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助(Site ...

  3. struts2请求处理过程源代码分析(1)

    2019独角兽企业重金招聘Python工程师标准>>> 转载自:http://www.see-source.com/ 源码解析网 网上对于struts2请求处理流程的讲解还是比较多的 ...

  4. 【Google Play】正式版上架流程 ( 创建版本 | 设置国家地区 | 发布正式版 )

    Google Play 上架完整流程 系列文章目录 [Google Play]创建 Google 开发者账号 ( 注册邮箱账号 | 创建开发者账号 ) [Google Play]创建并设置应用 ( 访 ...

  5. 企业内部流程运转受阻?免费又高效不愧是它

    编者按:企业日常管理中会遇到各种各样的问题,其中企业内部流程管理问题,便是企业一个比较大的心病.此文,我们就来看看,MyApps平台匠心打造的工作流引擎,对企业内部流程管理的超神赋能作用. 工作流引擎 ...

  6. 学编程前博主是做测试的,当初在测试部作为一个小官还写了不少流程呢,今天突然翻到来跟大家分享一下测试流程(之测试内部流程)

    ··· 这个测试内部流程写于2010年6月,那个时候刚从大公司出来进了一个小公司.待惯大公司的人再去小公司真的不习惯,大公司分工分明,流程清晰:小公司就不一样了,什么都不明确,逮着什么干什么,逮着着谁 ...

  7. struts2值栈内部数据结构详解

    值栈是struts2内部一片很重要的区域,我在初学的时候,发现对于值栈这个数据结构的理解不是很深刻.例如OGNLContext是什么,ActionContext和值栈有什么关系.为什么ActionCo ...

  8. Oracle数据库管理›oracle内部的jdk版本

    相看他的自定义版本还是想看兼容SUN的那个版本? 如果是前者,那查询视图:dba_registry, 要是后者就不用查了,ORACLE已经说得很清楚了: oracle8i JVM 兼容 jdk1.2 ...

  9. 交个朋友回应罗永浩撰文事故:系没有处理好内部流程导致的误解

    昨晚,关于腾讯贵圈文章一事,交个朋友公关负责人发布回应称,这件事完全是因为我们没有处理好内部流程导致的一个误解,是我们百分之百的全责.对此,我们内部要认真检讨,以后不再犯这样的低级错误. 据悉,今天下 ...

最新文章

  1. Hyperscan-5.1.0 安装
  2. 对南昌杀人案的一些看法
  3. php课程实验总结报告_PHP课程总结20161125
  4. Java Optional学习笔记
  5. 计算机软件及应用stata,蒙特卡洛模拟及其Stata应用实现
  6. C和指针之字符串实现my_strrchr(char *str, int ch)的函数
  7. win10安装masm32 SDK并运行一个小程序
  8. JS_01JavaScript基础笔记
  9. “我今年 31 岁,工作 7 年,明年退休...”
  10. 应用层——使用 Socket 通信实现 FTP 客户端程序
  11. 算法:权重图的最最小生成树算法
  12. H5实现俄罗斯方块(一)
  13. Celo计划推出一种与欧元挂钩的新稳定币
  14. cloudflare免费设置_Cloudflare 入门教程:使用 Cloudflare 免费 CDN 加速 amp; 保护自己的网站...
  15. 定义CPU阀值(转)
  16. 百度离线地图-加载地图(一)
  17. shell中色彩处理和awk使用技巧
  18. 线性方程组的几种解法以及解的性质和结构
  19. 地图,GPS位置地图坐标系:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图),OpenGIS
  20. 黑马程序员————小牛皮糖学习笔记————IO流之未使用缓冲区读写文件

热门文章

  1. 怎么运行aws的示例程序_使Spring Boot应用程序在AWS上无服务器运行
  2. java 可视化_可视化Java 9模块关系
  3. java源文件编译成jar_从源文件和JAR文件构建Java代码模型
  4. cassandra 入门_Apache Cassandra和Java入门(第二部分)
  5. 注释嵌套注释_注释,无处不在的注释
  6. joo工作流_不要错过使用jOOλ或jOOQ编写Java 8 SQL单行代码的机会
  7. hibernate自动配置_Hibernate自动冲洗的黑暗面
  8. Spring Annotations我从没有机会使用第2部分:@ConfigurationProperties
  9. java与java ee_使用Java EE的ManagedExecutorService异步执行事务
  10. 在15分钟内使用Spring Boot和Spring Security构建一个Web应用程序