Digester组件

刚认识Digester,记录一下:

Digester随着Struts的发展以及其的公用性而被提到commons中独自立项,是apache的一个组件 apache commons-digester.jar,通过它可以很方便的从xml文件生成java对象.你不用再象以前通过jdom或者Xerces去读取一个document对象.(jdom和Xerces仍然有它们的用武之地及强大之处,在其它应用里你也少不了它们)

工作原理如下: Digester底层采用SAX(Simple API for XML)析XML文件,所以对象转换由"事件"驱动,在遍历每个节点时,检查是否有匹配模式,如果有,则执行规则定义的操作,比如创建特定的Java对象,或调用特定对象的方法等。此处的XML元素根据匹配模式(matching pattern)识别,而相关操作由规则(rule)定义。

Test.xml文件

<identity>
  <ldap>
    <name>hao123</name>
    <url>https://www.hao123.com/</url>
  </ldap>
</identity>

Identity 类

    private String name;

    private String url;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

提取xml数据,赋值给Test类

InputStream is = IdentityUtil.class.getResourceAsStream("/test.xml");//读取xml文件
Identity id = new Identity();
//将xml文件的数据添加到对象中
Digester d = new Digester();
d.push(id);
d.addCallMethod("identity/ldap/name","setName",0);
d.addCallMethod("identity/ldap/url","setUrl",0);
d.parse(is);

我们可以看到,使用Digester的代码变得相当简洁,而要付出的代价就是为装载逻辑写一个配置文件。

除了Digester之外,当然还有其它的方法来实现Java对象的绑定与装载:

1.java.util.Properties,简单的配置属性(比如数据库连接信息),可以写在properties文件中,调用Properties对象的load(InputStream)方法将配置中的健值对加载到Properties对象中。这种方式一般仅适用于简单的配置信息的加载。

2.JAXB,Java Architecture for XML Binding,在Java Web Services Developer Pack V 1.1中提供了一个参考实现。使用这种方式时,除了提供数据源XML文件之外,还必须提供相应的Schema文件。加载前,首先用Binding Compiler将Schema转换得到目标Java类的接口与实现,然后再调用Unmarshaller或Marshaller将数据源XML文件信息加载到Java对象中,或将设置的Java对象数据导出为XML文件。

3.XPath

4.JaxMe

时间: 2024-08-27 18:37:48

Digester组件的相关文章

Tomcat源码阅读(二)初始化

近来,我开始阅读tomcat的源码,感觉还挺清晰易懂:为了方便理解,我参考了网上的一些文章,把tomcat的组成归纳一下:整个tomcat的组成如下图所示: Tomcat在接收到用户请求时,将会通过以上组件的协作来给最终用户产生响应.首先是最外层的Server和Service来提供整个运行环境的基础设施,而Connector通过指定的协议和接口来监听用户的请求,在对请求进行必要的处理和解析后将请求的内容传递给对应的容器,经过容器一层层的处理后,生成最终的响应信息,返回给客户端. Tomcat的容

tomcat 解析(五)-Tomcat的核心组成和启动过程

声明:源码版本为Tomcat 6.0.35 前面的文章中介绍了Tomcat的基本配置,每个配置项也基本上对应了Tomcat的组件结构,如果要用一张图来形象展现一下Tomcat组成的话,整个Tomcat的组成可以如下图所示: Tomcat在接收到用户请求时,将会通过以上组件的协作来给最终用户产生响应.首先是最外层的Server和Service来提供整个运行环境的基础设施,而Connector通过指定的协议和接口来监听用户的请求,在对请求进行必要的处理和解析后将请求的内容传递给对应的容器,经过容器一

Java目录

1.参照视屏: http://www.btspread.com/magnet/detail/hash/316E6B850B2724B3BC0066580AD0FFB166706EA6 Java开发环境搭建:JDK,JRE,工具选择MyEclipse.环境为Windows X64 数据库为MySql(1) Java语言基础:算法.常用数据结构.企业编程规范(3) Java面向对象:封装.继承.多态等,面向对象程序设计,基础设计模式等(3) JDK核心API:语言核心包.异常处理.常用工具包.集合框

java某课程安排

课程 课程内容 课程目标 第一阶段(以Tetris项目贯穿) Java语言基础 算法基础.常用数据结构.企业编程规范. 掌握常见的数据结构和实用算法:培养良好的企业级编程习惯. Java面向对象 面向对象特性:封装.继承.多态等,面向对象程序设计,基础设计模式等. 掌握面向对象的基本原则以及在编程实践中的意义:掌握Java面向对象编程基本实现原理. 实训项目一:Tetris项目开发 第二阶段(以T-DMS V1项目贯穿) JDK核心API 语言核心包.异常处理.常用工具包.集合框架. 熟练掌握J

2019思维最清晰的java学习路线图,看懂后学习java不再迷茫

笔者做java开发也有几年了,现在回想自己学习java的经历,当时真希望有一部大体的学习框架,这样自己就不会走许多弯路了,这是我在这三年工作和多年学习中的经验,希望对迷茫的java爱好者有所帮助:第一步 首先要做好学习前的准备工作:java语言一般用于大型的服务器程序开发,所有有必要了解如下内容:Unix开发环境Unix系统原理.Unix开发环境.Unix常用命令.熟练掌握Unix常用命令:熟练构建下的Java开发环境. 第二步 然后进入Java语言基础的学习阶段,学习任何一门语言都要打好基础,

Struts——三大组件(一)ActionServlet

ActionServlet类是Struts框架的内置核心控制器组件,它继承了javax.servlet.http.HttpServlet类,Struts的启动一般从加载ActionServlet开始,因此它在MVC模型中扮演中央控制器的角色,负责接受用户请求,返回给用户合适的视图组件.控制器将模型层和视图层分开,这样分离,可以为同一个模型开发出不同的视图. 下面是Struts的三大主要组件: ActionServlet组件:充当Struts框架的中央控制器:Struts应用中只存在ActionS

How tomcat works 读书笔记十五 Digester库

Digester库 在前面的几个章节里,我们对tomcat里各个组件的配置完全是使用写硬编码的形式完成的. 如 Context context = new StandardContext(); Loader loader = new WebappLoader(); context.setLoader(loader); 就完成了向context容器里添加WepappLoader的功能. 这么做的问题就在于,一旦我想更改配置就必须得重新加载Bootstrap类. 幸运的是tomcat的设计者使用了一

tomcat(15)Digester库

[0]README 0.1)本文部分文字描述转自 "how tomcat works",旨在学习 "tomcat(15)Digester库" 的基础知识: 2)problem+solution: 2.1)problem:如下面的代码,Bootstrap类实例化连接器,servlet容器,Wrapper容器和其它组件,如设置连接器的关联顶层容器,通过set方法将它们联系起来:如监听器组件通过addLifecycleListener来设置等等.这种配置应用程序的方法有一

Tomcat 源码分析(一)——启动与生命周期组件

写在前面的话:读Tomcat源码也有段时间了,大领悟谈不上.一些小心得记录下来,供大家参考相护学习. 一.启动流程 Tomcat启动首先需要熟悉的是它的启动流程.和初学者第一天开始写Hello World一样,Tomcat的启动也依赖main方法. 1 /* 2 * org.apache.catalina.startup.Bootstrap 3 */ 4 if (daemon == null) { 5 Bootstrap bootstrap = new Bootstrap(); // 实例对象