四、Struts2的执行过程和原理
执行过程和原理(可能面试题)
学习目标:熟知struts2的执行过程(下图记住)。源码可以不看

a、过滤器的初始化
、StrutsPrepareAndExecuteFilter是一个过滤器,过滤器就有初始化方法
:dispatcher = init.initDispatcher(config);//初始化请求分发器。
、InitOperations:
public
Dispatcher initDispatcher( HostConfig filterConfig ) {Dispatcher dispatcher = createDispatcher(filterConfig);
dispatcher.init();
return dispatcher;
}
init_FileManager();
init_DefaultProperties(); // [1]
init_TraditionalXmlConfigurations(); // [2]
init_LegacyStrutsProperties(); // [3]
init_CustomConfigurationProviders(); // [5]
init_FilterInitParameters() ; // [6]
init_AliasStandardObjects() ; // [7]
Dispatcher:分发器
private
void
init_TraditionalXmlConfigurations() {String configPaths = initParams.get("config");
if (configPaths == null) {
configPaths = DEFAULT_CONFIGURATION_PATHS;
}
String[] files = configPaths.split("\\s*[,]\\s*");
for (String file : files) {
if (file.endsWith(".xml")) {
if ("xwork.xml".equals(file)) {
configurationManager.addContainerProvider(createXmlConfigurationProvider(file, false));
} else {
configurationManager.addContainerProvider(createStrutsXmlConfigurationProvider(file, false, servletContext));
}
} else {
throw
new IllegalArgumentException("Invalid configuration file name");}
}
}
(重要)结论:
初始化过滤器时,会按顺序加载以下配置文件:
struts-default.xml,struts-plugin.xml,struts.xml这几个配置文件
struts-default.xml:struts2-core-**.jar包内部(框架内部的配置文件)
其中定义了一些Bean对象;有一个抽象的package,内部有一些结果类型,一些拦截器的定义,还有拦截器小组的定义。默认的拦截器小组名字是defaultStack。
struts-plugin.xml:struts2提供的插件中(插件内部提供)
struts-xml:程序员自己定义的(开发中经常搞)
b、过滤器的doFilter方法:用户的每次访问
- ActionMapping mapping = prepare.findActionMapping(request, response, true);根据你的动作请求,从已经初始化好的配置文件中找对应的动作名称。
- Dispatcher:
ActionProxy proxy = config.getContainer().getInstance(ActionProxyFactory.class).createActionProxy(
namespace, name, method, extraContext, true, false);
四、Struts2的执行过程和原理的更多相关文章
- C C++ Java C# JS编译、执行过程的原理入门分析
C.C++是典型的编译型编程语言,编译链接后,点击则可执行. JS,解释型脚本语言,则不需要进行编译,直接解释执行. Java和C#则是所谓的高级语言,编译执行的方式做了很多处理, 尤其是C#,VS编 ...
- Struts2内部执行过程
首先是Struts2的流程图. 一.当有一个请求的时候.执行以下流程. 1 客户端初始化一个指向Servlet容器的请求: 2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做Act ...
- 动图+源码,演示Java中常用数据结构执行过程及原理
最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...
- 动图+源码,演示 Java 中常用数据结构执行过程及原理
阅读本文大概需要 3.7 分钟. 作者:大道方圆 cnblogs.com/xdecode/p/9321848.html 最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想 ...
- struts2笔记---struts2的执行过程
1.服务器启动: 加载项目web.xml 创建struts核心过滤器对象,执行filter-->init() struts-default.xml 核心功能的初始化 struts-plu ...
- Synchronize执行过程
Synchronize执行过程及原理 在windows原生应用程序开发中,经常伴随多线程的使用,多线程开发很简单,难点就是在于线程的同步,在Delphi中提供了VC中不具备的一个过程Synchroni ...
- Bigbluebutton服务执行过程及相关配置文件
BigBlueButton服务列表 BigBlueButton由许多开源的服务组成,看似很麻烦,实际上拆分开每一个服务就很简单了,组件化平台化.究竟BBB都用到了哪些开源服务?我们来列举一下,名称均带 ...
- Struts2拦截器的执行过程浅析
在学习Struts2的过程中对拦截器和动作类的执行过程一度陷入误区,特别读了一下Struts2的源码,将自己的收获分享给正在困惑的童鞋... 开始先上图: 从Struts2的图可以看出当浏览器发出请求 ...
- Web APi之过滤器执行过程原理解析【二】(十一)
前言 上一节我们详细讲解了过滤器的创建过程以及粗略的介绍了五种过滤器,用此五种过滤器对实现对执行Action方法各个时期的拦截非常重要.这一节我们简单将讲述在Action方法上.控制器上.全局上以及授 ...
随机推荐
- 离线使用echarts及一些细节
最近要做图表,用js起来太麻烦,所以就找些开源的库来用,发现echarts挺不错, echarts的文档把所有东西都说的很明白了,直接下载zip包,要是想离线使用的话只需要引用下载包里面的dist文件 ...
- jquery判断自己是父节点的第几个子节点
<div> <span>内容</span> <span>内容</span> <span>内容</span> < ...
- JVM加载class文件的原理机制
Java中的所有类,都需要由类加载器装载到JVM中才能运行.类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中.在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式装载的 ...
- DimDate
CREATE TABLE [dbo].[DimDate]( [DateKey] int NOT NULL , [FullDate] DATE NOT NULL , [MonthNumberOfYear ...
- centos7 下安装MongoDB
查看MongoDB的最新版官方下载地址: https://www.mongodb.com/download-center#community 使用wget命令下载安装包 wget https://fa ...
- Mingyang.net:Controller必需是public吗?
通常定义Controller时一般都定义成public: package net.mingyang.modules.system; @Controller @RequestMapping(" ...
- mysql设置定时任务
–查看时间调度器是否开启 SHOW VARIABLES LIKE 'event_scheduler'; SELECT @@event_scheduler; –开启时间调度器 SET GLOBAL ev ...
- 基于RDBMS的BI设计
================================ 都说BI,什么OLAP,什么ROLAP,MOLAP,但是如何基于RDBMS实现,基本都不怎么说. 怎么做的: 1.通过多维分析模型,存 ...
- Oracle 删除数据后释放数据文件所占磁盘空间
测试的时候向数据库中插入了大量的数据,测试完成后删除了测试用户以及其全部数据,但是数据文件却没有缩小.经查阅资料之后发现这是 Oracle “高水位”所致,那么怎么把这些数据文件的大小降下来呢?解决办 ...
- Android开发-Hello World+phonegap(Cordova)
想着把IOS的程序在Android上实现一下,尝试Android开发,结果发现Android的开发环境也不好弄.接下来记录下整个过程,耳熟能详的操作就不再赘述,重点记录个人特别的经历: 一.安装jav ...