sitelink1  
sitelink2  
sitelink3  
extra_vars4  
extra_vars5  
extra_vars6  
 1. ServerConfig.xml

<?xml version="1.0" encoding="EUC-KR" ?>  
  
<server name="madvirus.net">  
    <documentRoot>c:/webserver/docRoot</documentRoot>  
    <port>80</port>  
       
    <virtual-mapping-list>  
        <virtual-mapping>  
            <uri>/madvirus</uri>  
            <path>c:/personal/madvirus</path>  
            <file-list>  
                <xml-file>level3_1.xml</xml-file>  
                <text-file>level3_1.txt</text-file>  
                <hwp-file>level3_1.hwp</hwp-file>  
            </file-list>  
        </virtual-mapping>  
        <virtual-mapping>  
            <uri>/commonImage</uri>  
            <path>c:/webserver/commonImage</path>  
            <file-list>  
                <xml-file>level3_2.xml</xml-file>  
                <text-file>level3_2.txt</text-file>  
                <hwp-file>level3_2.hwp</hwp-file>  
            </file-list>               
        </virtual-mapping>  
        <virtual-mapping>  
            <uri>/commonText</uri>  
            <path>c:/webserver/commonText</path>               
        </virtual-mapping>         
    </virtual-mapping-list>  
  
</server>  


 2. ServerConfig.java

import java.util.HashMap;   
  
public class ServerConfig {   
       
    private int port;   
    private String serverName;   
    private String documentRoot;   
    private HashMap mapping = new HashMap();   
       
    public void setInformation(String serverName, String documentRoot, int port) {   
        this.setServerName(serverName);   
        this.setPort(port);   
        this.setDocumentRoot(documentRoot);   
    }   
       
    // ... Get, Set메서드들 정의   
       
    public void addMapping(VirtualMapping map) {   
        mapping.put(map.getVirtualURI(), map);   
    }   
    public VirtualMapping getMapping(String uri) {   
        return (VirtualMapping)mapping.get(uri);   
    }   
  
}  


 3. ConfigReader.java

package madvirus.webserver.config;
import org.apache.commons.digester.Digester;   
import java.io.File;   
import java.io.IOException;   
import org.xml.sax.SAXException;   
    
public class ConfigReader {   
       
    public static ServerConfig readConfiguration(String configFile)   
    throws IOException, SAXException {   
        Digester digester = new Digester();   
        digester.setValidating(false);   
           
        digester.addObjectCreate("server", ServerConfig.class);   
        //digester.addSetProperties("server", "name", "serverName" );   
        //digester.addBeanPropertySetter("server/documentRoot", "documentRoot");   
        //digester.addBeanPropertySetter("server/port", "port");   
        Class[] paramType = { String.class, String.class, Integer.TYPE };   
        digester.addCallMethod("server", "setInformation", 3, paramType);   
        digester.addCallParam("server", 0, "name");   
        digester.addCallParam("server/documentRoot", 1);   
        digester.addCallParam("server/port", 2);   
           
        digester.addObjectCreate("server/virtual-mapping-list/virtual-mapping", VirtualMapping.class);   
        digester.addBeanPropertySetter("server/virtual-mapping-list/virtual-mapping/uri", "virtualURI");   
        digester.addBeanPropertySetter("server/virtual-mapping-list/virtual-mapping/path", "realPath");   
        digester.addSetNext("server/virtual-mapping-list/virtual-mapping", "addMapping");   
           
        File file = new File(configFile);   
        ServerConfig config = (ServerConfig)digester.parse(file);   
           
        return config;   
    }   
}

  
 4. ConfigReader 클래스의 코드 내용 
  1) <server> 1레벨 정의
  - server의 정보를 저장하는 객체(ServerConfig)를 서술한다.
  - server의 정보에는 속성과 서버의 2레벨 정보(<server virtual-mapping virtual-mapping-list>)가 있다.
  - 속성에는 documentRoot, port 정보가 있다.

  2) <server virtual-mapping virtual-mapping-list> 2레벨 정의
  - virtual-mapping(server/virtual-mapping-list의 하위 레벨) 정보를 저장하는 객체(VirtualMapping)를 서술한다.
  - virtual-mapping의 정보에는 속성 정보가 있다.
  - 속성에는 uri, path 정보가 있다.
  - 2레벨은 server내에서 반복형태를 띄고 있어서 server객체에 uri를 키로하여 HashMap형태로 객체(VirtualMapping)리스트를 담아두게 된다.


 5. ConfigReader2.java & ServerConfigRule.xml 

package madvirus.webserver.config;   
  
import org.apache.commons.digester.Digester;   
import org.apache.commons.digester.xmlrules.DigesterLoader;   
import java.io.File;   
import java.io.IOException;   
import org.xml.sax.SAXException;   
    
public class ConfigReader2 {   
       
    public static ServerConfig readConfiguration(String configFile, String ruleXmlFile)   
    throws IOException, SAXException {   
        Digester digester = DigesterLoader.createDigester(new URL("file:"+ruleXmlFile));   
           
        File file = new File(configFile);   
        ServerConfig config = (ServerConfig)digester.parse(file);   
           
        return config;   
    }   
}  


<?xml version="1.0"?>  
  
<digester-rules>  
    <object-create-rule pattern="server" classname="madvirus.webserver.config.ServerConfig" />  
    <set-properties-rule pattern="server">  
        <alias attr-name="name" prop-name="serverName" />  
    </set-properties-rule>  
       
    <bean-property-setter-rule pattern="server/documentRoot" prop-name="documentRoot" />  
    <bean-property-setter-rule pattern="server/port" prop-name="port" />  
       
    <pattern value="server/virtual-mapping-list/virtual-mapping">  
        <object-create-rule classname="madvirus.webserver.config.VirtualMapping" />  
        <call-method-rule pattern="uri" methodname="setVirtualURI" paramcount="0" />  
        <call-method-rule pattern="path" methodname="setRealPath" paramcount="0" />  
        <pattern value="file-list" >  
            <object-create-rule classname="madvirus.webserver.config.FileMapping" />  
            <call-method-rule pattern="xml-file" methodname="setXmlFile" paramcount="0" />  
            <call-method-rule pattern="text-file" methodname="setTextFile" paramcount="0" />  
            <call-method-rule pattern="hwp-file" methodname="setHwpFile" paramcount="0" />  
            <set-next-rule methodname="addFileMapping" />  
        </pattern>  
        <set-next-rule methodname="addMapping" />  
   </pattern>  
</digester-rules>  


 6. VirtualMapping.java & FileMapping.java 

package madvirus.webserver.config;   
  
import java.util.ArrayList;   
import java.util.Collections;   
import java.util.List;   
  
public class VirtualMapping {   
       
    private String virtualURI;   
    private String realPath;   
    private List list = Collections.synchronizedList(new ArrayList());   
       
    public String getVirtualURI() {   
        return virtualURI;   
    }   
    public void setVirtualURI(String virtualURI) {   
        this.virtualURI = virtualURI;   
    }   
       
    public String getRealPath() {   
        return realPath;   
    }   
    public void setRealPath(String realPath) {   
        this.realPath = realPath;   
    }   
       
    public void addFileMapping(FileMapping files) {   
        list.add(files);   
    }   
    public List getFileMappingList() {   
        return list;   
    }   
}  


package madvirus.webserver.config;   
  
public class FileMapping {   
  
    private String xmlFile;   
    private String textFile;   
    private String hwpFile;   
       
    public String getXmlFile() {   
        return xmlFile;   
    }   
    public void setXmlFile(String xmlFile) {   
        this.xmlFile = xmlFile;   
    }   
    public String getTextFile() {   
        return textFile;   
    }   
    public void setTextFile(String textFile) {   
        this.textFile = textFile;   
    }   
    public String getHwpFile() {   
        return hwpFile;   
    }   
    public void setHwpFile(String hwpFile) {   
        this.hwpFile = hwpFile;   
    }   
}  


 7. ConfigReader2 클래스의 코드 내용 
  1) rulexml 을 읽어들인다.
  2) rulexml 정보에 맞추어 ServerConfig.xml 을 파싱한다.
  2) VirtualMapping 클래스내의 변수명에 맞추어 값이 셋팅된다.
  3) < file-list >태그를 만나면 FileMapping 객체를 생성하여 VirtualMapping 클래스에 add한다.
번호 제목 글쓴이 날짜 조회 수
37 RuleXML 작성법 황제낙엽 2009.01.20 66
36 유용한 링크 황제낙엽 2009.01.20 13
35 Digester.peek(int n) 메서드의 고찰 황제낙엽 2008.08.26 13
34 Rule클래스의 작성 및 RuleXml 파일 작성 예제 file 황제낙엽 2008.05.15 16
33 Package org.apache.commons.digester Description - V1.8 (해석중) 황제낙엽 2008.05.15 83
32 Including programmatically-created rules: 의 고찰 황제낙엽 2008.05.14 12
31 Digester 의 xmlrules 를 이용하여 Properties 파일 읽어들이기 황제낙엽 2008.05.14 23
30 Parsing and Processing Large XML Documents with Digester Rules (해석중) file 황제낙엽 2008.05.13 1478
29 Package org.apache.commons.digester.xmlrules 황제낙엽 2008.05.13 26
» Digester가 제공하는 기본 Rule을 이용한 예제 프로젝트 분석 file 황제낙엽 2008.05.13 99
27 Digester 의 소개 및 기본적인 사용법 황제낙엽 2008.05.09 58
26 Parsing, indexing, and searching XML with Digester and Lucene 황제낙엽 2008.05.07 429
25 Digester란? 황제낙엽 2008.05.07 73
24 접속 클라이언트의 아이피별로 로그 화일 기록하기 file 황제낙엽 2009.06.01 183
23 영문 메뉴얼 (PDF) file 황제낙엽 2009.05.29 19
22 사용자 정의 Appender 정의하여 Log4j 확장하기 황제낙엽 2009.05.28 220
21 POI - HSSF 예제 프로젝트 file 황제낙엽 2008.05.16 32
20 POI 셀 스타일 설정을 위한 예제 소스 file 황제낙엽 2008.05.16 1379
19 POI HSSF 기능 가이드 -- 퀵·가이드 (한글) 황제낙엽 2008.05.16 373
18 POI HSSF 기능 가이드 -- 퀵·가이드 (영문) 황제낙엽 2008.05.15 144