分享
 
 
 

Jakarta Commons-Digester学习笔记

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

学习Digester笔记:

Digester原是Apache Jakarta Struts计划中的一部分,用来解析Web App中的XML配置文件,在开发一段时间之后,开发人员觉得这个小工具具有很普遍的使用场合,于是,将这个部分独立出来,放到Commons项目中。

Digester是一个将配置文件转换为Java对象的工具,有三个核心概念:

①:元素匹配规则Pattern(有点类似于XPath) →找出XML配置文件中对应的部分准备处理

②:处理规则Rule; →指定一个处理规则来处理这些待处理的元素

③:对象栈 →按照解析的层次关系,将XML配置文件中解析出的对象依次入栈

Digester解析的步骤:

①:创建一个Digester类的实例;

②:指定其使用的Pattern及Rule;

③:传递一个引用XML文件的对象参数到parse()方法;

try {

File input = new File(args[0]);

File rules = new File(args[1]);

//创建digester对象并指定解析规则

Digester digester = DigesterLoader.createDigester(rules.toURL());

//传递配置文件引用input到digester进行解析,解析出的对象就是对应的对象;

Catalog catalog = (Catalog) digester.parse(input);

System.out.println(catalog.toString());

} catch (Exception exc) {

exc.printStackTrace();

}

配置文件input如下:

<?xml version="1.0"?>

<!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by Leo (SinoBestStar) -->

<catalog library="somewhere">

<book>

<author>Author 1</author>

<title>Title 1</title>

</book>

<book>

<author>Author 2</author>

<title>His One Book</title>

</book>

<magazine>

<name>Mag Title 1</name>

<article page="5">

<headline>Some Headline</headline>

</article>

<article page="9">

<headline>Another Headline</headline>

</article>

</magazine>

<book>

<author>Author 2</author>

<title>His Other Book</title>

</book>

<magazine>

<name>Mag Title 2</name>

<article page="17">

<headline>Second Headline</headline>

</article>

</magazine>

</catalog>

Pattern规则文件如下:

<?xml version="1.0"?>

<digester-rules>

<object-create-rule pattern="catalog" classname="Catalog"/>

<set-properties-rule pattern="catalog">

<alias attr-name="library" prop-name="library"/>

</set-properties-rule>

<pattern value="catalog/book">

<object-create-rule classname="Book"/>

<call-method-rule pattern="author" methodname="setAuthor" paramcount="0"/>

<call-method-rule pattern="title" methodname="setTitle" paramcount="0"/>

<set-next-rule methodname="addBook"/>

</pattern>

<pattern value="catalog/magazine">

<object-create-rule classname="Magazine"/>

<call-method-rule pattern="name" methodname="setName" paramcount="0"/>

<pattern value="article">

<object-create-rule classname="Article"/>

<set-properties-rule>

<alias attr-name="page" prop-name="page"/>

</set-properties-rule>

<call-method-rule pattern="headline" methodname="setHeadline" paramcount="0"/>

<set-next-rule methodname="addArticle"/>

</pattern>

<set-next-rule methodname="addMagazine"/>

</pattern>

</digester-rules>

使用Digester的方法:

①:定制配置文件

②:写对象的Pattern文件

③:写与对象匹配的对象类,如上文中的Catalog、Book、Magazine类

④:生成Digester对象实例,指定规则及输入,进行解析

注意:在③中,如果Catalog与Magazine对象有关联(有Catalog.addMagazine()方法),需要用模式指令set-next-rule,

该指令的机理源码如下:

if (useExactMatch) {

MethodUtils.invokeExactMethod(parent, methodName,

new Object[]{ child }, paramTypes);

} else {

MethodUtils.invokeMethod(parent, methodName,

new Object[]{ child }, paramTypes);

}

child,与parent都是Digester对象栈中的元素,parent先入栈,child后入栈,可见set-next-rule所指定的方法为parent的方法。所以,在写模式文件时,需要注意,addMagazine()方法是需要写在Magazine元素内。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有