본문 바로가기
웹/Java

Java 클래스에서 WEB-INF 폴더 내 XML 파일 읽기

by 브래드.권 2013. 4. 30.

 

 

 

Version 1.0

문서 이력

2013-03-29 최초 작성 Ver 1.0

 

 

 

웹 프로젝트 진행 중 Java 클래스에서 WEB-INF 폴더 내 설정 XML 파일을 읽는 방법입니다.

구글링 해보니 보통 WEB-INF 폴더는 웹에서만 사용되기 때문에 설정파일은 Servlet 이나 JSP 내에서 핸들링을 한다고 하네요. 저는 그냥 편법으로 Java 클래스에서 바로 접근을 해 봤습니다.

 

XML 파일을 읽는 부분은 jdom 2.0.4 라이브러리를 사용했습니다.

 

jdom-2.0.4.jar

 

실행 환경은 WebSphere v6.1 Tomcat v6.0 입니다.

웹 컨테이너에 따라 ClassLoader 경로 부분이나 실행 환경이 조금 틀린 것 같으니 그 외 WAS 를 사용하실 경우 안 될 수도 있겠네요.

 

우선 WebSphere v6.1 에서의 방법입니다.

Rational Application Developer(RAD) v7 툴을 사용하였습니다.

 

<샘플 코드 – WEB-INF/Config.xml>

 

<?xml version="1.0" encoding="UTF-8"?>

<User>

             <UserID>tester</UserID>

             <Password>1234</Password>

             <Username>Scott</Username>

</User>

 

 

<샘플 코드 – Test.java>

 

package test;

 

import java.util.List;

import org.jdom2.Document;

import org.jdom2.Element;

import org.jdom2.input.SAXBuilder;

 

public class Test {

             public static void run() {

                           try {

                                        SAXBuilder builder = new SAXBuilder();

                                       

                                        //builder.build 의 입력 파라미터는 URL 객체

                                        //입력 파라미터에 [클래스명].class.getResource() 사용

                                        Document doc = builder.build(Test.class.getResource("/WEB-INF/Config.xml"));

 

                                        //WEB-INF/Config.xml 파일의 절대경로 출력

                                        System.out.println(Test.class.getResource("/WEB-INF/Config.xml").getPath());

 

                                        //Config.xml 내 내용 출력

                                        Element root = doc.getRootElement();

                                        List<Element> elements = root.getChildren();

                                       

                                        for (Element element : elements) {

                                                     System.out.println(element.getName() + " : " + element.getText());

                                        }

                           }

                           catch (Exception e) {

                                        System.out.println("Error Occured : " + e);

                           }

             }

}

 

 

Java 클래스를 작성하고 이를 JSP 에서 실행시킵니다.

 

<샘플 코드 – NewFile.jsp>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@page language="java" contentType="text/html; charset=EUC-KR"

             pageEncoding="EUC-KR"%>

<html>

<head>

<title>NewFile</title>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<meta name="GENERATOR" content="Rational Application Developer">

</head>

<body>

<%

test.Test.run();

 %>

</body>

</html>

 

 

<결과>

 

[13. 3. 29   10:56:19:654 KST] 00000046 SystemOut     O /C:/Users/Administrator/IBM/rationalsdp7.0/workspace/.metadata/.plugins

/org.eclipse.wst.server.core/tmp0/WebTestEAR.ear/WebTest.war/WEB-INF/Config.xml

[13. 3. 29   10:56:19:654 KST] 00000046 SystemOut     O UserID : tester

[13. 3. 29   10:56:19:654 KST] 00000046 SystemOut     O Password : 1234

[13. 3. 29   10:56:19:654 KST] 00000046 SystemOut     O Username : Scott

 

 

 

Tomcat v6.0 에서의 방법입니다.

Eclipse Java EE IDE for Web Developers Indigo Service Release 2 툴을 사용했습니다.

 

<샘플 코드 – WEB-INF/Config.xml>

 

<?xml version="1.0" encoding="UTF-8"?>

<User>

        <UserID>tester</UserID>

        <Password>1234</Password>

        <Username>Scott</Username>

</User>

 

 

<샘플 코드 – Test.java>

 

package test;

 

import java.util.List;

import org.jdom2.Document;

import org.jdom2.Element;

import org.jdom2.input.SAXBuilder;

 

public class Test {

        public static void run() {           

               try {

                       //[클래스명].class.getResource("/") 클래스의 절대경로를 구함

                       String path = Test.class.getResource("/").getPath();

                       System.out.println(path);

                      

                       //WEB-INF/Config.xml 경로로 변경

                       path = path.substring(0, path.length() - 1);

                       System.out.println(path);

                      

                       path = path.substring(0, path.lastIndexOf("/") + 1);

                       System.out.println(path);

                      

                       path = path + "Config.xml";

                       System.out.println(path);

                      

                       SAXBuilder builder = new SAXBuilder();

                      

                       //builder.build 입력 파라미터는 파일 경로 문자열

                       Document doc = builder.build(path);

 

                       //Config.xml 내용 출력

                       Element root = doc.getRootElement();

                       List<Element> elements = root.getChildren();

                      

                       for (Element element : elements) {

                              System.out.println(element.getName() + " : " + element.getText());

                       }

               } catch (Exception e) {

                       System.out.println("Error Occured : " + e);

               }

        }

}

 

 

Java 클래스를 작성하고 이를 JSP 에서 실행시킵니다.

 

<샘플 코드 – NewFile.jsp>

 

<%@page import="test.Test"%>

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>   

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

</head>

<body>

<%

Test.run();

%>

</body>

</html>

 

 

<결과>

 

/C:/Users/Administrator/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0

/wtpwebapps/WebTest/WEB-INF/classes/

/C:/Users/Administrator/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0

/wtpwebapps/WebTest/WEB-INF/classes

/C:/Users/Administrator/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0

/wtpwebapps/WebTest/WEB-INF/

/C:/Users/Administrator/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0

/wtpwebapps/WebTest/WEB-INF/Config.xml

UserID : tester

Password : 1234

Username : Scott