Struts 2.1.8 과 Tiles 2.1.4 버전을 이용하는 예제

Tiles 프레임워크의 기본개념 및 다른 프레임워크와 연동하지 않고 사용하는 예는 여기를 참조하세요.
Spring 2.5.6 과 Tiles 2.0.5 사용예제는 여기를 참조하세요.

apache.org 사이트에서 struts 2.1.8_all.zip 파일과 Tiles 2.1.4.zip 파일을 다운로드하여 압축을 해제하고 struts-2.1.8.blank.war 파일을 찾는다.




Eclipse 3.5를 실행하여 Project Explorer에서 마우스 우측을 클릭 > import > war > struts-2.1.8.blank.war 을 선택하여 Eclipse에 프로젝트를 생성한다.

생성된 프로젝트에 디폴트로 포함된 라이브러리 만으로는 Tiles 를 사용하기 위해서는 부족하므로 다음과 같은 라이브러리를 추가로 import 해 주어야 한다.

Struts 2.1.8에 포함된 라이브러리
- commons-beanutils-1.7.0.jar
- commons-digester-2.0.jar
- commons-logging-1.0.4.jar
- struts2-tiles-plugin-2.1.8.1.jar


Tiles 2.1.4 버전에 포함된 라이브러리

- tiles-api-2.1.4.jar
- tiles-core-2.1.4.jar
- tiles-jsp-2.1.4.jar
- tiles-servlet-2.1.4.jar

Struts 2.1.8-blank.war에 포함된 라이브러리 외에 추가로 포함되어야 할 라이브러리 다운로드




위의 라이브러리가 모두 프로젝트에 포함되었다면, 다음과 같이 설정파일을 작성한다.

WebContent/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <display-name>Struts Blank</display-name>

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
   
    <!-- Tiles Listener -->

 <listener>
     <listener-class>
       org.apache.struts2.tiles.StrutsTilesListener
     </listener-class>
 </listener>
    <context-param>
           <description>Tiles configuration file</description>
           <param-name>
                   org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG
           </param-name>
           <param-value>/WEB-INF/classes/tilesdef.xml</param-value>
   </context-param>

</web-app>





WebContent/WEB-INF/classes/tilesdef.xml

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

<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

<tiles-definitions>
 <definition name="base_layout" template="/layout.jsp">
  <put-attribute name="title">레이아웃페이지</put-attribute>
  <put-attribute name="header" value="/header.jsp"/>
  <put-attribute name="menu" value="/menu.jsp"/>
  <put-attribute name="body" value="/body.jsp"/>
  <put-attribute name="footer" value="/footer.jsp"/>
 </definition>
 
 <definition name="hello" extends="base_layout">
  <put-attribute name="body" value="/hello.jsp"/>
 </definition>
 
 <definition name="logform" extends="base_layout">
  <put-attribute name="body" value="/logForm.jsp"/>
 </definition>
 
</tiles-definitions>



WebContent/WEB-INF/classes/struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="false" />

    <include file="example.xml"/>


    <package name="default" namespace="/" extends="struts-default">
        <default-action-ref name="index" />
        <action name="index">
            <result type="redirectAction">
                <param name="actionName">HelloWorld</param>
                <param name="namespace">/example</param>
            </result>
        </action>
    </package>

    <!-- Add packages here -->

   <package name="tiles" namespace="/tiles" extends="struts-default, tiles-default">
        <action name="index">
            <result type="tiles">base_layout</result>
        </action>
        <action name="menu1">
            <result type="tiles">hello</result>
        </action>
        <action name="menu2">
            <result type="tiles">logform</result>
        </action>
    </package>

</struts>



WebContent/layout.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>

<!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><tiles:getAsString name="title"/></title>
</head>
<body>
 <center>
 <table>
 <tr><td colspan="2"><tiles:insertAttribute name="header"/></td></tr>
 <tr><td><tiles:insertAttribute name="menu"/></td>
 <td><tiles:insertAttribute name="body"/></td></tr>
 <tr><td colspan="2"><tiles:insertAttribute name="footer"/></td></tr>
 </table>
 </center>
</body>
</html>



WebContent/header.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<div style="border:2px double black;">
<center>
<h1>여기는 header.jsp의 내용</h1>
</center>
</div>



WebContent/menu.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<div style="border:1px solid blue;width:100px; height:300px;">
Menu
</div>



WebContent/body.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<div style="border:2px dashed red; height:300px;">
<center>
<h1>여기는 body.jsp의 내용</h1>
</center>
</div>



WebContent/footer.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<div style="border:2px solid green;">
<center>
<h1>여기는 footer.jsp의 내용</h1>
</center>
</div>



WebContent/hello.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<div style="border:2px solid green;">
<center>
<h1>여기는 hello.jsp의 내용</h1>
</center>
</div>


테스트
http://localhost/컨텍스트명/tiles/index.action
http://localhost/컨텍스트명/tiles/menu1.action
http://localhost/컨텍스트명/tiles/menu2.action

'Java' 카테고리의 다른 글

스프링 AOP  (0) 2010.07.16
Spring Framework의 기본 개념 Struts / Spring / Architecture  (0) 2010.07.15
스트러츠(struts)를 써보자.  (0) 2010.07.14
[read] JDOM SAX 파싱예제... (parser)  (0) 2010.06.29
JDOM(THE JAVA DOM)  (0) 2010.06.29
스트러츠 사용 순서
1. 스트러츠 프레임 워크를 사용하는 프로젝트 생성
2. /WEB-INF/web.xml 파일 설정
3. /WEB-INF/struts-config.xml 파일 수정
4. Action, Form, Bean, JSP 파일 등 소스 파일 생성
5. 실행

자세희
1. 스트러츠 프로젝트 생성
스트러츠는 웹 애플리케이션 단위로 동작한다. 따라서 프로젝트 중간에 추가할 수는 없고
처음부터 스트러츠를 사용하는 프로젝트를 만들어야 한다.
가장 간단한 방법은 기본적인 스트러츠 애플리케이션을 제공하는 struts-blank-version.war 파일을 import해서 프로젝트를 생성하는 것이다.

* 마우스 우클릭으로 import할 때 모습(이클립스->파일->import 방법도 있음)


* war file을 선택하고 next 클릭



* next를 클릭했을 때 화면. browse를 클릭한다.



* war file(여기서는 struts-blank.war)파일을 선택하고 열기 클릭



* war file을 열고 프로젝트 명을 수정 한 후 next한 화면.  *.jar 파일선택화면. 체크없이 그냥 finish 클릭



* 이제 struts 프레임 워크를 생성 완료.



* web.xml 파일 설정(*.do파일을 action 서블릿으로 매핑. 특별히 수정할 필요는 없다.) 한번 열어보고 그냥 패스 ~ㅡ~;



*. Java 소스 코드를 저장할 폴더 생성



* jsp 파일 저장 폴더 생성



* jsp 파일 저장폴더 생성 모습. 편의를 위해 jsp파일 저장폴더와 java 소스파일 폴더를 같은 이름으로 생성해준다.



* jsp 저장폴더에서 간단한 jsp 파일 생성



* 추가된 jsp 파일 수정. 간단하게 welcome을 찍어보자.



* 수정한 jsp 파일을 저장하고 실행 클릭~



* welcome.jsp 파일 실행 화면...간단하게 welcome~만 나온다.
사실 요기까지는 어느 책이라도 다 나온다.

그럼 간단하게 로그인 관련해서  *.java   *.jsp   struts-config.xml을 작성하고 수정하는 방법을 알아보자.



* 로그인 관련 LoginAction.java   LoginForm.java   LoginBean.java  ConnectDb.java   main.jsp 파일 생성
LoginAction.java : welcome.jsp 파일에서 요청을 받아들여 LoginBean.java에 선언된 클래스 객체를 통해 DB와 연결해서 사용자가 존재하는지 체크한다. 사용자가 맞을 경우 main.jsp로 forward, 틀릴 경우 welcomoe.jsp파일을 그대로 보여준다.
LoginForm.java : welcome.jsp 파일에서 입력한 값들이 적당한지 검사한다.(요기서는 null체크만 한다)
LoginBean.java : 데이터베이스와 연동해서 입력한 값들(userid, userpass)이 데이터베이스에 존재하는지 체크.
ConnectDb.java : 데이터베이스와의 연결을 관리한다.
main.jsp : 사용자가 맞을 경우 세션에 저장된 userid 값을 화면에 출력한다.



* welcome.jsp파일 수정 화면. form의 action항목에 연결할 액션 서블릿을 지정한다.



* struts-config.xml 파일을 열어서 form-bean을 등록한다.
name: form-bean의 이름
type: ActionForm이 정의된 클래스.   패키지.클래스명



* struts-config.xml 파일을 열어 <action></action> 태그 정보를 입력한다.
path: 웹 경로(welcome.jsp의 form에 등록된 action 값(action="loginaction.do")에서 do를 제외한
"/소스폴더명/액션" 을 입력
type: Action 클래스 경로명
name: form-bean 이름
validate: 입력값 타당성 검토 여부 설정 true/false
scope: request/response 여부 설정
input: 입력 페이지.  name에 등록된 form-bean클래스를 이용해서 타당성 여부 검사.
         입력값에 문제가 있을 때 출력할(되돌아갈) 페이지
forward: LoginAction에서의 결과에 따라 forward할 페이지 이름
!! children 이라는 의미는 나의 자식만을 의미하지 자식의 자식..손주까지 의미하진 않는다.
그건 자식의 children 일 뿐이다....

<?xml version="1.0" encoding="euc-kr"?><br/>
<inventory><br/>
 <book year="2000"><br/>
  <title name="Snow Crash"><br/>
   <genre>novel</genre><br/>
  </title><br/>
  <br/>
  <author>Neal Stephenson</author><br/>
  <publisher>Spectra</publisher><br/>
  <isbn>0553380958</isbn><br/>
  <price>14.95</price><br/>
 </book><br/>
 <book year="2005"><br/>
  <title>Burning Tower</title><br/>
  <author>Larry Niven</author><br/>
  <author>Jerry Pournelle</author><br/>
  <publisher>Pocket</publisher><br/>
  <isbn>0743416910</isbn><br/>
  <price>5.99</price><br/>
 </book><br/>
 <book year="1995"><br/>
  <title>Zodiac</title><br/>
  <author>Neal Stephenson</author><br/>
  <publisher>Spectra</publisher><br/>
  <isbn>0553573862</isbn><br/>
  <price>7.50</price><br/>
  </book><br/>
</inventory>

----------------------------------------------------------------------------
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import org.jdom.Attribute;
import org.jdom.DocType;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;



public class JDOM001 {
        public static void main(String[] args) {
                try {
                        SAXBuilder builder = new SAXBuilder();
                        Document jdomdoc = builder.build("src/books.xml");
                       
                        // 우선 root 엘리먼트를 가져온다. 여기서는 inventory
                        Element root= jdomdoc.getRootElement();
                       
                        DocType docType = jdomdoc.getDocType();

                        System.out.println();
                        System.out.println("Root element:");
                        System.out.println(" Name: "+root.getName());
                        System.out.println(" Text(trimmed): '"+root.getTextTrim()+"'");
                       
                        // 파싱을 위해 메스드에 넘김
                        nodeParser(root);
                       
                } catch (JDOMException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
       
        // parent에 해당하는 element 를 받게 된다.
        public static void nodeParser(Element p_el) {
                // 현재의 parent 에 해당하는 element의 자식들!을 가져온다.
                List list = p_el.getChildren();
                // children을 Iterator에 담음...
                Iterator it = list.iterator();

               
                while(it.hasNext()) {
                        // 엘리먼트 하나만 꺼내
                        Element e = (Element)it.next();
                        // 그 엘리먼트의 속성값들을 List에 담는다.
                        List attList = e.getAttributes();
       
                       
                       
                        // 속성이 있다면 속성을 찍는다.--------------------------------------------------------
                        if (attList.size() != 0) {
                                // 역시 속성리스트를 다시 iterator 로 담고
                                Iterator i = attList.iterator();
       
                                while(i.hasNext()) {
                                        /** Attribute 파싱 **/
                                        // iterator 로 부터 하나의 속성을 꺼내와서...
                                        Attribute at = (Attribute)i.next();
                                        System.out.println("속성이 존재한다.");
                                        System.out.println("node : " + e.getName());
                                        System.out.println("attribute : " + at.getName() +"   attribute value : " + at.getValue());
                                }        // end of while
                        }        // end of 속성 if
                        // 속성 가져오기 끝....-----------------------------------------------------------------
                       
                        // 이제 자식들중에서 가져온 자식하나가 또 children 노드들을 가지고 있는지 확인하자구...
                        List li = e.getChildren();
                       
                        // 자식노드가 존재한다면.... 다시 nodeParser에 넣어서 계속 children을 타고 내려가야한다.
                        if (li.size() != 0) {
                                System.out.println("자식노드(모든서브)가 존재한다. childeren list size : "+ li.size());
                                nodeParser(e); /** recursive call **/
                        } else {
                                System.out.println("자식은 더이상 없고 노드에 값이 있음  childeren list size : "+ li.size());
                                /** 노드의 값이 있는 경우에만 출력 **/
                                if (!e.getValue().trim().equals("")) {
                                        System.out.println("parent node : " + e.getParentElement().getName() + " current  node : " + e.getName());
                                        System.out.println("value : " + e.getValue());
                                }
                        } // end of if
                } // end of while
        } // end of nodeParser
}


-----------------------------------------------------------


Root element:
Name: inventory
Text(trimmed): ''
속성이 존재한다.
node : book
attribute : year   attribute value : 2000
자식노드(모든서브)가 존재한다. childeren list size : 5
속성이 존재한다.
node : title
attribute : name   attribute value : Snow Crash
자식노드(모든서브)가 존재한다. childeren list size : 1
자식은 더이상 없고 노드에 값이 있음  childeren list size : 0
parent node : title current  node : genre
value : novel
자식은 더이상 없고 노드에 값이 있음  childeren list size : 0
parent node : book current  node : author
value : Neal Stephenson
자식은 더이상 없고 노드에 값이 있음  childeren list size : 0
parent node : book current  node : publisher
value : Spectra
자식은 더이상 없고 노드에 값이 있음  childeren list size : 0
parent node : book current  node : isbn
value : 0553380958
자식은 더이상 없고 노드에 값이 있음  childeren list size : 0
parent node : book current  node : price
value : 14.95
속성이 존재한다.
node : book
attribute : year   attribute value : 2005
자식노드(모든서브)가 존재한다. childeren list size : 6
자식은 더이상 없고 노드에 값이 있음  childeren list size : 0
parent node : book current  node : title
value : Burning Tower
자식은 더이상 없고 노드에 값이 있음  childeren list size : 0
parent node : book current  node : author
value : Larry Niven
자식은 더이상 없고 노드에 값이 있음  childeren list size : 0
parent node : book current  node : author
value : Jerry Pournelle
자식은 더이상 없고 노드에 값이 있음  childeren list size : 0
parent node : book current  node : publisher
value : Pocket
자식은 더이상 없고 노드에 값이 있음  childeren list size : 0
parent node : book current  node : isbn
value : 0743416910
자식은 더이상 없고 노드에 값이 있음  childeren list size : 0
parent node : book current  node : price
value : 5.99
속성이 존재한다.
node : book
attribute : year   attribute value : 1995
자식노드(모든서브)가 존재한다. childeren list size : 5
자식은 더이상 없고 노드에 값이 있음  childeren list size : 0
parent node : book current  node : title
value : Zodiac
자식은 더이상 없고 노드에 값이 있음  childeren list size : 0
parent node : book current  node : author
value : Neal Stephenson
자식은 더이상 없고 노드에 값이 있음  childeren list size : 0
parent node : book current  node : publisher
value : Spectra
자식은 더이상 없고 노드에 값이 있음  childeren list size : 0
parent node : book current  node : isbn
value : 0553573862
자식은 더이상 없고 노드에 값이 있음  childeren list size : 0
parent node : book current  node : price
value : 7.50



from http://blog.naver.com/rogerrb?Redirect=Log&logNo=100025402433
주석 추가 : ez

▒ 작성자 : 전윤경(ygchon@penta.co.kr )

▒ 작성일 : 2001년 08월 13일

1. JDOM이란 무엇인가?

JDOM은 XML을 다루기(reading,writing,manipulating) 위해 자바 코드를 사용하여 만든 새로운 API이다. JDOM은 XML문서를 다루는 데 있어서 Java-oriented API를 사용하기 때문에 ,특별히 자바 프로그래머들을 위해 최적화되었다고 할 수 있다.

JDOM은 자바 개발자들에게 보다 직관적인 방법으로 XML을 핸들링하도록 하는 오픈 소스 API이다. JDOM은 그 이름처럼 자바를 기반으로 하여 만들어 졌으며, 자바의 속성을 그대로 가지고 있다. 또한 자바 라이브러리를 사용한다. 그렇기 때문에 자바를 잘 사용하고 XML을 핸들링 하고자 하는 사람들은 자바의 개념을 그대로 유지해가면서 XML개발을 좀더 쉽게, 그리고 그들에게 익숙한 방법으로 할 수 있는 것이다.

JDOM은 웹 컨소시움에서 표준으로 정의한 SAX와 DOM과도 상호연동 되지만, 이들보다는 더 간단하다. JDOM은 SAX와 DOM의 장점만을 골라 새로운 클래스와 인터페이스를 만들어서 JDOM 사용자들에게 제공할 것이다. JDOM은 DOM과 SAX로 만들어진 컴포넌트와 통신이 가능하다. 이것은 이미 DOM과 SAX로 만들어진 프로그램과의 호환을 가능하게 한다.

JDOM은 Apache프로젝트(예를 들어,Apache 서버에서 적용되었던)에서 사용하는 라이센스 모델을 따른다. 즉 JDOM은 소스가 공개되어 있으며, 최소한의 제약사항만을 가지고 JDOM을 사용할 수 있다.

그렇다면 JDOM이 추구하고자 하는 것은 무엇일까? 간단하게 두 가지로 요약될 수 있다.

첫번째는 보다 직접적으로 자바 프로그래머들에게 JDOM API를 사용하게 하는 것이다. 기존의 XML API들은 언어 독립적으로 설계되었다. 그렇기 때문에 특정 언어를 사용하는 개발자(예를 들어 자바나 C개발자들,..)들이 XML프로그래밍을 하는데 있어서 혼란이 있었다. 예를 들어

this is element

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

와 같은 엘리먼트가 있을 경우, XML API에서는, 컨텐츠를 컨텐츠가 포함된 엘리먼트의 child로 보기 때문에 다름과 같이 그 컨텐츠에 접근한다,.

String  text = element.getFirstChild().getNodeValue();

 

그러나, JDOM은 보다 직접적으로 프로그래머가 원하는 방식으로 그 컨텐츠를 얻을 수 있다

String text = element.getText();

 

JDOM은 프로그래머의 작업을 수월하게 한다.

두번째는, JDOM은 빠르고 가볍다. 문서를 로딩하고 조작하는데 있어, JDOM은 그것을 빠르게, 그리고 메모리 사용도 최소화 하여 처리할 수 있다. 즉DOM보다 빠르고 SAX같은 속도를 가지는, SAX보다 더 많은 API를 보유하고 있도록 구현되었다.

JDOM이 표준 API의 문제들을 해결하였다??

이미 XML 표준 API가 있는데 왜 JDOM을 써야 할까? 표준이라고 해서 완벽한 것은 아니다. DOM은 XML문서를 완전히 메모리에 로드한 후 사용하며, XML을 다루는데 있어 필요한 모든 API를 포함하고 있다. 이러한 과도한 메모리 사용과 복잡한 프로세싱은, 웹 어플리케이션과 프로그램에 부담을 주게 된다. SAX는 XML문서를 메모리에 로드하여 사용하지 않는다. 그 대신에 순차적으로 이벤트를 발생시켜 XML문서를 프로세싱한다. 즉 시작 태그와 끝 태그를 만나는 모든 시점에 이벤트를 발생시킨다. 이러한 간단한 API를 가진 SAX는 그것의 빠른 수행속도로 인해 READ-ONLY프로그램에 적당하다. 그러나 이러한 SAX의 이벤트 모델은 Object Oriented 자바 개발자들에게 직관적이지 않으며, 문서를 조작하고, random access를 할 수 없는 단점을 가지고 있다. 그래서 JDOM은 DOM과 SAX의 장점만을 수용하여 구현하였다. 그래서 JDOM의 특성은 DOM이나 SAX어느 하나에 가깝다고 말하기 어렵다. JDOM은 도큐먼트 전체를 놓고 보면 random access가 가능하다, 그러나 놀랄만하게도,…그것을 메모리 전체에 로드하지 않는다. 즉 필요한 부분만 메모리에 로드한다.

JDOM은 2001년 4월에 Jason Hunter 와Brett McLaughlin라는 사람이 JDOM의 배타판을 발표했다. 현재 배타7까지 나와 있으며 조만간 JDOM1.0이 발표될 것이다. http://jdom.org에서 JDOM을 다운 받아 사용할 수 있다.

자바와 함께 XML을 사용하는 것은 정말 간단하다. 사용자는 JDK, 몇 개의 클래스 라이브러리, 텍스트 에디터만 있으면 된다. Document Object Model (DOM)은 XML데이터를 조작하는 데 있어서는 굉장히 인기 있는 표준 API이다. 그러나 JDOM이 좀더 안정적으로 되면 자바 개발자들에게는 JDOM이 훨씬 편리한 API가 될 것이다.

2. W3C DOM과 다른점은?

-DOM은 프로그래밍 언어에 독립적으로 설계되었다. 그래서 자바면 자바, C처럼 특정한 언어를 사용하는 사용자에게는 매우 불편할 수도 있다.

-DOM은 자바 클래스 라이브러리를 매우 제한적으로 사용하며, 또한 많은 부분들이 자바 클래스 라이브러리와 중복된다. 한 예로, Java.util.Iterator를 사용하는 거 대신 NodeIterator를 새로 만들어서 사용한다.

-DOM의 일부 영역은 매우 엉성하게 디자인 되었다. Overloading 메서드는 모든 프로그래밍 언어가 그것을 지원하지 않기 때문에(예를 들면, 자바스크립트), 잘 사용되지 않고 있다. 단 한 종류의 exception만이 있다.

-equals(), hashCode(), clone(), toString()같은 자바 유틸리티 메소드들이 전혀 정의되지 않았다

3. JDOM API

-Org.jdom.Document에서 XML Document를 생성할 수 있다. 다음과 같이 Document 클래스를 생성할 수 있다.

Document doc = new Document(new Element("RootElement"));

 

-builder를 사용하여 file, stream, url으로부터 도큐먼트 트리를 생성할 수 있다.

SAXBuilder builder = new SAXBuilder();

Document doc = builder.build(url);

 

builder는 org.jdom.input 패키지에서 포함되어 있으며, 아래의 두 가지 builder클래스가 있다.

public SAXBuilder(String parserClass, boolean validation);

public DOMBuilder(String adapterClass, boolean validation);

 

SAXBuilder는 파일로부터 읽어 들여 JDOM Document tree를 생성하고, SAX Parser를 사용한다. SAXBuilder는 SAX 이벤트를 발생시키면서 대응하는 도큐먼트를 메모리에 로드한다(그래서 빠르다). DOMBuilder는 org.w3c.dom.Document로부터 JDOM Document를 생성하기 위해 사용한다. 이 클래스는 이미 만들어진 dom로부터 JDOM tree를 생성할 때만 사용함을 주의해야 한다.

위의 두 파서는 디폴트로 XERCES parser를 사용하며, validation 은 “false”이다. DOMBuilder는 constructor에서 adapterClass를 필요로 한다. 이는 모든 DOM 파서들이 같은 API를 따르고 있지 않기 때문이다. 그래서 JDOM은 다양한 파서들에 대해 같은 API를 사용하기 위해 adapter클래스를 사용하며, Xerces, Crimson, IBM's XML4J, Sun's Project X 등의 파서들에 대해 적용될 수 있다.

-XML의 출력

XMLOutputter, SAXOutputter, DOMOutputter가 있는데, 주로 org.jdom.output.XMLOutputter를 사용하는데, 이것은 XML을 원하는 OutputStream으로 보낸다.

4. Sample 설명

BuilderTest.java : 간단한 builder 사용법, saxbuilder를 사용하여, xml 파일을 읽어 들여 루트 태그 이름을 바꾼 후, 그것을 파일에 출력한다. dombuilder를 사용하여 그 읽어들인 xml파일을 화면에 출력한다.

DOMBuilderDemo : dom treee를 사용하여 jdom을 생성

SAXBuilderDemo : sax2.0 parser를 사용하여 jdom build

5. 참고 사이트

http://www.jdom.org

http://www.webreference.com

JDOM API DOCS

JDOM.jar 과 JSON.jar (라이브러리) 다운로드 방법 ☆

jdom라이브러리로(jdom.jar) XML파일 읽기에 사용하려면
1. http://jdom.org/dist/binary/  이곳에서 jdom-1.1.1.zip 다운로드
2. 압축을 푼 후 build 폴더안의 jdom.jar 파일을 lib(라이브러리)폴더에 추가


 json 배열로 데이터를 가공하려면

2. json api다운로드
http://www.json.org 페이지의 하단 부분의 json-simple 이란 부분을 클릭

http://code.google.com/p/json-simple/

import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.*;
import com.mysql.jdbc.Connection;


public class test {

 static test msg = new test();
 public static void main(String[] args) throws ClassNotFoundException, SQLException {
  msg .go();
 }
 public void go() throws ClassNotFoundException, SQLException{
  Class.forName("org.gjt.mm.mysql.Driver");
  System.out.println("드라이버가  정상 설치 되었습니다.");
 
  Connection conn = null;
  String url ="jdbc:mysql://localhost:3306/java";
  String id = "root";
  String pass = "12345678";
  Statement stmt = null;
  ResultSet rs = null;
  String query = "select * from koleekr";
 
  conn =  (Connection) DriverManager.getConnection(url, id, pass);
  stmt = conn.createStatement();
  rs = stmt.executeQuery(query);
 
 
  while(rs.next()){
   System.out.println(rs.getInt(1)+":"+rs.getString(2) );  
  }
  rs.close();
  stmt.close();
  conn.close();
 }//go()종료

}//클래스 종료 

아래는 오라클 JDBC 드라이버 다운로드 링크이다.


http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html

Microsoft SQL Server JDBC 드라이버 2.0 링크

개요

상호 운용성 개선을 위한 끊임 없는 노력의 일환으로, Microsoft는 새 JDBC(Java Database Connectivity) 드라이버를 출시했습니다. SQL Server JDBC 드라이버 2.0은 추가 비용 없이 모든 SQL Server 사용자가 다운로드할 수 있으며, Java 응용 프로그램, 응용 프로그램 서버 또는 Java 사용 애플릿에서 SQL Server 2000, SQL Server 2005 및 SQL Server 2008에 액세스하는 데 사용할 수 있습니다. 이 드라이버는 Java 플랫폼, Enterprise Edition 5에서 사용 가능한 표준 JDBC API(응용 프로그래밍 인터페이스)를 통해 데이터베이스 연결을 제공하는 Type 4 JDBC 드라이버입니다.

이번 JDBC 드라이버 릴리스는 JDBC 4.0과 호환되며 JDK(Java Development Kit) 버전 5.0 이상에서 실행됩니다. 또한 BEA WebLogic, IBM WebSphere 및 JBoss를 포함하여 대부분의 주요 응용 프로그램 서버에서 테스트되었습니다.

시스템 요구 사항

  • 지원하는 운영 체제: HP-UX; Linux; Solaris; Unix; Windows Server 2003 Service Pack 2; Windows Server 2008; Windows Vista Service Pack 1; Windows XP Service Pack 3

  • Java Development Kit: 5.0 이상
  • SQL Server 2008, SQL Server 2005 또는 SQL Server 2000

다운로드 지침

참고: SQL Server JDBC 드라이버를 다운로드하려면 EULA(최종 사용자 사용권 계약)에 동의해야 합니다. 이 페이지 맨 위의 다운로드 단추를 클릭하여 시작하면 EULA가 나타납니다. EULA를 읽고 동의함 링크를 클릭하여 패키지를 다운로드하십시오. 보관을 위해 EULA 복사본을 인쇄하십시오.

Microsoft Windows 버전용 JDBC 드라이버 설치 방법
  1. sqljdbc_<version>_<language>.exe를 임시 디렉터리에 다운로드합니다.
  2. sqljdbc_<version>_<language>.exe를 실행합니다.
  3. 메시지가 표시되면 설치 디렉터리를 입력합니다. "Microsoft SQL Server JDBC 드라이버 2.0" 기본 디렉터리의 %ProgramFiles%에 이 zip 파일의 압축을 푸는 것이 좋습니다.
  4. 패키지 압축을 푼 후 %InstallationDirectory%Microsoft SQL Server JDBC Driver 2.0sqljdbc_<version><language>helpdefault.htm을 열어 JDBC 도움말 시스템을 엽니다. 그러면 웹 브라우저에 도움말 시스템이 표시됩니다.
UNIX 버전용 JDBC 드라이버 설치 방법
  1. sqljdbc_<version>_<language>.tar.gz를 임시 디렉터리에 다운로드합니다.
  2. 압축된 tar 파일의 압축을 풀려면 드라이버의 압축을 풀 디렉터리로 이동하여 gzip -d sqljdbc_<version>_<language>.tar.gz를 입력합니다.
  3. 파일의 압축을 풀려면 드라이버가 설치되어 있는 디렉터리로 이동하여 tar –xf sqljdbc_<version>_<language>.tar를 입력합니다.
  4. 패키지 압축을 푼 후 %InstallationDirectory%/Microsoft SQL Server JDBC Driver 2.0/sqljdbc_<version>/<language>/help/default.htm을 열어 JDBC 도움말 시스템을 엽니다. 그러면 기본 웹 브라우저에 도움말 시스템이 표시됩니다.



해당 페이지에서 SQL_Server_JDBC_Driver_20_EULA_KOR.htm 파일을 다운로드 한 후 엽니다.



+ Recent posts