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。