<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    kapok

    垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      455 隨筆 :: 0 文章 :: 76 評論 :: 0 Trackbacks
    http://www.infomall.cn/cgi-bin/mallgate/20040310/http://hedong.3322.org/archives/000337.html
    總覺得,Digester不僅僅能作配置文件解析,而且可以作得更多。

    配置屬性

      Digester用來解析應用系統的配置文件,其本身也有很可配置的屬性。
    屬性 描述
    classLoader 指定類裝載器(class loader)。ObjectCreateRule 和 FactoryCreateRule兩個規則中,需要動態加載一些類(如那些盛放XML解析出來的數據的javaBean等),裝載器可以在次指定。如果不指定,對這此類的加載將會利用線程上下文中的加載器(當useContextClassLoader值為真時)或利用加載Digester的那個加載器。
    errorHandler 指定 SAX ErrorHandler,以在出現此類錯誤時調用。默認情況下,任何解析錯誤都會被記入日志,Digest會繼續進行解析。
    namespaceAware 一個布爾值,為真時對XML文件的解析時會考慮元素的域名空間(如不同的域名空間的同名元素會視為不同的元素)
    ruleNamespaceURI 指定后續加入的規則所屬的命名空間,如果此值為null,則加入的規則不與任何命名空間相聯系。
    rules 設定規則模板與XML元素的匹配處理程序。由于這個匹配程序是插件式的,所以匹配工作的完成可以用用戶定義的匹配程序未完成。默認情況下,使用Digester提供的匹配器。
    useContextClassLoader 一個布爾值,為真時FactoryCreateRule 和 ObjectCreateRule 兩個規則中對類的裝載將會采用當前線程上下文中指定的加載器。默認情況下,對類的動態加載會利用加載Digester的那個裝載器。
    validating 一個布爾值,為真時解析器會根據DTD內容對XML文檔進行合法性檢查,默認值是假,解析器只是檢查XML是否格式良好(well formed).

      除了上述屬性外,還可以注冊一個本地DTD,以供DOCTYPE聲明引用。這樣的注冊告訴XML解析器,當遇到DOCTYPE聲明時,應使用剛注冊的DTD的內容,而不是DOCTYPE聲明中的標識符(identifier)。
      例如,Struect框架控制器中,使用下述的注冊,告訴Structs使用一個本地的DTD中的相關內容來處理Structs配置文件,這樣可以適用于那些沒有連接到互聯網的應用環境,而在連到互聯網的環境中可以加快運行速度(因為它避免了通過網絡去取相關的資源)。
    URL url = new URL("/org/apache/struts/resources/struts-config_1_0.dtd");
    digester.register("-//Apache Software Foundation//DTD Struts Configuration 1.0//EN",url.toString());

    規則集打包


      通常情況下,一個規則被創建后,接著便注冊,然后等在event時被調用,這些規則集很難為其它應用程序直接復用。一個解決方法是將所有規則都放在一個類中,此由這些規則可以很簡單地被裝載然后被注冊使用。RuleSet接口就是為些而設計,一般是通過擴展RuleSetBase類來開發規則集類。如例:
    public class MyRuleSet extends RuleSetBase {
      public MyRuleSet() {
        this("");
      }
      public MyRuleSet(String prefix) {
        super();
        this.prefix = prefix;
        this.namespaceURI = "http://www.mycompany.com/MyNamespace";
      }
      protected String prefix = null;
      public void addRuleInstances(Digester digester) {
        digester.addObjectCreate(prefix + "foo/bar",
          "com.mycompany.MyFoo");
        digester.addSetProperties(prefix + "foo/bar");
      }
    }
    可以這樣使用這個規則集
    Digester digester = new Digester();
    ... 一些配置Digester ...
    digester.addRuleSet(new MyRuleSet("baz/"));

    帶命名空間的XML解析


      這種情況下,使用Digester的步驟為:
    1. 在Digester初始化部分,指明要考慮命名空間。
      digester.setNamespaceAware(true);

    2. 指明一些規則的命名空間,如
      digester.setRuleNamespaceURI("http://www.mycompany.com/MyNamespace");

    3. 接下來定義一些與此命名空間有關的規則,此時可以省卻前綴,如
      digester.addObjectCreate("foo/bar", "com.mycompany.MyFoo");
      digester.addSetProperties("foo/bar");

    4. 對其它命名空間,重復前面的2步

      另外,在指明要digester考慮命名空間之后,在定義匹配模板時,可以將命名空間別名加“:”作為元素名稱的一部分使用。這與無命名空間時是一致的。

    開發定制的匹配處理過程


      通過實現 org.apache.commons.digester.Rules接口或擴展org.apache.commons.digester.RulesBase類來達到定制匹配過程的目的。
      Digester提供ExtendedBaseRules來擴展了匹配模板的定義,引入了特殊通配字符?和*以及!,提供RegexRules來支持以正則式的語法定義匹配模板,提供WithDefaultsRulesWrapper來支持默認規則(即其它規則都不匹配時的處理規則)。

    一些認識


      通過看說明材料,尤其在學習Digester包中的Catalog例子以后,有一些認識:
      1、由于xml對屬性名字的定義要求,與Java中對方法名字的定義要求不一致,導致出現不能自動映射的情況,如year-made標簽屬性,就不可能有方法setYear-made;
      2、對于根元素,與其子元素建立聯系,有幾種辦法:一種是先生成根元素實例,壓入棧,然后解析,將調用方法規則建立聯系;另一種是解析的過程中第一個創建它,然后用getRoot的方法得到。
      3、如果某對象類構造都要參數,則此時需要擴展AbstractObjectCreationFactory類為這種對象建立一個Factory,在這個Factory中取得初始化參數值然后再創建一個對象實例。
      4、設有某個標簽,要想自動用該標簽子元素的內容填充該標簽對應的對象的屬性,則需要用digester.setRules(new ExtendedBaseRules()),然后addRules(),然后再調用addBeanPropertySetter("bala/lala/?");進行規則定義,注意此模板中有通配符。
      5、如果對象的屬性是整型,則Digester自動將xml文件中字符串值轉換為整型。
      6、在指明要digester考慮命名空間之后,如果不會引起歧義,完全可以忽略命名空間的存在,除非你要針對特定的命名空間進行特定的處理。
    posted on 2005-04-14 18:07 笨笨 閱讀(594) 評論(0)  編輯  收藏 所屬分類: J2EEHibernateAndSpringALLStruts
    主站蜘蛛池模板: 午夜老司机永久免费看片| 亚洲精品色在线网站| 国产一二三四区乱码免费| 亚洲AV无码乱码在线观看| 免费国产高清毛不卡片基地| 国产伦精品一区二区三区免费下载| 亚洲欧美不卡高清在线| 日本精品人妻无码免费大全| 国产亚洲情侣一区二区无码AV| 18gay台湾男同亚洲男同| 91久久成人免费| 亚洲成色在线影院| 久久国产精品免费看| 国产成人精品日本亚洲网站| 一级人做人爰a全过程免费视频| 免费视频中文字幕| 亚洲AV永久无码精品网站在线观看| 午夜宅男在线永久免费观看网| 亚洲国产精品一区二区成人片国内| 免费无码专区毛片高潮喷水| 日韩在线免费电影| 国产精品亚洲精品日韩电影| 四虎免费久久影院| 中文字幕亚洲精品无码| 久久久免费的精品| 亚洲视频手机在线| 91久久精品国产免费直播| 亚洲资源最新版在线观看| 一区二区无码免费视频网站 | 真人做A免费观看| 亚洲日韩在线视频| 国产a视频精品免费观看| 国产婷婷综合丁香亚洲欧洲| 最近最新高清免费中文字幕| 亚洲卡一卡2卡三卡4卡无卡三| 69视频在线观看免费| 亚洲AV无码一区二区三区人| 成年女人免费视频播放体验区| 国产精品久久久久久亚洲小说| 全亚洲最新黄色特级网站| 精品国产污污免费网站入口 |