Struts2请求处理的内部流程图/结构图/原理图(版本一)

在这里插入图片描述

流程说明:

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 对象中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python求字符串的所有子集_打印一字符串的所有子集 | 学步园

#include#include#include#includeusing namespace std;void getSub(string src,int i,vector &result){//取子串方法:将串src中的第i个字符抠掉即为所求的子串assert(iif (src.length()<1){result.push_back(src);return;}src.erase(i,1); //删除从i开始的一个字符r…

aws 堆栈模板_使用Arquillian和LocalStack脱机测试AWS云堆栈

aws 堆栈模板在AWS云堆栈 &#xff08;例如DynamoDB&#xff0c;S3等&#xff09;上构建应用程序时&#xff0c;需要针对这些组件编写测试。 您可能首先想到的是拥有一个用于生产的环境和另一个用于测试的环境&#xff0c;然后针对该环境运行测试。 这对于集成测试&#xff0c…

java中springdi_java中spring入门

1、spring的概念apache推出的java企业框架&#xff0c;提供了基于ioc的对象工厂、aop面向切面编程等功能及其他增强功能。当前版本4.xxx&#xff0c;支持注解的配置。 springmvc。2、控制反转(ioc):inversion of control。用来描述框架的重要特征spring针对ioc的具体实现&#…

分析 Web 资源的访问过程(Servlet 程序访问过程)

浏览器输入地址&#xff1a;http://224.45.10.567:8080/qpw/greeting?namezs 浏览器通过224.45.10.567:8080与服务器&#xff08;Web Server&#xff0c;例如&#xff1a;Tomcat&#xff09;连接 服务器会在webapps目录下寻找qpw目录&#xff0c;找到后再进入qpw目录内寻找WE…

spring flux_Spring Web-Flux – Cassandra后端的功能样式

spring flux在上一篇文章中&#xff0c;我介绍了Spring Web-Flux的基础知识&#xff0c;它表示Spring框架的Web层中的响应式支持。 我已经展示了使用Spring Data Cassandra并在Spring Web Layers中使用传统注释支持的端到端示例&#xff0c; 大致如下&#xff1a; ... import…

tableau选择计算_干货 | 年薪40W, 掌握Tableau的留学生真的赚翻了

文章来源&#xff1a;UniCareer Tableau作为一款数据分析工具向来被视为文科转行Data必学因为它不需要你有Coding经验而且极易上手那么&#xff0c;Tableau究竟该怎么学&#xff1f;学会Tableau可以胜任哪些岗位&#xff1f;1Tableau: 学到就是赚到Tableau作为一款数据可视化工…

java 对线程进行事务控制_Java 多线程事务回滚 ——多线程插入数据库时事务控制...

背景日常项目中&#xff0c;经常会出现一个场景&#xff0c;同时批量插入数据库数据&#xff0c;由于逻辑复杂或者其它原因&#xff0c;我们无法使用sql进行批量插入。串行效率低&#xff0c;耗时长&#xff0c;为了提高效率&#xff0c;这个时候我们首先想到多线程并发插入&am…

Java Servlet 编程,重定向介绍

文章目录什么是重定向重定向流程演示图如何重定向注意的问题重定向的特点重定向演示什么是重定向 服务器向浏览器发送一个状态码 302 及一个消息头 location&#xff0c;浏览器收到后&#xff0c;会立即向 location 所指向的地址发送请求。 重定向流程演示图 &#xff08;1&a…

java platform_Java Platform Module系统中的可选依赖项

java platformJava平台模块系统&#xff08;JPMS&#xff09;对依赖项有很强的见解&#xff1a;默认情况下&#xff0c;需要它们&#xff08;可以访问&#xff09;&#xff0c;然后在编译时和运行时都将它们存在。 但是&#xff0c;这不适用于可选的依赖项&#xff0c;因为代码…

python图片重命名 工具_python - 请问django如何给上传的图片重命名

问 题我的models.py:pic models.ImageField(upload_toimg/%Y/%m)怎样给上传的图片重命名&#xff1f;例如&#xff1a;以当前上传的时间给图片命名.谢谢~&#xff01;解决方案结贴&#xff1a;1、先在你项目中添加一个文件夹如&#xff1a;system 在文件夹下添加__init__.py 和…

java索引序列_视图、序列、索引

视图视图(VIEW)也被称作虚表&#xff0c;即虚拟的表&#xff0c;是一组数据的逻辑表示。视图对应于一个SELECT语句&#xff0c;结果集被賦予一个名字&#xff0c;即视图名字。视图本身并不包含任何数据&#xff0c;它只包含映射到基表的一个查询语句&#xff0c;当基表数据发生…

Java 打 jar 包时,MANIFEST.MF 文件详解

具体详情&#xff0c;详见《MANIFEST.MF文件详解》 manifest.mf 的编写规则 不能有空行和空格的地方 第一行不可以是空行&#xff08;第一行的行前不可以有空行&#xff09;&#xff0c;行与行之间不能有空行&#xff0c;每行的行尾不可以有空格 一定要有空行的地方 最后一行…

hibernate删除记录_Hibernate记录:常见问题的提示和解决方案

hibernate删除记录如何通过适当的日志记录解决一些最常见的Hibernate问题&#xff1f; Hibernate的日志记录配置是一个重要但很少讨论的主题。 正确的配置可以帮助您在开发过程中发现潜在的问题&#xff0c;而错误的配置则可以在生产中导致严重的性能问题。 这就是我在新书《 …

python中的range_python中range()与xrange()用法分析

本文实例讲述了python中range()与xrange()用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;据说range比xrange开销要大&#xff0c;原因是range会直接生成一个list对象&#xff0c;而xrange每次调用返回其中的一个值(参考://www.jb51.net/article/50072.htm)。于是…

java velocity详解_[velocity] velocity详解

(1)为什么要使用模版语言&#xff1f;在服务器端可以使用 Velocity处理模板和生成的动态内容(HTML、XML等)。这和JSP技术的目标非常接近。但是&#xff0c;JSP模型可以毫无阻碍地访问底层的Servlet API和Java编程语言。它基本上是一种在很大程度上开放的访问模型。而作为一种完…

Java 相关命令详解

文章目录jps常用选项javac标准选项联编选项非标准选项jarjavajavadoc常用选项javah常用选项javap常用选项jconsolejstatjstackjmapjavaw其它jps jps(Java Virtual Machine Process Status Tool) 是 JDK 1.5 提供的一个显示当前所有 java 进程 pid 的命令&#xff0c;简单实用&…

pc端游戏修改器_原神:不要吐槽手机内存了,想要获得最佳游戏体验,PC端最合适...

想必大家这段时间都被一个米哈游公司的游戏给刷屏了吧&#xff0c;它就是号称用时三年&#xff0c;斥资一亿美元打造的《原神》&#xff0c;正是这种情况下&#xff0c;原神的关注远远要高于其他游戏&#xff0c;并且玩家的期望值也是和关注度成正比。但是&#xff0c;一经发布…

java调用命令行命令_Java命令行界面(第4部分):命令行

java调用命令行命令我的Java命令行解析系列的第四部分介绍了Commandline &#xff0c;它被描述为 “用于解析命令行参数的Java库”&#xff0c;它“基于使用注释从命令行参数到对象的映射”。 像以前介绍的args4j和jbock一样&#xff0c; Commandline使用注释来提供潜在命令行…

java 字段为空设置默认值_java – 当字段为空时使用MyBatis添加默认值

当我的字段为空时,我想从数据库中插入默认值.我使用的是Oracle数据库.CREATE TABLE "EMPLOYEE"("COL1" VARCHAR2(800) NOT NULL ENABLE,"COL2" VARCHAR2(100) DEFAULT NOT NULL toto,CONSTRAINT "PK_EMPLOYEE" PRIMARY KEY ("COL…

JVM 内存示意图(内存结构图/内存解析图)

图 1&#xff1a; 图 2&#xff1a; 图 3&#xff1a; 图 4&#xff1a;