千家信息网

tomcat解析server.xml后初始化servlet容器的过程

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容介绍了"tomcat解析server.xml后初始化servlet容器的过程"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希
千家信息网最后更新 2026年11月01日tomcat解析server.xml后初始化servlet容器的过程

本篇内容介绍了"tomcat解析server.xml后初始化servlet容器的过程"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

学习背景

在配置完server.xml之后,tomcat 会解析server.xml 然后初始化servlet容器,在前面我们学习tomcat的启动过程:
https://www.lixiang.red/articles/2019/08/07/1565188609044.html

Catalina的start方法

跟着昨天的脚步,在Bootstrap的init之后,后调用Bootstrap的start方法

public void start()        throws Exception {        if( catalinaDaemon==null ){            init();        }        // 使用反射去调用Catalina 的 start 方法        Method method = catalinaDaemon.getClass().getMethod("start", (Class [] )null);        method.invoke(catalinaDaemon, (Object [])null);    }

如上所示: 再通地反射去调用Catalina.java的start方法
在方法开始的地方,调用了load方法去加载

if (getServer() == null) {            load();        }

load初始化Digester相关信息

先是在initNaming设置一些运行时的属性,插入一下ENV和Property的知识点

ENV 和Property

public class EnvStudy {    public static void main(String[] args) {        Map getenv = System.getenv();        System.out.println(getenv);        Properties properties = System.getProperties();        System.out.println(properties);    }}

ENV 是电脑的环境变量
Properties 是程序运行时一些属性

初始化digester

 // Before digester - it may be needed        initNaming();
// Create and execute our Digester // 在createStartDigester里面配置server.xml的格式以及解析规则 Digester digester = createStartDigester();

createStartDigester的代码部分如下:



通过对比前面load 方法,我们可以看到两个计时方法

// 这个方法,是专门计时用的,其时间现现实生活中的时间,没有半毛钱关系long t1 = System.nanoTime();// 这个方法是和操作系统相关,对应着我们现实生活的时间 long t1=System.currentTimeMillis();

通过寻找熟悉的元素,我们发现,digester和server.xml里面是一一对应的


digester.addObjectCreate("Server",                                 "org.apache.catalina.core.StandardServer",                                 "className");

如上方法所代表的意思是:
当匹配到Server节点时,取className来创建Object , 如果设置的className为空,就使用StandardServer来创建Object

digester的栈结构

----- 栈顶GlobalNamingResources-----Server-----Catalina-----digester.addSetNext("Server/GlobalNamingResources",                            "setGlobalNamingResources",                            "org.apache.catalina.deploy.NamingResourcesImpl");

找到次栈顶的元素 Server, 调用其 setGlobalNamingResources方法,然后把栈顶元素 GlobalNamingResources做为参数传入到上面的方法中

启动Servlet容器

在经历一系列的inputstream判空之后, 开始进入真正启动的过程

// 使用上述定义好的digester规则去解析server.xml  inputSource.setByteStream(inputStream);                digester.push(this);                digester.parse(inputSource);

"tomcat解析server.xml后初始化servlet容器的过程"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

方法 过程 容器 元素 时间 知识 学习 内容 如上 属性 更多 现实 规则 反射 生活 运行 配置 实用 一一对应 学有所成 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云南咖啡 上海挚品互联网科技有限公司 亿人帮互联网科技有限公司 平安科技 互联网 亿人帮互联网科技 互联网和高科技公司 天速互联网络科技有限公司 宁波青枫互联网科技有限公司 成都互联网科技公司100强 互联网科技教育视频 华夏互联网科技业 企晟互联网信息科技有限公司 群盈汇互联网科技有限公司 全球科技与互联网公司市值变化 互联网科技接地气 互联网科技职业技能培训学校 互联网金融金融科技 河南商务圈互联网科技有限公司 科技互联网专业务虚会材料 高科技和互联网的现代国家 关于新基建和互联网科技 万易互联网科技有限公司 互联网教育科技公司vipkid 湖南诚度互联网科技有限公司 科技大学互联网 2021互联网科技公司排名 银川新华互联网科技学校是国营吗 中国科技和美国互联网 广州三三互联网科技有限公司 互联网的黑科技实验室
0