Carpe diem  
  Front Page
Notice | Tag | Location | Guestbook | Admin   
 
'java'에 해당하는 글(4)
2008/10/28   [JAXB] 주소록 xmlparser 3. xml 쓰기, 읽기
2008/08/26   [JAXB] 주소록 xmlparser 1. JAXB 설치, xsd 컴파일 방법
2007/01/31   용어사전 - EJB, Session Bean, Entity Bean
2007/01/22   커스텀 태그(Custom Tag) 파일


2008/10/28 11:51 2008/10/28 11:51
[JAXB] 주소록 xmlparser 3. xml 쓰기, 읽기

** 까먹기 전에 정리하자.

프로젝트의 모든 내용을 까발릴 수는 없으니까 요약 정리함.
(Spring FrameWork + Flex 통신 중 사용)

1. 쓰기

/**
  * 참고 코드 : JAXB - 파일 읽기
  * @param input : xml 만들 리스트
  * @param pw: xml 쓸 곳 ( 여기서는 화면에 )
  * @return
  * @throws JAXBException
  */
 public void writeGroupXML(List input, PrintWriter pw) throws JAXBException, FileNotFoundException
 {
  ObjectFactory objFactory = new ObjectFactory();
  AddressBook ad = (AddressBook) objFactory.createAddressBook();
  AddressBook.Groups grps = objFactory.createAddressBookGroups();
 
  List grpList = grps.getGroup();

  for(int i=0; i<input.size(); i++)
  {
   GroupType grp = objFactory.createGroupType();
   GroupVO gv = new GroupVO();
   gv = (GroupVO)input.get(i);
   
   grp.setGroupNm(gv.getGroupNm());
   grp.setGroupSeqNo(gv.getGroupSeqNo());
   grpList.add(grp);
  }
 
  ad.setGroups(grps);
 
  JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
  Marshaller marshaller = jaxbContext.createMarshaller();
  marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
  marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, new Boolean(true));
  marshaller.marshal(ad, pw);
 }




2. 읽기

/**
  * 참고 코드 : JAXB - 파일 읽기
  * @param strFile 파일 경로 + 이름까지
  * @return
  * @throws JAXBException
  */
 public List readXMLFile(String strFile) throws JAXBException
 {
  JAXBContext jaxbContext = JAXBContext.newInstance("com.evelyn.msg.xml");
  Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
  AddressBook ad= (AddressBook)unmarshaller.unmarshal(new File(strFile));
   
  AddressBook.Buddies bds = ad.getBuddies();
  List bdt = bds.getBuddy();
 
  for(int i = 0; i < bdt.size(); i++)
  {
   BuddyType bt = (BuddyType)bdt.get(i);
  }
  return bdt;
 }



 /**
  * 참고 코드 : JAXB - XML 문자열 읽기
  * @param strXml XML 문자열
  * @return
  * @throws JAXBException
  */
 public List readXML(String strXml) throws JAXBException
 {
  if(strXml == "")
  {
   logger.info("null string");
   return null;
  }
 
  JAXBContext jaxbContext = JAXBContext.newInstance("com.evelyn.msg.xml");
  Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
  StringBuffer xmlStr = new StringBuffer(strXml);
  AddressBook ad = (AddressBook)unmarshaller.unmarshal(new StreamSource(new StringReader( xmlStr.toString())));
  AddressBook.Buddies bds = ad.getBuddies();
  List bdt = bds.getBuddy();
  return bdt;
 }


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
Tag : , ,


2008/08/26 14:13 2008/08/26 14:13
[JAXB] 주소록 xmlparser 1. JAXB 설치, xsd 컴파일 방법

1. 여기에 가서 Installation 을 다운 받는다
https://jaxb.dev.java.net/jaxb20-fcs/

2. 다운 받은 jar를 실행한다.

java -jar JAXB2_20060426.jar

3. 압축이 풀린 곳을 보면 bin/xjc.bat 가 있다. 커맨드창에서 해당 경로로 간 다음 다음처럼 명령어를 친다.

xjc -p <패키지명> <xsd명> -d <파일을 생성할 폴더명>


예> xjc -p com.evelyn.msg.xml msg.xsd -d .

4> com/evelyn/msg/xml 에 java 파일들이 생성된다.


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기
Tag : ,


2007/01/31 15:00 2007/01/31 15:00
용어사전 - EJB, Session Bean, Entity Bean
1. EJB(Enterprise Java Beans)

서버/클라이언트 모형을 갖춘 네트워크의 서버 측에서 운용되는, 자바 언어로 이루어진 프로그램 컴포넌트 작성용 구조. 클라이언트에게 빈이라는 프로그램 컴포넌트를 분배하는 자바빈(Java Beans) 기술로 되어 있고, 새로운 프로그램 컴포넌트의 변경이나 추가 시에 개별 컴퓨터를 갱신하지 않고 서버에서 변화를 제어할 수 있는 애플리케이션에서 재사용할 수 있는데, EJB 컴포넌트 수행을 위해서는 컨테이너라고 하는 특정 애플리케이션의 일부가 되어야 한다.
출처 : 네이버 용어사전

2. 세션 빈(Session Bean)

세션 빈이란 무엇일까? 한마디로 말해 비즈니스 로직을 포함하고 있고
① 재사용이 가능한 컴포넌트를 말한다. 세션 빈은 엔티티 빈과 같이
② 서로 다른 빈간의 상호작용이 가능하며
③ 워크플로우(Workflow)를 표현하고나 특정 과제를 구현하는데 유용하게 쓰인다. 엔티티 빈이 공유된 데이터를 표현하는 것이라면 세션 빈은
④ 공유된 데이터를 액세스 하는 역할을 한다. 이것은 데이터를 입력하고 수정, 삭제, 조회하는데 있어서 세션 빈을 사용할 수 있다는 것을 의미한다. 세션 빈은 데이터베이스에 접근할 때 엔티티 빈을 통하여 접근한다. 그리고 엔티티 빈과 동일한 비즈니스 로직을 구현하고 있지만 세션 빈은
⑤ 워크플로우 컴포넌트로써 엔티티 빈과는 별개의 목적으로 비즈니스 로직을 구현한다. 엔티티 빈간에 어떤 특정한 작업을 수행하기 위해서 세션 빈은
⑥ 어떻게 상호 작용이 될 것인지를 관리하며
⑦ 데이터베이스에는 저장되지 않는다는 점이 특징이다. 또 세션 빈은 클라이언트와 동고동락을 같이 하는 관계를 가지며
⑧ 클라이언트에 종속적이다. 즉, 클라이언트가 종료되면 세션 빈도 종료된다.

3. 엔티티 빈(Entity Bean)

엔티티 빈이란 과연 어떤 것일까? 한 마디로 말해
① 데이터를 객체화하여 재사용이 가능한 컴포넌트를 말한다. 데이터를 객체화 한다는 것은 개발자들이 데이터에 접근하고 변경하는 방법이 보다 단순하고 쉬워진다는 것을 의미한다. 객체화 된 데이터를
② 비즈니스 객체 또는 현실 세계의 객체라고 하며 이 객체는
③ 영속성을 가진 관계형 데이터베이스에 저장이 되며 데이터베이스에서 테이블의 한 레코드와 대응된다. 여기서 주의할 점은
④ 빈 인스턴스와 데이터베이스의 데이터가 동기화 되어야 한다는 것이다. 즉, 빈 인스턴스에서 새로운 변화가 일어날 때마다 데이터베이스도 같이 갱신이 되어야 하는 것이다. 만약 그렇지 않고 서로 동기화가 되지 않는다면 사용자들은 이전의 데이터에 대한 믿음과 신뢰를 가질 것이고 그것은 은행 등과 같은 많은 데이터를 짧은 시간에 실시간으로 다루는 곳에서는 크게 위험을 초래할 수 있기 때문이다. 따라서 동기화는 아주 중요한 문제 중 하나이다. 어땠든 이러한 객체에 의한 저장은
⑤ 데이터에 대한 접근을 단순화하고 일관성이 있게 보장해주며
⑥ 개발자로 하여금 보다 편리하고 효율적인 개발을 가능하게 해준다.

출처 : Tong - I제로I님의 EJB통
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
Tag : , ,


2007/01/22 12:18 2007/01/22 12:18
커스텀 태그(Custom Tag) 파일

출처 : http://kr.sun.com/developers/techtips/e2004_02_27.html

JavaServer Pages (JSP pages)의 커스텀 태그는 HTML 태그와 유사하다. 하지만 커스텀 태그는 태그와 관련된 핸들러 클래스에 의해 런타임시에 텍스트 형식의 출력값으로 대체된다. 지난 테크팁인
Using Custom Tags에서 이와 같은 클래스의 생성방법에 대해 이야기했다. 이번달의 첫번째 팁은 커스텀 태그를 구현하는 더 새롭고 쉬운 방법을 설명한다.

JSP 2.0이전에는 커스텀 태그를 생성하려면 자바 태그 핸들러 클래스로 구현하는 것이 유일한 방법이었다. 또한 핸들러 클래스 개발자는 태그를 웹 컨테이너에게 설명하는 역할을 하는 TLD파일을 생성해야만 했다. 커스텀 태그의 힘은 강력하지만 이를 이용하려면 프로그래밍 스킬이 요구되고 JSP 페이지가 어떻게 HTML로 변환하는지를 확실하게 알고 있어야 한다.

JSP 2.0 태그 파일의 새로운 기능은 비개발자도 재사용이 가능한 커스텀 태그를 작성할 수 있게 할 뿐만 아니라 프로그래머도 더 쉽게 작업할 수 있도록 도와준다. JavaServer Pages Standard Tag Library (JSTL) 과 expression language (EL)으로 이루어진 JSP 2.0 구문을 이용하면, 자바 코드를 작성할 필요없이 커스텀 태그를 생성할 수 있다.

태그 파일은 JSP 페이지에서 재사용이 가능한 컴포넌트이다. 이를 사용하면 다음과 같은 이점이 있다.

  • Scriptlets을 숨기거나 제거하는데 사용될 수 있다.
  • 자르기와 붙이기가 아닌, 레퍼런스로를 이용하여 코드를 재사용가능하도록 만든다.
  • JSP 페이지를 작성하기 쉽고, 매우 논리적이며, 유지하기 쉽도록 만든다.
  • 비개발자에 의해 작성될 수 있다.
  • 태그 파일의 구성은 자바가 아닌 HTML에 더 가깝다. 따라서 JSP 페이지는 단일 언어로 작성된 것처럼 보인다.
  • 태그 파일은 하이 레벨 컴포넌트를 형성하기 때문에 생산성을 높이고 개발속도를 빠르게 한다.
  • 커스텀 태그에 의해 사용되는 TLD파일은 흔히 자동적으로 생성된다.
  • 현존하는 페이지를 리팩토링하기 위해 사용될 수 있다. 코드의 공통 부분은 애플리케이션 뷰간에 공유되는 태그 파일로 통합될 수 있다.

태그 파일이 커스텀 태그 핸들러 클래스를 완벽하게 대체하지는 못한다. 태그 파일은 재사용이 가능한 컨텐츠를 관련된 레이아웃과 프리젠테이션으로 캡슐화할 때 적합하다. 반면 커스텀 태그는 JSP페이지에서 애플리케이션 로직(logic)을 재사용할 때 더 효과적이다. 가령, 페이지 헤더와 풋터(꼬리말)는 태그 파일을 위한 최적의 애플리케이션이다. 이와 비교해서 JSTL의 커스텀 태그는 자바 언어 핸들러 클래스로서 구현된다.

태그 파일의 특징

태그 파일은 사실 태그 핸들러 클래스로 번역/컴파일된다. 태그 핸들러와 태그 핸들러 클래스의 단 한가지 다른 점은 태그 핸들러는 JSP 구문으로 쓰여지고 태그 핸들러 클래스는 자바 언어로 작성된다는 점이다.

JSP 2.0-compliant 컨테이너는 웹 아카이브 디렉토리인 WEB-INF/tags내에서 태그 파일을 찾게 된다. 태그 파일은 WEB-INF/lib의 JAR 파일안에 묶일 수도 있다. JSP 페이지를 구현할 때 웹 컨테이너가 태그 파일과 관련된 태그를 마주치게 되면, 태그 파일의 JSP컨텐츠 출력값은 계산되어서 응답 스트림에 포함되게 된다. 태그 파일은 애트리뷰트를 정의할 수 있고 JSP 2.0 expression language (EL)에 대한 접근이 가능하다. 또한 태그 파일은 실행이 완료된 후에도 존재하는 EL 변수들을 생성할 수 있다.

태그 파일은 애트리뷰트 지시어를 이용해서 애트리뷰트를 선언하게 된다. 다음은 이 팁의 샘플코드로부터 발췌한 예제이다. 태그 파일은 단일 애트리뷰트 지시어로 시작한다.

<%@ attribute name="format" required="false" %>

날짜를 생성하는 태그는 위의 라인을 이용해서 컨테이너에게 가능한 "format" 애트리뷰트를 찾으라고 명령한다. 필수 애트리뷰트일 경우에는 지시어의 "required" 애트리뷰트가 "true"로 설정된다. 이 지시어들은 전개시에 웹 컨테이너가 고유의 TLD 파일을 생성하도록 해준다.

태그는 애트리뷰트를 통해서 입력값을 받는다. 태그 파일에 의해 생성되는 출력 텍스트이외에도 태그는 EL변수를 생성함으로써 데이터를 "output" 할 수 있다. 태그 파일은 다음과 같이 값을 태그 파일이 호출되었던 페이지에 값을 리턴할 수도 있다.

  
<%@ variable name-given="filesincluded" scope="AT_END" %>

"name-given"은 태그가 수행된 후, 페이지내에 설정되는 변수의 이름을 제공한다. "AT_END"는 태그 파일이 완성되면 변수가 설정된다는 것을 말한다.

태그 파일 예제

이번 샘플 코드는 지난 2002/9월의 테크팁 "Using Custom Tags"에서 작성했던 커스텀 태그를 재구현하는 태그 파일을 포함하고 있다. 오리지널 태그는 다음 세 가지 중 한가지 방법으로 서버에 날짜의 포맷을 지정한다.

  • 만약 포맷이 설정되지 않았거나 비어있다면, 태그는 디폴트 포맷으로 날짜를 프린트한다.
  • 포맷 파라미터가 $사인으로 시작되면, 태그는 스트링의 나머지 부분을 환경 엔트리의 이름으로 사용한다. 태그는 지명된 환경 엔트리를 찾아서 그것의 값을 포맷으로 사용하게 된다.
  • java.text.SimpleDateFormat과 호환되는 "format" 파라미터가 포맷 스트링을 포함하고 있다면, 스트링은 날짜의 포맷을 지정하는데 쓰이게 된다.

태그 파일에 의해 지정된 태그는 약간 다르게 작동한다. 포맷 파라미터가 $으로 시작하면, 태그는 환경 엔트리 대신 서블릿 컨텍스트 초기화 파라미터를 찾는다. (JSTL 1.0의 expression language는 환경 엔트리를 액세스할 수 있는 빌트 인 서포트를 포함하지 않았다.)

샘플 태그 파일인 date.tag는 파일이 요구하는 애트리뷰트를 정의하는 몇몇 지시어로 시작한다. 또한 이 태그가 사용하는 다른 태그 라이브러리를 위한 namespaces를 식별해내기도 한다.

<%@ attribute name="format" required="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

날짜 태그 파일의 다음 블록은 포맷 스트링을 결정하기 위해 <c:choose>태그를
사용한다. <c:choose>는 JSP페이지에서 if/then/else기능을 선택하기 위한 태그이다.
처음 "when"구문은 포맷이 null이거나 비어있을 때 EL변수 "format"을 디폴트 값으로
설정하기 위한 것이다.

<c:choose>
<%-- If format is blank, set default --%>
<c:when test="${format == null or format == ''}">
<c:set var="format" value="EEEE, d MMMM yyyy 'at' kk:mm:ss z"/> </c:when> ...

"format"이 비어있는 상태가 아니라면, 그것은 "$"사인으로 시작하거나 또는 "$"으로 시작하지 않는다. 첫번째 경우에서, <choose> 태그의 <otherwise>절은 첫번째 "$"을 없애버리고 주어진 이름을 이용해서 "format" 변수의 값을 컨텍스트 파라미터의 컨텐츠로 대체하게 된다.

 
<c:otherwise>
<%-- Else if format starts with "$", look up in context param,
and set "format" to its value. --%>
<c:if test="${fn:substring(format,0,1) == '$'}">
<c:set var="format_name" value="${fn:substringAfter(format,'$')}"/>
<c:set var="format" value="${initParam[format_name]}"/>
</c:if>
<%-- Otherwise leave it as it is --%>
</c:otherwise>
</c:choose>

코멘트에 적혀있듯이, "format"이 "$"로 시작하지 않으면, 그것의 값은 변하지 않는다.
페이지의 이 지점에서, EL "format"변수의 값은 날짜의 포맷을 지정하기 위해 사용될 스트링으로 설정된다. useBean라인은 현재 시간을 나타내는 Date객체를 생성하고 fmt:formatDate 메소드는 이 날짜를 주어진 "format"에 설정하게 된다.

<%-- Now actually create and format the date --%>
<jsp:useBean id="now" class="java.util.Date"/>
<fmt:formatDate value="${now}" pattern="${format}"/>

이것으로 태그 파일이 완성되었다.
태그 파일을 이용하는 것은 더욱 간단하다. 샘플 페이지 DatePage.jsp 의 윗부분에 있는 지시어는 /WEB-INF/tags 디렉토리에 있는 모든 태그가 접두사 "mytags"를 이용해서 액세스 가능하다는 것을 말한다. 지시어는 다음과 같다.

    
<%@ taglib tagdir="/WEB-INF/tags" prefix="mytags" %>

자, 이제 JSP 태그 파일을 다른 커스텀 태그처럼 간단하게 사용할 수 있다. 샘플 페이지 DatePage.jsp에서 발췌한 코드이다.

   
The time and date at the server in the default format are <b><mytags:date/></b>.
<br>
The time zone at the server is <b><mytags:date format="zzzz"/></b>.<br>
The server date is <b><mytags:date format="M/d/yyyy"/></b>.<br>
The server time is <b><mytags:date format="hh:mm:ss a"/></b>.<br>

각각의 는 태그 파일을 호출하는 결과를 낳고, 태그는 서버에 해당 시간과 날짜를 출력하게 된다.

이 예제는 JSP태그 파일을 간단히 소개하는 것에 그친다. 사실 JSP태그 파일은 여기서 언급한 것 이상의 많은 옵션을 갖고 있다. JSP태그 파일에 대한 자세한 정보는 J2EE 1.4 튜토리얼의 "
Custom Tags in JSP Pages"장을 참고하기 바란다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
Tag : , ,


BLOG main image
Passionate, Crazy
 Notice
 Category
전체 (71)
여행 (22)
취미/여가 (8)
지식/공부 (28)
독서/감상 (6)
 TAGS
링크드리스트 PHP MP3 타이페이역 전시회 대만 경영 java FLEX md5 Dame Greg 펀드 애니 보고서 ASP.NET 증권 Mac 뉴스 후지쯔 무기력 북카페 방글라데시 길이 오타쿠 이라크 Spring Framework 친구 도전 와인 행복 이순신 VC++ 쭝샤오거리 홍수 닮은꼴 stripTags 태터스킨 MEDC 마우스 태터툴즈 프로그래머 Excel 영상 딴수이 wowpen KFC 여름휴가 시부야 여행 panda 에반게리온 101빌딩 태그 스타 구글애드센스 코끼리 pid 나눔 부산항 달력 비누 먹거리 용산사 O-fone 하고싶은것 아기 자작극 KC 스위스 여행준비 환형연결리스트 야경 자바 아이스쇼 고베 대만여행정보 쿼리문 개발 결혼식 도쿄 스린야시장 웹마케팅 댄스 일본여행 의미 3D 코코아 낙동강 개발툴 분양 한의원려 싸이월드 뷰티넷 노트북 부동산 화장품
 Calendar
«   2012/02   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      
 Recent Entries
[Hibernate] criteria or...
[Hibernate] 중복된 row...
[freemarker] 숫자 콤마 빼기
고베의 일품 야경을 늦게...
간사이 지역 여행 준비하기
object param 값
[FLEX] Renderer를 이용하...
아이폰 SDK - md5
NSString 문자열 길이를 U...
JSP Get 방식 한글 parame... (3)
 Recent Comments
get방식으로 받은 한글이...
데잇 - 2009
당연히 해봤죠 ~ ^^; 여...
euni - 2009
request.setCharacterEnco...
꼼즈 - 2009
궁금하던 정보 잘 얻고 갑...
해피포터 - 2008
나는 언제 성장하는 거냐?
SEAN。 - 2008
받아들이는 관점에 따라...
euni - 2008
성장이 맞는 것 같지만,...
euni - 2008
거럼 뭐가 메카지? ㅋㅋㅋ...
euni - 2008
종합선물세트 아닐까요 ㅎㅎ
ho - 2008
성장만화 아니었습니까?
SEAN。 - 2008
 Recent Trackbacks
 Archive
2011/10
2010/06
2010/03
2009/09
2009/06
 Link Site
소니톤/개발/애니/여행/e-...
지식보다 지혜를...
 Visitor Statistics
Total : 185885
Today : 7
Yesterday : 44
태터툴즈 배너
rss