Tomcat源码解析(13)

本文介绍Tomcat中Digester库的应用,详细解释如何将XML文档元素转换为Java对象,包括对象创建、属性设置及方法调用等核心操作。

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

Digester库

   我们在Bootstrap类,来硬编码的,实例化各种类。

  

 Tomcat提供了server.xml来对应用程序进行配置。每个元素对应一个java对象。

  使用digester来将xml文档元素转换成java对象。


Digester本来是解析sturest-config.xml的。由于解析xml到java对象很常用。所以作为一个项目。

  Digester类,是主要的类。用于解析XML文档。对于XML文档每个元素,Digester对象都会检查它是否做事先预定义的事件。

  调用digester对象的parse()方法之前,要先定义好Digester对象执行哪些动作。(根元素与元素名字相同)


Rule定义了多种规则。Digester可以包含0个或者多个Rule实例。

  Rule类有begin方法和end方法,在解析XML文档时,当Digester实例遇到匹配某个模式的元素开始标签时,调用begin方法。

 1.当遇到employee元素的开始标签,检查是否有规则和模式与employee关联。若有指定Rule的begin方法,多个,则一次执行

 2.是否匹配employee/office/address 同理

 3.遇到结束标签,执行Rule的end方法


创建对象:如果想自定义,Digester在遇到某个模式时创建对象。则调用addObjectCreate()

 需要传入一个模式(根元素名),和一个Class对象。或者类名。

设置属性:addSetProperties(),设置属性也需要一个rule,不过都是通过employee来触发的。set对应的属性。

调用方法:Digester允许添加一个rule,当遇到规则对应的模式的时候,调用对象的方法addCallMethod()。

创建对象之间的关系:Digester实例有一个栈,临时存储创建的对象,当使用addObjectCreate(),会把结果压入栈。

  当第二个对象进入的时候,会将其作为参数 传入。

  digester.addSetNext("employee/office","addOffice"); 第二个参数是方法名。

验证xml文档:Digester类的validating属性,指明是否要对XML文档进行有效性验证。


在ContextConfig类,它会引用一些web.xml中的数据,它使用webDigester引用一个Digester对象。

createWebDigester()方法,调用变量webDigester的addRuleSet()。

 public void addRuleSet(RuleSet ruleSet)

 Rule对象的集合,就是RuleSet接口的实例。接口定义了addRuleInstance(),将Rule对象的集合添加到Digester中,和getNamespaceURI()返回将要应用在Rule对象的命名空间的URI。

 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值