`
sun113
  • 浏览: 51326 次
  • 来自: NeverNeverlaNd
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Digester小试

阅读更多

使用 struts 组件 Digester 实现 spring 中对 bean 的管理的类似的功能.<o:p></o:p>

Beans.xml的定义:<o:p></o:p>

< ?xml version="1.0" encoding="UTF-8"? ><o:p></o:p>

< beans ><o:p></o:p>

       < bean id="conn" type="dao.Conn"/><o:p></o:p>

       < bean id="id1" type="dao.dao1"/><o:p></o:p>

< /beans ><o:p></o:p>

<o:p> </o:p>

Beans.java<o:p></o:p>

package testDigester.myTest1;<o:p></o:p>

<o:p> </o:p>

import java.util.HashMap;<o:p></o:p>

<o:p> </o:p>

public class Beans {<o:p></o:p>

<o:p> </o:p>

              private HashMap beans = new HashMap();<o:p></o:p>

<o:p> </o:p>

              /**<o:p></o:p>

               * @    return beansを戻します<o:p></o:p>

               */<o:p></o:p>

              public HashMap getBeans() {<o:p></o:p>

                            return beans;<o:p></o:p>

              }<o:p></o:p>

<o:p> </o:p>

              /**<o:p></o:p>

               * @    param beansを設定します<o:p></o:p>

               */<o:p></o:p>

              public void setBeans(HashMap beans) {<o:p></o:p>

                            this.beans = beans;<o:p></o:p>

              }<o:p></o:p>

              /**<o:p></o:p>

               * the beans can not contain same keys,so <o:p></o:p>

               * we hava to try, this will be done later<o:p></o:p>

               * @    author pony<o:p></o:p>

               */<o:p></o:p>

<o:p> </o:p>

              public void addBean(Bean bean){<o:p></o:p>

                            this.getBeans().put(bean.getId(),bean);<o:p></o:p>

              }<o:p></o:p>

<o:p> </o:p>

              /**<o:p></o:p>

               * get Bean by id<o:p></o:p>

               */<o:p></o:p>

              public Bean findBean(String id){<o:p></o:p>

                            return (Bean)this.getBeans().get(id);<o:p></o:p>

              }<o:p></o:p>

}<o:p></o:p>

<o:p> </o:p>

<o:p>
</o:p>

Bean.java<o:p></o:p>

package testDigester.myTest1;<o:p></o:p>

<o:p> </o:p>

public class Bean {<o:p></o:p>

<o:p> </o:p>

              private String id;<o:p></o:p>

              private String type;<o:p></o:p>

              <o:p></o:p>

              /**<o:p></o:p>

               * @  return Returns the id.<o:p></o:p>

               */<o:p></o:p>

              public String getId() {<o:p></o:p>

                            return id;<o:p></o:p>

              }<o:p></o:p>

              /**<o:p></o:p>

               * @   param id The id to set.<o:p></o:p>

               */<o:p></o:p>

              public void setId(String id) {<o:p></o:p>

                            this.id = id;<o:p></o:p>

              }<o:p></o:p>

              /**<o:p></o:p>

               * @  return Returns the type.<o:p></o:p>

               */<o:p></o:p>

              public String getType() {<o:p></o:p>

                            return type;<o:p></o:p>

              }<o:p></o:p>

              /**<o:p></o:p>

               * @  param type The type to set.<o:p></o:p>

               */<o:p></o:p>

              public void setType(String type) {<o:p></o:p>

                            this.type = type;<o:p></o:p>

              }             <o:p></o:p>

}<o:p></o:p>

<o:p> </o:p>

ParseRule.java<o:p></o:p>

package testDigester.myTest1;<o:p></o:p>

<o:p> </o:p>

import org.apache.commons.digester.Digester;<o:p></o:p>

import org.apache.commons.digester.RuleSetBase;<o:p></o:p>

/ / 用来制定规则<o:p></o:p>

/ / 下面的RuleSetBase必须继承<o:p></o:p>

public class ParseRule extends RuleSetBase{<o:p></o:p>

              public void addRuleInstances(Digester d) {<o:p></o:p>

                            //第一次遇到匹配的beans时,建立一个Beans对象,并放入栈顶<o:p></o:p>

                            d.addObjectCreate("beans",Beans.class);<o:p></o:p>

                            //复制第一个beans对象的attribute属性<o:p></o:p>

                            d.addSetProperties("beans");<o:p></o:p>

                            //第一次遇到匹配的beans/bean时,建立一个Bean对象,并放入栈顶<o:p></o:p>

                            d.addObjectCreate("beans/bean",Bean.class);<o:p></o:p>

//复制bean对象的attribute属性<o:p></o:p>

                            d.addSetProperties("beans/bean");<o:p></o:p>

                            //以后遇到匹配的"beans/bean",使用了addBean方法处理<o:p></o:p>

                            d.addSetNext("beans/bean","addBean");<o:p></o:p>

              }<o:p></o:p>

}<o:p></o:p>

<o:p></o:p>

<o:p> </o:p>

<o:p>
</o:p>

BeanParser.java<o:p></o:p>

package testDigester.myTest1;<o:p></o:p>

<o:p> </o:p>

import java.io.IOException;<o:p></o:p>

import java.io.InputStream;<o:p></o:p>

import java.sql.ResultSet;<o:p></o:p>

import java.sql.SQLException;<o:p></o:p>

<o:p> </o:p>

import org.apache.commons.digester.Digester;<o:p></o:p>

import org.xml.sax.SAXException;<o:p></o:p>

<o:p> </o:p>

import dao.Conn;<o:p></o:p>

<o:p> </o:p>

public class BeanParser {<o:p></o:p>

<o:p> </o:p>

              /**<o:p></o:p>

               * @  author pony<o:p></o:p>

               */<o:p></o:p>

              InputStream is = null;<o:p></o:p>

<o:p> </o:p>

              public BeanParser() {<o:p></o:p>

                            is = this.getClass().getClassLoader().getResourceAsStream(<o:p></o:p>

                                                        "testDigester/myTest1/beans.xml");<o:p></o:p>

              }<o:p></o:p>

<o:p> </o:p>

              public static void main(String[] args) {<o:p></o:p>

<o:p> </o:p>

                            test2();<o:p></o:p>

<o:p> </o:p>

              }<o:p></o:p>

              public Object getBean(String id) {<o:p></o:p>

<o:p> </o:p>

                            if (is == null) {<o:p></o:p>

                                          System.out.println("no configuration is found");<o:p></o:p>

                            }<o:p></o:p>

                            Bean bean = null;<o:p></o:p>

                            String type = "";<o:p></o:p>

                            Digester digester = new Digester();<o:p></o:p>

                            ParseRule rule = new ParseRule();<o:p></o:p>

                            rule.addRuleInstances(digester);<o:p></o:p>

<o:p> </o:p>

                            Beans beans = null;<o:p></o:p>

                            try {<o:p></o:p>

                                          beans = (Beans) digester.parse(is);<o:p></o:p>

                                          bean = beans.findBean(id);<o:p></o:p>

                                          type = bean.getType();<o:p></o:p>

                            } catch (IOException e) {<o:p></o:p>

                                          e.printStackTrace();<o:p></o:p>

                            } catch (SAXException e) {<o:p></o:p>

                                          e.printStackTrace();<o:p></o:p>

                            }<o:p></o:p>

<o:p> </o:p>

                            return makeInstance(type);<o:p></o:p>

              }<o:p></o:p>

<o:p> </o:p>

              public Object makeInstance(String type) {<o:p></o:p>

                            Object obj = (Object) null;<o:p></o:p>

                            if (type == null) {<o:p></o:p>

                                          return (Object) null;<o:p></o:p>

                            }<o:p></o:p>

                            try {<o:p></o:p>

                                          obj = Class.forName(type).newInstance();<o:p></o:p>

                            } catch (ClassNotFoundException e) {<o:p></o:p>

                                          System.out.println("no class is found");<o:p></o:p>

                                          e.printStackTrace();<o:p></o:p>

                            } catch (IllegalAccessException e) {<o:p></o:p>

                                          e.printStackTrace();<o:p></o:p>

                            } catch (InstantiationException e) {<o:p></o:p>

                                          e.printStackTrace();<o:p></o:p>

                            }<o:p></o:p>

                            System.out.println(obj.getClass());<o:p></o:p>

                            return obj;<o:p></o:p>

              }<o:p></o:p>

              public static void test2() {<o:p></o:p>

                            BeanParser parser = new BeanParser();<o:p></o:p>

                            Conn conn = (<st1:state><st1:place>Conn</st1:place></st1:state>) parser.getBean("conn");<o:p></o:p>

                            if (conn != null) {<o:p></o:p>

                            ResultSet rs = conn.executeQuery("SELECT * FROM AMMM");<o:p></o:p>

                                          try {<o:p></o:p>

                                                        while (rs.next()) {<o:p></o:p>

              System.out.println(rs.getBigDecimal("id").toString());<o:p></o:p>

                                                        }<o:p></o:p>

                                          } catch (SQLException e) {<o:p></o:p>

                                                        e.printStackTrace();<o:p></o:p>

                                          }<o:p></o:p>

                            } else {<o:p></o:p>

                                          System.out.println("connection error!");<o:p></o:p>

                            }<o:p></o:p>

              }<o:p></o:p>

}<o:p></o:p>

分享到:
评论

相关推荐

    Digester

    Digester是Apache软件基金会下的Jakarta项目中的一个Java库,主要用于简化XML到Java对象的映射过程。在处理XML文档时,它通过匹配XML元素结构到相应的Java对象的方法调用,实现了XML解析的自动化。这个工具对于那些...

    commons-digester3-3.2-API文档-中英对照版.zip

    赠送jar包:commons-digester3-3.2.jar; 赠送原API文档:commons-digester3-3.2-javadoc.jar; 赠送源代码:commons-digester3-3.2-sources.jar; 赠送Maven依赖信息文件:commons-digester3-3.2.pom; 包含翻译后...

    digester用法测试案例

    Digester是Apache软件基金会的Jakarta项目中的一个实用工具库,它主要用来解析XML文档,并根据预定义的规则自动创建和配置Java对象。这个工具在处理XML到Java对象映射时,极大地简化了代码,避免了手动解析XML的繁琐...

    Castor、digester实例

    Castor和Digester是两个在Java开发中用于对象与XML数据之间进行映射的库,它们简化了XML数据的解析和对象的序列化过程。在本文中,我们将深入探讨这两个库,以及如何通过实例来使用它们。 首先,让我们了解Castor。...

    commons-digester.jar

    `commons-digester.jar`是Apache Commons项目中的一个组件,主要功能是解析XML文档并根据预定义的规则自动创建和填充Java对象。这个组件在Java应用程序中尤其有用,特别是那些需要从XML配置文件中构建复杂对象层次...

    Digester java解析xml

    Java中的Digester库是Apache Commons项目的一部分,它提供了一种方便的方式来解析XML文档,并将解析结果映射到Java对象模型上。这个库特别适合于创建简单的XML到Java对象的映射,而不需要编写大量的手动解析代码。在...

    commons-digester-2.1.jar

    `commons-digester-2.1.jar` 是Apache Commons项目中的一个组件,主要负责XML文档的解析和对象的创建与绑定。Apache Commons Digester库提供了一种规则驱动的方法来解析XML文档,并根据预定义的规则将XML数据映射到...

    digester使用

    《digester深度解析》 Java世界中,XML作为数据交换和配置文件的常用格式,其解析和对象绑定是一项常见的任务。Apache Commons Digester是Apache软件基金会提供的一个强大的工具,专门用于将XML文档解析为Java对象...

    利用commons-digester解析xml

    标题“利用commons-digester解析XML”涉及到的是Java开发中的一种处理XML文档的工具——Apache Commons Digester。这个库提供了一种方便的方式来映射XML文档结构到Java对象,从而简化了XML数据的处理过程。 Apache ...

    Digester读取xml教程.rar

    《使用Digester解析XML的深度指南》 在Java开发中,处理XML文件是常见的任务,而Apache Commons Digester库提供了一种高效且便捷的方式来解析XML并将其映射到Java对象。本教程将深入探讨如何使用Digester来读取XML...

    Digester两种解析方式

    在Java开发中,Apache Commons Digester是一个非常有用的库,它允许开发者通过XML配置来实例化、配置和关联Java对象。 Digester提供了两种主要的解析方式,即规则硬编码和独立的规则文件,这两种方法各有其特点和...

    digester组件简化了xml文件处理操作

    ### Digester组件简化XML文件处理操作 #### 一、引言 随着Web技术的发展,XML作为数据交换格式的重要性日益凸显。然而,对于大型且复杂的XML文档进行解析与处理时,传统的方法如DOM(Document Object Model)和SAX...

    XML的解析之——使用Digester

    本文将深入探讨如何使用Apache的 Digester 库来解析XML文档,这是一款强大的工具,能够将XML数据映射到Java对象,简化了处理XML的过程。 Digester 是Apache Commons项目的一部分,它提供了一种规则驱动的方法来处理...

    commons-digester3-3.2-API文档-中文版.zip

    赠送jar包:commons-digester3-3.2.jar; 赠送原API文档:commons-digester3-3.2-javadoc.jar; 赠送源代码:commons-digester3-3.2-sources.jar; 赠送Maven依赖信息文件:commons-digester3-3.2.pom; 包含翻译后...

    digester3.2 源码

    《digester3.2源码解析与应用实例》 Apache Digester是一个强大的Java库,用于在XML文档和Java对象之间建立映射关系,通过规则来自动解析XML并创建或更新对象结构。在digester3.2版本中,我们能够深入理解其内部...

    Digester解析XML的小例子(对象嵌套)

    在Java开发中,Struts框架提供了一个强大的工具——Digester,用于解析XML文件并自动创建、配置Java对象。本文将详细介绍如何使用Digester处理具有嵌套结构的XML文档,并通过一个具体的实例——"DigesterXmlTest"来...

    使用Apache_Commons_Digester

    ### 使用Apache Commons Digester开发指南 #### 概述 Apache Commons Digester 是一款基于 Java 的开源库,专门用于简化 XML 文件解析的过程。它利用 SAX(Simple API for XML)解析器来解析 XML 数据,并通过一...

    digester解析xml的问题.pdf

    Digester 是 Apache Commons 中的一个工具类库,它用于解析 XML 文档,并根据预先定义的规则自动创建和配置 Java 对象。在上述问题中,我们看到一个 XML 文档表示了一个考试,其中包含了多个题目,每个题目有其编号...

    Digester 实例

    ### Digester 实例详解 #### 一、Digester 概述 Digester 是一个非常实用且功能强大的 XML 解析工具,它属于 Jakarta 开源项目下的 Commons 子项目之一。通过 Digester,开发者能够轻松地解析复杂的 XML 文件,而...

    Jakarta-Common-Digester使用笔记

    Digester不是一个XML Parser,它只是对SAX更高层次上的一个封装使用Digester,将XML映射成javaBean. 我们无须了解SAX和DOM的解析过程,只要给Digester添加一些解析规则,就能对一个xml文件进行解析。Digester使用...

Global site tag (gtag.js) - Google Analytics