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
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 58 | 톰캣에서 로그 파일 저장시 ansi 로 저장되는 현상 | 황제낙엽 | 2024.10.21 | 665 |
| 57 |
Jsoup 을 이용하여 웹 크롤링(Web Crawling)
| 황제낙엽 | 2023.08.09 | 496 |
| 56 | Apache Log4j™ 2 사용하기 | 황제낙엽 | 2023.04.28 | 594 |
| 55 | Migrating from Log4j 1.x to 2.x | 황제낙엽 | 2023.04.28 | 718 |
| 54 |
SLF4J 를 사용해야 하는 이유
| 황제낙엽 | 2022.09.17 | 584 |
| 53 | Apache Log4j 2 Configuration 파일 설정 | 황제낙엽 | 2020.04.01 | 818 |
| 52 |
이클립스에서 JUnit 사용하기
| 황제낙엽 | 2019.04.02 | 728 |
| 51 | 각 레벨별 출력파일 설정 예제 | 황제낙엽 | 2018.09.18 | 775 |
| 50 |
log4j-1.2.15.jar 와 log4j.properties 예제
| 황제낙엽 | 2017.08.04 | 840 |
| 49 |
POI HSSF, XSSF, SXSSF 성능 분석
| 황제낙엽 | 2013.11.05 | 2097 |
| 48 | POI-HSSF and POI-XSSF - Java API To Access Microsoft Excel Format Files | 황제낙엽 | 2013.11.05 | 1775 |
| 47 | Commons Logging과 Log4J | 황제낙엽 | 2013.03.07 | 733 |
| 46 |
Library & Properties 파일
| 황제낙엽 | 2011.12.23 | 981 |
| 45 |
Cell 의 wrap 설정 (텍스트 개행)
| 황제낙엽 | 2011.05.09 | 3610 |
| 44 |
XSSF Examples
| 황제낙엽 | 2011.05.04 | 816 |
| 43 | 병합된 셀의 스타일( border) 설정하기 | 황제낙엽 | 2011.05.03 | 2214 |
| 42 | 셀 크기 조정 (자동 크기 조정) | 황제낙엽 | 2011.05.03 | 8316 |
| 41 | 셀 병합 | 황제낙엽 | 2011.05.03 | 697 |
| 40 | WebSphere 에서 Log4j 사용하기 | 황제낙엽 | 2011.04.15 | 632 |
| 39 |
Map 사용 예제
| 황제낙엽 | 2010.10.17 | 622 |