欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
常用jar包之commons-digester使用

 digester組件簡(jiǎn)化了xml文件處理操作,能將xml文件按照事先確定的規則(采用編碼形式或xml配置文件形式),映射成java對象。digester組件現在最新版本是2.0,它所依賴(lài)的組件是:commons-logging(推薦1.1版本),BeanUtils(推薦1.8版本),還有需要jdk1.5.


基本概念
1. 在Digester的內部采用SAX來(lái)解析XML文件。為了能夠正確的使用它,必須在解析之前進(jìn)行相應的設置。同時(shí),在解析xml文件的過(guò)程中,它使用Stack來(lái)保存和檢索這個(gè)期間產(chǎn)生的對象.
2. 為了簡(jiǎn)化使用,它通過(guò)匹配模式來(lái)定位要解析的xml標簽。匹配模式的例子如下:
<?xml version="1.0"?>
<students>
 <student>
 <name>Tom</name>
 <course>JSP</course>
 </student>
 <student>
 <name>Mary</name>
 <course>J2EE</course>
 </student>
</students>
每個(gè)標簽與相應的匹配模式對應如下表:
標簽              匹配模式
<students> students
<student>  students/student
<name>     students/student/name
<course>   students/student/course
3.使用匹配模式可以很方便的定位需要處理的元素,為了處理這些元素,需要定義處理規則。規則在匹配模式被找到時(shí)起作用。所有的規則都是從org.apache.commons.digester.Rule派生的。所有已定義的Rule對象,可以在org.apache.commons.digester中找到。
常用的規則:
- ObjectCreate,創(chuàng )建對象實(shí)例。
- SetProperties,將標簽屬性(Attribute)與要創(chuàng )建的對象的屬性相關(guān)聯(lián)。
- BeanPropertySetter,將標簽所包含標簽與要創(chuàng )建的對象的屬性相關(guān)聯(lián)。
- SetNext,設置遇到下一個(gè)標簽時(shí)的動(dòng)作。
- CallMethod,設置當匹配模式被找到時(shí)要調用的方法。
- CallParam,設置對應的callMethod中指定方法所需要的參數值。


基本使用
以正確的順序調用Digester方法是成功使用Digester處理XML文件的關(guān)鍵。使用步驟如下:
1. 創(chuàng )建org.apache.commons.digester.Digester實(shí)例并配置,包括設置實(shí)現Digester Rule的對象。
2.使用Digester的push方法在Digester使用的stack中放置一個(gè)初始對象。在解析xml文件的過(guò)程中,Digester使用stack來(lái)保存它所找到的對象。第一個(gè)對象在遇到第一個(gè)標簽時(shí)被放置到stack中,當最后一個(gè)標簽處理完畢時(shí)被彈出。為了最后能檢索到這個(gè)對象,因此需要一個(gè)初始對象來(lái)保留一個(gè)指向它的引用。
3. 注冊匹配模式和rule。
4. 調用parse來(lái)解析xml文件。


使用舉例
1.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<students>
 <student>
 <name>Tom</name>
 <course>JSP</course>
 </student>
 <student>
 <name>Mary</name>
 <course>J2EE</course>
 </student>
</students>
2.硬編碼形式實(shí)現
Student類(lèi)
package com.tongda.whl.digester;
public class Student {
 private String name;
 private String course;
 public void setName(String name){
  this.name=name;
 }
 public void setCourse(String course){
  this.course=course;
 }
 public String getName(){
  return this.name;
 }
 public String getCourse(){
  return this.course;
 }
}
處理類(lèi)

  1. package com.tongda.whl.digester;  
  2. import org.apache.commons.digester.*;  
  3. import org.apache.commons.logging.*;  
  4. import java.io.IOException;  
  5. import java.util.Vector;  
  6. import org.apache.commons.digester.xmlrules.*;  
  7. import org.xml.sax.SAXException;  
  8. public class DigestTest {  
  9.  private Log log=LogFactory.getLog(this.getClass());  
  10.  private Vector students;  
  11.  public DigestTest(){  
  12.   students= new Vector(5);  
  13.  }  
  14.  public void addStudent( Student student){  
  15.   students.add( student);  
  16.  }  
  17.  public String toString(){  
  18.   return ((Student)students.get(0)).getName();  
  19.  }  
  20.  public void digest(){  
  21.   //digest2.0支持jdk1.5,并且依賴(lài) logging 1.1.1 和 beanutils 1.8.0  
  22.   //創(chuàng )建實(shí)例  
  23.   Digester digester= new Digester();  
  24.   //將初始對象壓入digester的stack  
  25.   digester.push( this);  
  26.   //指明匹配模式和要創(chuàng )建的類(lèi)  
  27.   digester.addObjectCreate( "students/student", Student.class);  
  28.   //設置對象屬性  
  29.  // digester  
  30.   digester.addBeanPropertySetter( "students/student/name");  
  31.   digester.addBeanPropertySetter( "students/student/course");  
  32.   //當移動(dòng)到下一個(gè)標簽中時(shí)的動(dòng)作  
  33.   digester.addSetNext( "students/student""addStudent");  
  34.   try {  
  35.   //解析,xml文件放在classpath下  
  36.    DigestTest ds= (DigestTest)digester.parse( getClass().getClassLoader().getResourceAsStream( "students.xml"));    
  37.     log.info(ds);  
  38.   } catch (Exception e) {  
  39.   e.printStackTrace();  
  40.    }  
  41.  }  
  42.  public static void main(String args[]){  
  43.   DigestTest test=new DigestTest();  
  44.   test.digest();  
  45.  }   
  46. }  

 

結果顯示:Tom
3.配置文件方式實(shí)現
 配置文件:studentsRule.xml
 <?xml version="1.0"?>
<digester-rules>
 <pattern value="students">
 <object-create-rule classname="com.tongda.whl.digester.Students" />
 <set-properties-rule />
 <pattern value="student">
 <object-create-rule classname="com.tongda.whl.digester.Student" />
 <bean-property-setter-rule pattern="name"/>
 <bean-property-setter-rule pattern="course"/>
 <set-next-rule methodname="addStudent" />
 </pattern>
 </pattern>
</digester-rules>
Student類(lèi)
package com.tongda.whl.digester;
public class Student {
 private String name;
 private String course;
 public void setName(String name){
  this.name=name;
 }
 public void setCourse(String course){
  this.course=course;
 }
 public String getName(){
  return this.name;
 }
 public String getCourse(){
  return this.course;
 }
}
Students類(lèi)
package com.tongda.whl.digester;
import java.util.Vector;
public class Students {
  private Vector students;
  public Students(){
   students= new Vector(5);
 }
  public void addStudent( Student student){
   students.add( student);
  }
  public String toString(){
     return ((Student)students.get(0)).getName();
  }
}
處理類(lèi)

  1. package com.tongda.whl.digester;  
  2. import org.apache.commons.digester.*;  
  3. import org.apache.commons.logging.*;  
  4. import java.io.IOException;  
  5. import java.util.Vector;  
  6. import org.apache.commons.digester.xmlrules.*;  
  7. import org.xml.sax.SAXException;  
  8. public class DigestTest {  
  9.  private Log log=LogFactory.getLog(this.getClass());  
  10.  public void digestByConfig(){  
  11.   Digester digester = DigesterLoader.createDigester(this.getClass().getClassLoader().getResource("studentsRule.xml"));  
  12.   try {  
  13.   Students a= (Students)digester.parse( this.getClass().getClassLoader().getResourceAsStream("students.xml"));  
  14.      System.out.println(a);  
  15.   log.info(a);  
  16.   } catch (IOException e) {  
  17.   e.printStackTrace();  
  18.  } catch (SAXException e) {  
  19.   e.printStackTrace();  
  20.  }  
  21.  }  
  22.  public static void main(String args[]){  
  23.   DigestTest test=new DigestTest();  
  24.   test.digestByConfig();  
  25.  }   
  26. }  

 

結果顯示:Tom


在使用Digester需要注意的地方:
1- 調用順序,正確的調用順序才能得出正確的結果。方法調用順序基本和標簽在xml文件中的層次關(guān)系相對應?;镜捻樞蚴牵合葎?chuàng )建對象;然后設置屬性;隨后處理子元素;最后設置遇到下一個(gè)元素所對應的動(dòng)作。對于子元素的處理,是同樣的過(guò)程。
2- 正確的使用初始對象。對比上面2個(gè)例子,之所以在第一個(gè)例子中顯示的調用了digester的push方法,其原因就在于我們并沒(méi)有如第二個(gè)例子一樣用xml的root元素創(chuàng )建一個(gè)實(shí)例。如果不顯式的調用,我們將會(huì )丟失這個(gè)元素的引用,那么也就無(wú)法得到后續的對象。
3-digester的addSetNex方法中所指定的方法實(shí)際上是包含匹配模式對應標簽的父標簽對應對象的方法。在上兩個(gè)例子中addStudent,都是包含Student對象的那個(gè)對象的方法。對于第一個(gè)例子,是DigesterTest;對于第二個(gè)例子,是Students。而且它的位置通常是在創(chuàng )建對象語(yǔ)句組的最后,與addObjectCreate相對應。在這2個(gè)語(yǔ)句之間的代碼中所指定的方法都是所創(chuàng )建對象的方法。而且它們的順序與匹配模式所對應的標簽的順序必須是一致的。
4- 使用配置文件來(lái)創(chuàng )建digester,這樣會(huì )帶來(lái)很大的靈活性。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
竹筍炒肉: Digester學(xué)習筆記(二)
妙用Commons良藥
[jakarta-commons] 使用Digester解釋xml獲取java對象(代碼入...
Commons-Digester簡(jiǎn)介
搞懂 XML 解析,徒手造 WEB 框架
[JMX一步步來(lái)] 5、用Apache的commons
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久