by givingsheart 2014. 1. 2. 12:25

void ioWorker() throws IOException

{
1.스트림 연다.
2.작업한다. <-IO 익셉션 발생했을 경우
3.스트림 닫는다.
}

=> 생각해볼 점.. throws를 선언했음으로 익셉션에 대한 catch의 책임은 콜러측에 넘겼지만,

     익셉션 발생시 코드의 제어에 따르면 (catch or finally가 없다면) 제어가 바로 콜러측으로 복귀하기 때문에
     시스템 리소스를 열어서 워커가 작업 중이었다면.. 리소스 누수가 발생한다. 그럼으로 리소스 관련 작업을
     해줄때에는 throws 선언했다고 방심하지 말고.. 리소스를 어떻게 안전하게 해제할지를 고려해줘야한다.
     sol) try {} finally{} 사용!

 =>예외 발생시 필터스트림의 close()를 명시적으로 호출해 줘야하는 이유가 또있다. 예를 들어 버퍼드 필터스트림을 
    사용할 경우.. 실제로 print() 작업을 해줘도 실제로 파일에 기록을 하지 않고 내부의 버퍼에 담아둔다. 이것을 최종적으로
    타겟 소스로 보내는 작업은 flush()가 담당한다. 그럼으로 close() 또는 flush()를 사용해야 한다. (외부 i/o 접근은
    너무 느리고, 위험성이 있기에 최소화 한다.)  (cf) 채팅 프로그램의 경우엔 버퍼드필터스트림의 생성자에 
    boolean autoFlush 를 true로 한다)


*******************************************************************************************

dtd: xml문서의 구조를 레벨별로 나누어 관리할수 있다
schema: xml 문서가 더 복잡한 제약을 만족할수 있게 관리한다.

dom: xml 문서 전체를 한번에 메모리로 읽어와 프로그래밍을 통해 사용할수 있게 해준다.
sax: dom과는 달리 xml문서 전체를 한번에 메모리에 올리지 않고, 이벤트 중심으로 문서를 처리할수 있게 해준다.

xsl: xml문서를 스타일시트 타입으로 구성하기 위하 언어
xslt: xml문서를 또 다른 xml문서(브라우저에 출력하기 위한 html, 핸드폰등 무선기기에 출력하기 위한 wml등)로 변환
       하는 언어로, 주어진 xml문서의 구성요소를 추출해서 재배열하는등의 조작 메커니즘을 제공한다. 
       (xslt는 xml을 조작할때 xpath라는 언어를 사용한다. element와 같은 의미인듯?)

jsp페이지를 xml문서로 작성하는 것이 가능하다. 모든 jsp페이지는 xml문서로 표현된다.

xml의 지향점은 무엇인가?
*************************************************************************************

1.xml 파일 식별 관련 (dom스타일, sax스타일)

1.1  javax.xml.validation.SchemaFactory = newInstance("W3C XML Schema 1.0" or "RELAX NG 1.0")으로 원하는
                                                        타입을 결정해 스키마 객체 팩토리로 설정된후, (스키마란 용어는 class,inst
                                                        ance중 class라 생각하면 간단함.Schema newSchema()로 스키마 객체 
                                                        생성해줌.

1.2    javax.xml.validation.Schema = validator or validatorHandler생성
     
1.3    javax.xml.validation.Validator = void validate(Source source)로 해당 소스의 유효성 검증

        1.3.1  Source의 종류는
               a.javax.xml.transform.stream.StreamSource = 말 그대로 스트림으로 받게 되는 xml 패키지
                                                                          StreamSource(소스선택)와 StreamResult(구체 작업선택)

****javax.xml.trasform.Result 의 의미를 잘못 파악햇음! 말 그대로 transform 객체를 통해 변환 작업후 결과물을 담을
타겟의 의미임! (헷갈린 이유는 어제 노트계열 스트림, 필터계열 스트림의 데코레이터 패턴에 정신이 안드로메다로 날
아가서 인듯 **** 
                                                                          클래스로 구분됨

               b.javax.xml.transform.sax.SAXSource (simple app for xml )
                                                                = 마찬가지로 SAXSource와 SAXResult 클래스 + SAXTrans
                                                                   FormerFactory 클래스로 구성됨!
                                                                => XMLReader getXMLReader() , void setXMLReader() 등을 통해
                                                                   SAX 스타일의 스트림 관리

               c.javax.xml.trasform.dom.DOMSource (document object model)=
                                (1) DOM타입(노드를 이용한 트리구조)으로 데이터를 주고 받음
                                (2) XSLT와 관계성은 무엇인지 모르겠음! (제일 하단에 기술. xslt는 도큐먼트 언어 변환기임)
                                (3) javax.xml.Transformer 객체의 
                                     transform(Source xmlSourcr, Result outputTarget)을 사용해
                                     즉 소스를 선택하고, 수행할 작업을 결정해서 transformer객체를 통해 일을 시킴.
                                            Result = DOMResult,SAXResult,StAXResult,StreamResult 등이 있음.
                                    
                                                                      
                                생성자
                                (1)디폴트 생성자의 경우 내부적으로 DocumentBuilder.
                                    newDocument()를 사용해 빈상태의 DOM오브젝트 생성
                                (2)트리구조 임으로 DomSource(Node n)으로 생성 가능

                                주요메서드
                                (1)Node getNode()
                                (2)void setNode(Node n)
 
                                 javax.xml.parsers 패키지, org.w3c.com패키지, java.io패키지를 이용해 
                           xml파일을 DOM document 형식으로 다루기 
                                (1) DocumentBuilderFactory 객체 생성
                                (2) (1)에게서 DcumentBuilder 객체 생성
                                (3) (2)빌더가 제공하는 parse() 메서드를 사용해 파일스트림(xml)에서 Document 객체를 파싱
                                              (ex) Document d = docBulider.parse(new BufferedInputStream (new FileInputStream(.xml로 생성한
                                                     File객체)))
                                (4) d.getElementsByTagName("태그명")을 통해 NodeList 형 객체(Elements의 집합)에 
                                     받아옴
                                (5) NodeList 객체를 순회하면서 item(인덱스) 메서드를 통해 포함하고 있는 Element를 
                                     받아온후,
                                     (5-1) DocumentBuilder 객체의 org.jdom2.Element build(Element e)를 이용해 xml 파일의
                                             Element객체를 Document에서 쓰는 Element 객체로 변환 (Dom 형식으로 사용)

                                (6) (5)를 통해 얻어온 Elements 로서 이런 저런 작업을 수행후, 다시 xml로 파일에 기록해주기
                                (7) DOMSource source = new DOMSource(3에서 생성한 Document객체)를 통해
                                     Document 객체를 -> 파일 스트림 소스로 변환
                                (8) Source 관련 구체적 작업(필터)을 위해서  Transform 작업후 결과를 담기(타겟=dest) 위한 
                                     StreamResult 객체 생성
                                      (ex)StreamResult result = new StreamResult(new File( 경로 + 파일명.xml));
                                
                                (9) StreamSource , StreamResult를 가지고 실제 작업을 수행할 Transformer 객체 생성이 필요
                                     그럼으로 TransformerFactoy 객체를 생성해 Transformer 객체를 생성.                                       
                                (10) 스트림소스, 스트림이 어떤 작업을 할지 결정한 StreamResult(필터)를 Transformer 객체
                                      에게 매개변수로 전달해 작업 transform() =파일에 xml로 기록 시킴 


                                org.jdom2 패키지를 사용해 xml파일 기록하기(내가 썼던 방법)
                                (1) FileOutputStream 객체 생성, FileOutputStream(".xml")
           
                                (2) XMLOutputter 객체를 생성. 

                                (3) XMLOutputter 객체의 초기화를 위해 Fomat 객체 생성
                                     (3-1) 포맷 객체에 setEncoding("UTF-8"),setLineSpeparator(),
                                             setTextMode() 등으로 출력할 파일의 포맷(속성)결정
                                     (3-2) setFormat() 을 통해 XMLOutputter 객체 초기화 

                                (4) 내가 구성했거나, 읽어왔던 Document 객체와 
                                     (1)에서 만든 파일 아웃풋 스트림 객체를 XMLOutputter 객체에
                                        게 매개변수로 전달
                               
                                (5) 아웃풋객체의 output()메서드를 이용해 도큐먼트->xml로 출력 
                                     작업을  수행


                                 또다른 방법은 무얼까? XMLEncoder 클래스, XMLDecoder 클래스 확인 필요!


               d.StAXSource = 
                                  (1) StAX 리더(XMLStreamReader, XMLEventReader)의
                                       형식의 XML Source 홀더로서 기능한다.
                                  (2) Source를 받아들이는 모든 케이스, Transformer나
                                       입력으로서 Source를 받아들이는 Validator로 사용가능.
                                  (3) 마찬가지로 Source, Result 클래스가 존재한다.
                                     
                                  생성자
                                  (1) StAXSource(XMLEventReader x)
                                  (2) StAXSource(XMLStreamReader x)

                                  주요 메서드
                                  (1)XMLEventReader getXMLEventReader()
                                  (2)XMLStreamReader getXMLStreamReader()


XSLT(Extensible Stylesheet Language Transformations)는 XML 문서를 다른 XML 문서로 변환하는데 사용하는 XML 기반 언어이다. W3C에서 제정한 표준으로 XML 변환 언어를 사용하여 XML 문서로 바꿔주며, 탐색하기 위해 XPath를 사용한다.

원본 문서는 변경되지 않으며, 원본 문서를 기반으로 새로운 문서가 생성된다.[2] 새 문서는 표준 XML 문법 또는 HTML, 일반 텍스트 형식으로 출력된다.[3] XSLT는 XML 데이터를 웹 페이지로 표시하기 위해 HTML 또는 XHTML 문서로 변환할 때 자주 사용된다. 변환은 클라이언트나 서버에서 동적으로 수행되거나, 퍼블리싱 단계에서 수행되기도 한다. XML을 PDF,PostScriptAWTPNG와 같은 다양한 형태로 바꿀 수 있는 XML-FO로 변환할 때도 사용한다. XSLT는 일반적으로 서로 다른 XML 스키마를 사용하는 XML 메시지를 변환하거나, 하나의 스키마 안에서 문서를 변경하기 위해 사용한다(예: 메시지에서 불필요한 부분 삭제).


Transformer 클래스와 동일한 역할 아닌가? XMLOutputter,Inputter 클래스도..





by givingsheart 2014. 1. 1. 15:54
by givingsheart 2014. 1. 1. 15:52

개략적인 이해만 하고 바로 실전 적용. (공부는 목적이 아닌, 수단!)

 

http://blog.naver.com/PostView.nhn?blogId=ljapc&logNo=30038952543&parentCategoryNo=7&viewDate=&currentPage=1&listtype=0



내툴에서 데이터들을 xml 파일 형식을 이용해 관리하려던 고민중에.. 내 툴의 추후 확장성을 고민해 클래스 모델을

설계하던중.. javax.xml.parser 패키지를 살피던중 validationProvider 인가 클래스의 명세를 보니 SAX를 지원하기 위한

클래스란 설명에 simple app for xml 를 검색중, sax과 약간 구분되는 개념인 dom에 접근하게 되었다.  


그리하여 xml DOM(document ojbect model) 이라는 개념을 접하게 되었다.



기존에 내 툴의 경우 확장성을 위해 상속 +  (타입 구분 + 리스트 구조)로서 구현하려 했었고

class DataType (RootElement로 Element 타입을 상속 or 포함 중 포함하려 했다.) 

{

I/O 클래스

Draw 클래스

Parser 클래스

}


class ConfigData extends DataType

{

   List<ConfigDataType> childs; 

}


class ImageData extends DataType

  enum Type

  {

  ConfigData,

  ImageData

  }

   List<ImageDataType> childs; 

...


 interface ConfigDataType

{

  enum Type

  {

    DbConfigDataType,

    EtcConfigDataType

  }

}


class DbConfigData implements ConfigDataType

{

  List<DbConfigDataType> childs;

}


class EtcConfigData implements ConfigDataType{}

...


interface DbConfigDataType

{

  enum Type

  {

    ConnectionConfigData,

    QueryConfigData

  }

}


class DbConnectConfigData implements DbConfigDataType()

{

  List<DbConnectConfigDataType> childs;

}


class DbQueryConfigData implements DbConfigDataType()

{

   List<DbQueryConfigDataType> childs;

}


class DbConnectConfigDataType   

{

String[] defaultDataTable = {"oracle","parkTable","park","111111","xxx.xxx.xx:4324"} 

 enum Type

 {

  DbName,

  DbTableName,

  DbLoginId, 

  DbLoginPw,

  DbUrl

  }

}


class DbQueryConfigDataType 

{

   String[] defaultDataTable = {"INSERT INTO tableName VALUES(?,?,? attribute갯수)","SELECT *     

                                          FROM tableName WHERE id(특정속성)", "xxx", "xxxx"} 

 enum Type

 {

  DbInsert,

  Dbselect,

  ...l

  }

}



//위와 같은 처리가 내 문제였다. key에 value를 매핑하는 여러 자료구조(property,xml의 elements,map 등등)

//에 대한 이해가 없었기에.. 또한 쿼리문 같은 경우 조각 조각 분리해두고 입력 값에 따라 새롭게 조합을 해줘야 할것이다.




xml DOM의 경우 상속 + 트리(노드자료형) 구조로서 설계 되었다.


타입구분 + 리스트를 단순화 하면 트리 자료구조란걸 떠올리지 못했었다. 


http://translate.google.co.kr/translate?

hl=ko&sl=en&u=http://www.w3schools.com/dom/&prev=/search%3Fq%3Ddocument%2Bobject%2Bmodel%26newwindow%3D1%26espv%3D210%26es_sm%3D93




웹 문서 카테고리


1.css 


2.html , html5 , xml(dom+xslt)


3.java script


4.j query


5.asp(sql+aod), php(sql), jsp(servlet)


아래 사이트의 하단에 카테고리 구분되어 있음(약 한달후쯤 진행? 우선순위 wepService(jsp->servelt->db)->??)

http://translate.google.co.kr/translate?hl=ko&sl=en&u=http://www.w3schools.com/dom/&prev=/search%3Fq%3Ddocument%2Bobject%2Bmodel%26newwindow%3D1%26espv%3D210%26es_sm%3D93

by givingsheart 2014. 1. 1. 15:44

import org.jdom2.Document;

 

푸하하하하하하하하하하하하하ㅏ하하하하하하하하하하하ㅏ하

(완전 하드코딩, 막코딩 였지만.. 대만족 OTL)

 

 

xml파일 로딩을 위해선

javax.xml.parsers 를 연구해야 한다..

 

class documentBuilderFactory

class documentBuilder

class saxParserFactory

class saxParser

... 이것만 파면 가져올수 있다 gogo!!

 

그리고 막코딩한 툴의 설계를 변경할 필요가 있다.

특히 1.테이블 이름 입력 받아서 문자열 파싱 처리

2.쿼리를 체크박스 선택 외에도 텍스트 필드를 통해 입력할수 있게끔 처리(or 체크박스를 선택하면 자동으로 텍스트필드에

쿼리 구문 띄우기)

3.막코딩 전에한 설계대로 툴(프레임) + dbCon정보 입력용(Panel) + dbQuery 정보 입력용(Panel) + load/save 버튼용(Panel)

 =>3번은 툴app의 생성자가 현재 아주 더럽기 때문이고(그냥 메서드로 뺄까;;), 레이 아웃 매니저가 정말 짜증이 나기 때문이다.

(현재는 GridLayout을 사용중이고.. Flow,xxxBag,기타 등등 써봤지만.. 적응이 안된다. java.swing 으로 만들어볼까?

 


내가 하고 싶었던 것은.. 쉬운 쿼리를 만들고, 해당 쿼리들을 관리하기 쉽게 XML등으로 표현해주면.. 다른 사람들이 쓰고

관리하기 쉬울듯 하기 때문이었다. 나는 바른 방향으로 진행하고 있나? AWT 패키지로.. GUI를 구현중인데.. SWING 공부는?

by givingsheart 2014. 1. 1. 15:44

http://k.daum.net/qna/openknowledge/view.html?qid=40E32

 

 

내 오라클 계정을 웹을 통해 접근할때 해당 웹페이지 소스코드 -_-;;;;;;

설마.. 저런 노가다가 필요한건 아닐테지.. 분명히 쉽게 만드는 방법이 있을 것이다;;;

by givingsheart 2014. 1. 1. 15:36
| 1 |