본문 바로가기
PROGRAM/XML

[본문스크랩] [아파치]자카르타 Digester 간단 사용법

by 반화넬 2008. 1. 22.
반응형
제목: [아파치]자카르타 Digester 간단 사용법

다이제스터는 어디에 쓰는 물건인고?
먼저 jar파일이 필요한데요 다이제스터 관련 jar는 톰캣루트/server/lib 폴더에 있습니다.
(commong-digester.jar , commons-beanutils.jar, commons-collections.jar, commons-logging.jar)

다이제스터는 xml내에서 정보를 읽어들인후에 그값을 해당 객체에 바로 집어넣어주는 구조를 띄고 있습니다.
예를 들자면 우리가 db에 접속할때 dbpool을 많이 사용합니다.
그 dbpool은 일반적으로 properties 에서 db접속정보를 읽어들이는데요 이러한 정보를 xml로 할수도 있습니다.

dbpool.properties 가 다음과같을때
url=jdbc:mysql://www.javaforum.co.kr:3306
username=test
password=test1


dbpool.xml로 한다면 다음처럼 표현할수 있습니다.
<?xml version="1.0" encoding="euc-kr"?>
<dbpool>
   <url>jdbc:mysql://www.javaforum.co.kr:3306</url>
   <username>test</username>
   <password>test1</password>
</dbpool>


만약 이걸 일반 xml기법으로 파싱한다면
1.dtd가 필요하고
2.xml파서를 가지고 여러분이 직접 결과를 가져오는 코딩을 해줘야합니다.
3.그리고 그걸 객체에 집어넣을려면 역시 추가코딩이 들어가야 합니다.

하지만 Digester는 그런것을 한방에 해결해주죠. 물론 dtd도 필요없습니다.

자, 이제 dbpool.xml과 매치가 되는 DbpoolConfig.java 를 만들겠습니다.
public class DbpoolConfig {
   private String url;
   private String username;
   private String password;

   public String getPassword() {
      return password;
   }

   public String getUrl() {
      return url;
   }

   public String getUsername() {
      return username;
   }

   public void setPassword(String string) {
      password = string;
   }

   public void setUrl(String string) {
      url = string;
   }

   public void setUsername(String string) {
      username = string;
   }
}

xml 과 config 클래스를 만들었으니깐 이제 Digester 가 나설차례군요.
import org.apache.commons.digester.*;
import java.io.*;
/**
 * @author wwwoong
 */
public class DbpoolDigester {
   public static EnvConfig digest() {      
      Digester digester = new Digester();
      digester.setValidating(false);
      
      digester.addObjectCreate("dbpool", DbpoolConfig.class);
      digester.addBeanPropertySetter("dbpool/url", "url");
      digester.addBeanPropertySetter("dbpool/username", "username");
      digester.addBeanPropertySetter("dbpool/password", "password");
      File configFile = new File("dbpool.xml");
      
      try {
         DbpoolConfig config = (DbpoolConfig) digester.parse(configFile);
         return config;
      } catch (Throwable ex) {
         ex.printStackTrace();
         return null;
      }      
   }
}

DbpoolDigester가 핵심인데요.
1.digester.addObjectCreate("dbpool", DbpoolConfig.class); 는 xml내용을 담을 객체를 생성하구요.
여기서 dbpool은 그 객체가 담길 xml의 루트 엘리먼트가 됩니다. 즉 dbpool내에 있는 엘리먼트의 값들을 DbpoolConfig에 담겠다는뜻입니다.
2.digester.addBeanPropertySetter("dbpool/url", "url"); 은 dbpool하위의 엘리먼트중에서 url 엘리먼트에 있는값을 DbpoolConfig 클래스에 있는 url변수와 매치를 시켜주는겁니다.
나머지들도 이런과정으로 해주면 되구요.
3.마지막으로 xml파일을 읽고 parse메소드를 호출해주면 내부적으로 위의 매칭과정을 통하여 객체에 값이 들어가게 됩니다.

사용법은 다음과 같습니다.
DbpoolConfig config = DbpoolConfig.digest();
String url = config.getUrl();

 

 

출처: http://www.javaforum.co.kr

반응형