Tomcat server.xml的加载过程

本文详细探讨了Tomcat在启动过程中如何通过Catalina的load方法加载server.xml配置文件。使用digester和SAXParser进行边读边解析,并介绍了createStartDigester、configFile、对象创建与设置等步骤。在解析过程中,注意到addChild方法会启动web应用,同时Host和Context会注入相应的Listener,而无需在XML中显式声明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跟踪Tomcat的启动过程,可以发现是在Catalina调用load方法时对server.xml进行加载的

观察Catalina的load方法

load() -> createStartDigester()
       -> configFile()
       -> digester.push(this)
       -> digester.parse()

tomcat使用digester来帮助解析server.xml,digester内部是使用saxparser来解析的,是基于流的解析,边读边解析,可以制定规则,使得在解析过程遇到特定元素做相应操作。

(1)createStartDigester方法创建digest规则
addObjectCreate/addSetProperties/addSetNext/addRuleSet实际都相当于在addRule
Rule接口有begin/body/end/finish等方法,分别在开始读某个元素,结束读某个元素时调用。

  • addObjectCreate:遇到元素时创建
  • addSetProperties:遇到元素时将元素的属性设置到对象里
  • addSetNext:调用父类的方法设置子元素

(2)configFile方法以常量”conf/server.xml”作为路径获取server.xml文件对象

(3)将Catalina传入digester
将Catalina设为根元素,使得server可以通过setServer设置到Catalina里。

(4)将xml文件转化为对象并设置到Catalina里
在遇到元素时,将会创建对象,在元素结尾时,将把元素设置到父级元素中。所以生成顺序是从父到子,设置顺序是从子到父。

注意:

(1)Engine设置Host,或者Host设置Context时使用的是addChild方法,在addChild方法中,会启动child,所以在tomcat刚开始启动读取server.xml时就会加载好web应用。

(2)观察Host的RuleSet和Context的RuleSet可知,会为Host注入HostConfig(Listener),为Context注入ContextConfig(Listener),无需在server.xml中声明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值