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한다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
15 |
Map 사용 예제
![]() | 황제낙엽 | 2010.10.17 | 104 |
14 | Digester/FAQ | 황제낙엽 | 2010.10.16 | 232 |
13 | RuleXML 작성법 | 황제낙엽 | 2009.01.20 | 177 |
12 | 유용한 링크 | 황제낙엽 | 2009.01.20 | 73 |
11 | Digester.peek(int n) 메서드의 고찰 | 황제낙엽 | 2008.08.26 | 88 |
10 |
Rule클래스의 작성 및 RuleXml 파일 작성 예제
![]() | 황제낙엽 | 2008.05.15 | 82 |
9 | Package org.apache.commons.digester Description - V1.8 (해석중) | 황제낙엽 | 2008.05.15 | 173 |
8 | Including programmatically-created rules: 의 고찰 | 황제낙엽 | 2008.05.14 | 80 |
7 | Digester 의 xmlrules 를 이용하여 Properties 파일 읽어들이기 | 황제낙엽 | 2008.05.14 | 98 |
6 |
Parsing and Processing Large XML Documents with Digester Rules (해석중)
![]() | 황제낙엽 | 2008.05.13 | 1567 |
5 | Package org.apache.commons.digester.xmlrules | 황제낙엽 | 2008.05.13 | 92 |
» |
Digester가 제공하는 기본 Rule을 이용한 예제 프로젝트 분석
![]() | 황제낙엽 | 2008.05.13 | 174 |
3 | Digester 의 소개 및 기본적인 사용법 | 황제낙엽 | 2008.05.09 | 116 |
2 | Parsing, indexing, and searching XML with Digester and Lucene | 황제낙엽 | 2008.05.07 | 534 |
1 | Digester란? | 황제낙엽 | 2008.05.07 | 136 |