티스토리 툴바


'개발노트'에 해당되는 글 1401건

  1. 2009/12/21 framework jpetstore 샘플 분석기
  2. 2009/12/21 Simplest Spring 3 Application, 초간단 Spring 3 어플
  3. 2009/12/21 내가 Prototype에서 jQuery로 옮긴 이유
  4. 2009/12/18 Paging.java 페이지 계산 및 링크 출력 클래스
  5. 2009/12/09 [Apache - Tomcat] 로드 밸런싱, 세션 클러스터링
  6. 2009/12/09 자바 String Util 들
  7. 2009/12/09 오라클 데이타딕셔너리
  8. 2009/12/08 Insert BLOG(Picture or Photo) Data Type Into Oracle Database
  9. 2009/12/08 Create a table in database
  10. 2009/12/08 Demo ResultSet Oracle
  11. 2009/11/27 SQL문 튜닝 개요
  12. 2009/11/26 html 소스 암호화
  13. 2009/11/26 롤링 스크립트
  14. 2009/11/25 오라클 드라이버 버전 및 크기
  15. 2009/11/24 MethodChain은 Ajax 라이브러리
  16. 2009/11/24 JavaScriptMVC
  17. 2009/11/24 google Closure Compiler (Labs)
  18. 2009/11/23 검색엔진에 검색안되게 하는법
  19. 2009/11/10 iis 405 erroe 나올때 url 을 post 방식으로 넘겨서 인식 못할때
  20. 2009/11/10 화면한줄에 나오게 하기. iframe 적용시
  21. 2009/11/06 google api 를 이용한 rss 서비스
  22. 2009/11/05 [[oracle_tablespace_copy
  23. 2009/11/05 imp시 tables 틀릴경우 ,10G DATAPUMP: REMAP TABLESPACE 기능
  24. 2009/11/03 install Subversive on Eclipse Ganymede
  25. 2009/10/31 리눅스 많은 파일 한번에 압축 풀기
  26. 2009/10/30 Tomcat class not found 문제
  27. 2009/10/30 Eclipse Galileo (3.5)버전에서 SVN (Subversive) 연동하기
  28. 2009/10/30 html 특수문자
  29. 2009/10/29 마우스 오버시 색상변경
  30. 2009/10/26 IE 전용 스크립트...EE,IE 둘다 가능하도록 변경 javascript (1)
  • jpetstore 설치하기 : Spring2.0 샘플에 포함된 jpetstore를 설치하고 테스트 해 본다.
  • jpetstore 에서의 Spring 초기 설정과 IoC : jpetstore 에서의 웹 애플리케이션을 위한 Spring 초기 설정과 간단한 IoC에 대한 설명
  • jpetstore 에서의 Spring MVC 설정 : jpetstore 에서의 Spring MVC 설정을 어떻게 하는지 알아본다. 그리고 간략하게 Spring MVC에서 HTTP Request를 처리하는 과정에 대해서 셋팅하는 것과 함께 살펴본다.
  • jpetstore 에서의 HandlerMapping : Spring MVC에서 HandlerMapping을 어떻게 사용하는지 jpetstore을 통해서 알아본다.
  • jpetstore 에서의 InternalResourceViewResolver : Spring MVC에서 InternalResourceViewResolver을 어떻게 사용하는지 jpetstore을 통해서 알아본다.
  • jpetstore 예제로 살펴보는 Spring MVC와 iBatis 연동 : "shop/viewCategory.do" 요청을 예제로 하여 Spring MVC(Controller)의 전체적인 처리 과정과 iBatis를 사용하여 연동한 Spring framework의 과정을 살펴본다.
  • 참고문헌

  • 출처 : http://www.javajigi.net/pages/viewpage.action?pageId=6962

    Posted by WebProgrammer 1010

    출처 : http://dogfeet.tistory.com/159

    Ioc.java

    view source
    print?
    01.import java.util.Calendar;
    02.import org.springframework.beans.factory.BeanFactory;
    03.import org.springframework.beans.factory.xml.XmlBeanFactory;
    04.import org.springframework.core.io.ClassPathResource;
    05.  
    06.public class Ioc {
    07.  
    08.    private Calendar myCalendar;
    09.      
    10.    public void setMyCalendar(Calendar cal) {
    11.        myCalendar = cal;
    12.    }
    13.      
    14.    @Override
    15.    public String toString() {
    16.        return "Ioc Class with " + myCalendar;
    17.    }
    18.      
    19.    public static void main(String[] args) {
    20.        System.out.println("Spring Study!");
    21.        BeanFactory bf = new XmlBeanFactory(new ClassPathResource("beans.xml"));
    22.        System.out.println(bf.getBean("ioc"));
    23.        System.out.println(bf.getBean("date"));
    24.    }
    25.}

    beans.xml

    view source
    print?
    01.<?xml version="1.0" encoding="UTF-8"?>
    04.       xsi:schemaLocation="
    07.  
    08.  
    09.    <bean id="calendar" class="java.util.GregorianCalendar" />
    10.      
    11.    <bean id="date" class="java.util.Date" />
    12.  
    13.    <bean id="ioc" class="Ioc">
    14.        <property name="myCalendar" ref="calendar" />
    15.    </bean>
    16.      
    17.</beans>

    library files

    • commons-logging.jar
    • org.springframework.beans-3.0.0.RC1.jar
    • org.springframework.core-3.0.0.RC1.jar

    execution

    view source
    print?
    1.$ javac Ioc.java -cp org.springframework.beans-3.0.0.RC1.jar:org.springframework.core-3.0.0.RC1.jar
    2.$ java -cp .:org.springframework.core-3.0.0.RC1.jar:org.springframework.beans-3.0.0.RC1.jar:commons-logging.jar Ioc
    3.Spring Study!
    4.Nov 10, 2009 5:49:14 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    5.INFO: Loading XML bean definitions from class path resource [beans.xml]
    6.Ioc Class with java.util.GregorianCalendar[time=1257842954691,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=14,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2009,MONTH=10,WEEK_OF_YEAR=46,WEEK_OF_MONTH=2,DAY_OF_MONTH=10,DAY_OF_YEAR=314,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=5,HOUR_OF_DAY=17,MINUTE=49,SECOND=14,MILLISECOND=691,ZONE_OFFSET=32400000,DST_OFFSET=0]
    7.Tue Nov 10 17:49:14 KST 2009
    Posted by WebProgrammer 1010
    이 글은 번역한 것입니다. 원문은 여기에서 확인하실 수 있습니다. 겸손한 자바스크립트를 구현하기엔 jQuery가 가장 적절하고 바람직하다는 생각에 옮겨봅니다. 저도 Quark씨처럼 당장의 편리함을 따른 것보다 jQuery의 철학을 따르는 것이 더 바람직하다고 생각합니다. 항상 디커플링을 지향하는 것이 생산성 문제를 개선하고 미래에 적응하는 것을 가능케 하기 때문입니다.

     오역된 부분이 있을 지도 모르겠습니다.-_-;; 교과서 영어가 아니라-_-;; 나름대로 의역을 하긴 했는데 어렵네요.

    ----여기부터는 번역입니다.

     jQuery는 겸손한(unobtrusive) 자바스크립트를 위한 자바스크립트 라이브러리다. jQuery는 태생적으로 Behavior driven development 방법론을 지향하고 CSS 셀렉터를 사용하여 HTML 문서를 훓는 방법(traversing)을 방법에 기반한다. 반면에 Prototype은 태생적으로 Class driven development를 지향하고 쉽게 자바스크립트 개발할 수 있도록 해준다. Prototype 라이브러리는 Ruby on Rails에서 아주 잘 지원되고 많은 헬퍼 함수들을 가지고 있다.

     세달 전에 마음을 jQuery로 굳히기까지 나는 항상 Prototype 라이브러리를 사용해왔다. jQuery은 나를 매우 고무시겼다. 여기에 그 이유가 있다.

      1. BDD(Behavior driven development)
      jQuery를 사용하면 CSS로 HTML 엘리먼트의 스타일을 정의하는 것 처럼 HTML 엘리먼트의 행동들을 분리하여 정의할 수 있다. 클릭했을 때 경고창을 띄우는 예제를 보자.

    view source
    print?
    1.$(element).click(function(){
    2.  alert("warning");
    3.});
      이제 복잡한 예제를 살펴보자. speciallinks 클래스들의 모든 엘리먼트에 다음과 같은 행위를 집어넣자.
        1. href를 "javascript:void(0);"로 변경하고
        2. 클릭시 로그를 남기고
        3. onhover시(mouse over시) 배경색을 변경한다.

    view source
    print?
    1.$("div.speciallinks").attr("href","javascript:void(0)")
    2.  .click(function() {console.log("div.speciallinks clicked");})
    3.  .hover(function(){$(this).addClass("hovered");},
    4.       function(){$(this).removeClass("hovered");});

      2. MVC + J
        MVC 프레임웍은 웹 개발 환경을 Model-View-Controller로 나누었다. MVC 프레임워크에서 뷰는 HTML, CSS, Javascript의 부분으로 나누어지고 GUI 개발은 이 세부분이 하나로 결합하여 완성된다. 게다가 Ruby on Rails에서의 Prototype 라이브러리는 HTML과 JavaScript도 함께 합쳐버린다(meshup). 뷰를 개발하면서 JavaScript를 분리하는 BDD 방법론을 따르려 한다면 jQuery가 매우 적절하다. 나는 Ajax에서 MVC + J가 매우 강력하다는 것을 깨닭았다.

        나는 JQuery를 사용하여 나의 HTML 파일을 매우 깨끗하게 만들었고 모든 JavaScript 코드를 .js에 넣음으로써 HTML 엘리먼트의 행위를 모두 .js 파일에 정의하였다.

      3. 액션 체인(Chaining of actions)
        액션 체인은 DRY 원칙을 따를 뿐만 아니라 JavaScript 코드의 가독성을 증가시킨다. 만약 엘리먼트에 오퍼레이션들을 삽입하려면 다음과 같이 할 수 있다.

    view source
    print?
    1.$("div.message").show()
    2.  .append("<P>Action has been executed successfully")
    3.  .addClass("flash");
    4.// 각 함수는 라인으로 구분하여 사용한다.
    5.</P>

        이 것은 jQuery의 모든 메소드가 query 객체를 반환하기 때문에 가능하다. 그리고 뒤따르는 메소드들이 선택된 HTML 엘리먼트에 체인 형식으로 적용된다.

       4. CSS 셀렉터 문제(CSS Selector rocks)
          CSS 셀럭터 HTML DOM을 사용하기에 매우 강력한 도구이다. jQuery는 HTML 문서의 엘리먼트를 식별하기 위해 CSS 셀러터를 이용하고 이를 위해 HTML 태그의 id 속성을 관리해야 하는 지루한 작업을 회피하게 해준다. 대부분의 id 속성은 CSS 셀렉터를 올바르게 사용하여 회피할 수 있다. Prototype의 $$ 함수는 CSS 셀렉터를 지원하지만 CSS 셀렉터의 능력을 모두 이끌어내지 못한다. 나는 Prototype에서 id 속성을 사용하는 것이 최선이라는 것을 알게 됐다.

       5. 엘리먼트의 존재 유무를 검사할 필요가 없다.
         프로토타입으로 액션으로 적용하기 전에 항상 엘리먼트가 존재하는지 확인해야 했다. 예를 들어 나는 사용자가 로그인 했을 때만 사용자가 명시한 내용을 보여주고 싶었다. 사용자가 로그인 했다면 렌더링된 페이지에 div{id='user-box'}같은 엘리먼트가 있다는 것을 검사해야 했다. 프로토타입에서는 그렇게 해야 했다.

    view source
    print?
    1.if ($('user-box')!=null) {
    2.    // jQuery에서는 이 if 블럭이 필요없다.
    3.    $("user-box").style.backgroundColor = "red";
    4.}


       6. Aids development process
         jQuery를 사용하면 HTML 코드가 간결해지고 거의 건드릴 필요가 없다. 나의 웹 디자이너는 쉽게 html과 stylesheet를 수정할 수 있고 Prototype 라이브러리를 몰라도 된다.

    예제들:
      여기에는 jQuery와 프로토타입의 차이점을 강조하는 몇 가지 예제가 있다(물론, 이 코드가 최상의 코드는 아니다).

    Example1:
     이 Tab 예제는 tabs 클래스에 속하는 3 개의 tab이 있고 id는 각각 tabs1, tabs2, tabs3이다(ids=>["tabs1","tabs2","tabs3"]). 사용자가 "show first tab" 링크를 클릭했을 때 #tab1만 보여진다.

     jQuery의 경우

    view source
    print?
    1.$("div.tabs").hide();
    2.$("div#tabs1").show();


        
      Prototype의 경우

    view source
    print?
    1.$$("div.tabs").invoke("hide");  // 이거
    2.$$("div.tabs").each(function(x){
    3.  Element.hide(x);
    4.});
    5.// 그리고 다음과 같은 코드로 마무리한다.
    6.$("tabs1").show();


    Example2:
    엘리먼트의 CSS를 수정하는 예제

      jQuery의 경우

    view source
    print?
    1.$("#user-box").css("background-color","red")


      Prototype의 경우    

    view source
    print?
    1.var a = $("user-box");
    2.a.style.cssText += "background-color:red;";

    Remy Sharp의 발표자료에서 다른 예제들도 볼 수 있다. http://ajaxian.com/archives/prototype-and-jquery-a-code-comparison.

    Prototype이 좋은 이유
      1. Ajax 요청에서 div의 내용이 부분적으로 변경돼야 할때 JavaScript 행위는  activated/reactivated돼야 한다. jQuery에서는 이를 위한 많은 코드를 만들지 않아도 된다. 하지만 나는 Ajax로 로드된 이 부분을 항상 마음속으로만 새겨야 한다. Prototype에서는 로드된 HTML 엘리먼트들에 관련된 JavaScript 코드가 포함된다.
      2. Ruby on Rails의 Prototype 헬퍼들은 정말 대단하고 JavaScript와 Ajax를 만들때 많은 부분에서 매우 편리하다.
      3. Prototype은 자바스크립에서도 Ruby같은 문법을 사용할 수 있게 해준다. 개발을 쉽고 빠르게 할 수 있도록 배열, 객체 등의 기능을 변경해준다.
      4. jQuery에서는 JavaScrpt 파일이 모두 다운로드되고 DOM 생성된 후에만 엘리먼트의 행위를 사용할 수 있다. 연결이 느릴 때는 기다려야만 하기 때문에 매우 고통스럽다.

    결론:
      jQuery와 Prototype은 둘 다 매우 굉장하다. 나는 더 적은 코드로 더 많은 일을 하면서 직관적이고 겸손하게 유지해야 한다는 jQuery의 철학이 큰 차이를 만든다고 생각한다. 그러나 나는 Prototype이 매우 그립다. jquery-rails가 통합되길 기다리고 있다. 결국 이 고지는 점령될 것이다. 나는 사람들이 이 변화를 감지하고 있다는 소식을 들을 때마다 기쁘다.

    ps> 이 두 라이브러리를 함께 사용하려면 여기를 보라.


    출처 : http://dogfeet.tistory.com/29
    Posted by WebProgrammer 1010
    개발노트/Java2009/12/18 15:11

    package com.jisan.common.util.page;

    public class Paging {

     private int totalCount;  
     private int currentPage;
     private int listLimit;
     private int pageLimit;

     private int totalPage;
     private int startPage;
     private int endPage;
     private int startNum;
     private int endNum;

     private String btnStart="";
     private String btnEnd="";
     private String btnListPrev="";
     private String btnListNext="";
     private String btnPageList="";
     private String btnListTenPrev= "";
     private String btnListTenNext= "";
     

     public Paging(int totalCount, int currentPage, String queryOption) {
      this.totalCount = totalCount;
      this.currentPage = currentPage;
      this.listLimit = 15;
      this.pageLimit = 5;
     }
     public Paging(int totalCount, int currentPage, String queryOption, int listLimit, int pageLimit) {
      this.totalCount = totalCount;
      this.currentPage = currentPage;
      this.listLimit = listLimit;
      this.pageLimit = pageLimit;
     }

     public PagingBean pagingProcess() throws Exception {

      PagingBean pb = new PagingBean();

      totalPage = (totalCount - 1) / listLimit + 1;
      startPage = ( (currentPage - 1) / pageLimit) * pageLimit + 1;
      endPage = startPage + pageLimit - 1;

      if (totalPage < endPage) {
      endPage = totalPage;
      }
      if (totalCount == 0) {
       totalPage = 0;
      }

      startNum = (currentPage - 1) * listLimit;
      endNum = listLimit;

      //제일 처음 페이지로.
      if (currentPage > 1) {
       btnStart = "<a href=\"javascript:go_Page('1')\"><img src=\"/spi/images/board/pag_rr.jpg\" border=\"0\" class=\"m_lr2\" /></a>&nbsp;";
      } else{
       btnStart = "<a href=\"#\"><img src=\"/spi/images/board/pag_rr.jpg\" border=\"0\" class=\"m_lr2\" /></a>&nbsp;";
      }


      //바로 이전 페이지 목록으로. (예: 이전 10 페이지로)
      if (currentPage > pageLimit) {
       int prevListPage = startPage - 1;
       btnListPrev = "<a href=\"javascript:go_Page('"+prevListPage+"')\"><img src=\"/spi/images/board/pag_r.jpg\" border=\"0\" class=\"m_lr5\" /></a>&nbsp;";
      } else{
       btnListPrev = "&nbsp;";
      }

      //페이지 목록
      btnPageList = "";
      for (int i = startPage; i <= endPage; i++) {
       if (currentPage == i) {
        btnPageList += "<b><a href=\"#\" align=\"center\" valign=\"middle\" class=\"text_05\">" + i + "</a></b>";
       } else {
        btnPageList += "<a href=\"javascript:go_Page('"+i+"')\" align=\"center\" valign=\"middle\" class=\"text_05\"> " + i + "</a>";
       }
       if (i < endPage) {
        btnPageList += "<img src=\"/spi/images/board/icon_pagingdot.jpg\" class=m_lr2>";
       }
      }

      //바로 다음 페이지 목록으로. (예: 다음 10 페이지로)
      int nextListPage = endPage + 1;
      if (nextListPage <= totalPage) {
       btnListNext = "&nbsp;<a href=\"javascript:go_Page('"+nextListPage+"')\"><img src=\"/spi/images/board/pag_f.jpg\" border=\"0\" class=\"m_lr5\" /></a>&nbsp;";
      } else {
       btnListNext = "&nbsp;";
      }

      //제일 마지막 페이지로.
      if (currentPage < totalPage) {
       btnEnd = "&nbsp;<a href=\"javascript:go_Page('"+totalPage+"')\"><img src=\"/spi/images/board/pag_ff.jpg\" border=\"0\" class=\"m_lr2\" /></a>";
      } else {
       btnEnd = "&nbsp;<a href=\"#\"><img src=\"/spi/images/board/pag_ff.jpg\" border=\"0\" class=\"m_lr2\" /></a>";
      }

      StringBuffer pageInfo = new StringBuffer();

      pb.setPageInfo(pageInfo.toString());

      StringBuffer pageHtml= new StringBuffer();


      pageHtml.append("<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">");
      pageHtml.append(" <tr>");
      pageHtml.append("  <td align=\"center\">" );
      pageHtml.append(   btnStart);
      pageHtml.append(   btnListPrev);
      pageHtml.append(   btnPageList);
      pageHtml.append(   btnListNext);
      pageHtml.append(   btnEnd);
      pageHtml.append("  </td>");
      pageHtml.append(" </tr>");
      pageHtml.append("</table>");

      pb.setPageHtml(pageHtml.toString());

      //페이징 처리 내용을 넘기기 위해 PagingBean에 처리한 값들을 담는다.
      pb.setTotalCount(totalCount);
      pb.setCurrentPage(currentPage);
      pb.setTotalPage(totalPage);
      pb.setStartPage(startPage);
      pb.setEndPage(endPage);
      pb.setStartNum(startNum);
      pb.setEndNum(endNum);
      pb.setBtnStart(btnStart);
      pb.setBtnEnd(btnEnd);
      pb.setBtnListPrev(btnListPrev);
      pb.setBtnListNext(btnListNext);
      pb.setBtnPageList(btnPageList);

      return pb;
     }

     public PagingBean pagingProcess2() throws Exception {

      PagingBean pb = new PagingBean();
     
     
     

      totalPage = (totalCount - 1) / listLimit + 1;
      startPage = ( (currentPage - 1) / pageLimit) * pageLimit + 1;
      endPage = startPage + pageLimit - 1;
     

      if (totalPage < endPage) {
      endPage = totalPage;
      }
      if (totalCount == 0) {
       totalPage = 0;
      }

      startNum = (currentPage - 1) * listLimit;
      endNum = listLimit;  
     

      //제일 처음 페이지로.
      if (currentPage > 1) {
       btnStart = "<a href=\"javascript:go_Page('1')\"><img src=\"/spi/images/board/button_start_be.gif\" border=\"0\" class=\"m_lr2\" /></a>&nbsp;";
      } else{
       //btnStart = "<a href=\"#\"><img src=\"/spi/images/board_img/button_start.gif\" border=\"0\" align=\"middle\" /></a>&nbsp;";
      }
     
     

      //이전 10 페이지
      int pretenpage = (currentPage/pageLimit-1)*10+1;
      if (pretenpage > 0) {
       btnListTenPrev += "<a href=\"javascript:go_Page('"+pretenpage+"')\"><img src=\"/spi/images/board/pag_rr.jpg\" border=\"0\" class=\"m_lr2\" /></a>&nbsp;";
      } else{
       //btnStart = "<a href=\"#\"><img src=\"/spi/images/board_img/button_start.gif\" border=\"0\" align=\"middle\" /></a>&nbsp;";
      } 


      //바로 이전 페이지 목록으로.
      //if (currentPage > pageLimit) {
      if (totalPage > 1) {
       int prevListPage = currentPage - 1;
       if(prevListPage < 1){
        //btnListPrev = "<a href=\"#\"><img src=\"/spi/images/board_img/button_pre.gif\" border=\"0\" align=\"middle\" /></a>&nbsp;&nbsp;&nbsp;&nbsp;";
       }else{
        btnListPrev = "<a href=\"javascript:go_Page('"+prevListPage+"')\"><img src=\"/spi/images/board/pag_r.jpg\" border=\"0\" class=\"m_lr5\" /></a>&nbsp;";
       }

      } else{
       btnListPrev = "&nbsp;";
      }

      //페이지 목록
      btnPageList = "";
      for (int i = startPage; i <= endPage; i++) {
       if (currentPage == i) {
        btnPageList += "<a href=\"#\" align=\"center\" valign=\"middle\" ><b>" + i + "</b></a>";
       } else {
        btnPageList += "<a href=\"javascript:go_Page('"+i+"')\" align=\"center\" valign=\"middle\">" + i + "</a>";
       }
       if (i < endPage) {
        btnPageList += "&nbsp;<img src=\"/spi/images/board/icon_pagingdot.jpg\" class=\"m_lr2\">";
       }
       if(endPage==1){
       }else{
        btnPageList += "&nbsp;";
       }
      } 

     
      //바로 다음 페이지 목록으로. (예: 다음 10 페이지로)  
      int nextListPage = currentPage + 1;
      if (nextListPage <= totalPage) {
       btnListNext = "<a href=\"javascript:go_Page('"+nextListPage+"')\"><img src=\"/spi/images/board/pag_f.jpg\" border=\"0\" class=\"m_lr5\" /></a>&nbsp;";
      } else {
       //btnListNext = "&nbsp;";
      }
     
      //다음 10 페이지
      int nexttenpage = (1+currentPage/pageLimit)*10+1;
      if (totalPage > nexttenpage) {
       btnListTenNext += "<a href=\"javascript:go_Page('"+nexttenpage+"')\"><img src=\"/spi/images/board/pag_ff.jpg\" border=\"0\" class=\"m_lr2\" /></a>&nbsp;";
      } else{
       //btnStart = "<a href=\"#\"><img src=\"/spi/images/board_img/button_start.gif\" border=\"0\" align=\"middle\" /></a>&nbsp;";
      } 

      //제일 마지막 페이지로.
      if (currentPage < totalPage) {
       btnEnd = "<a href=\"javascript:go_Page('"+totalPage+"')\"><img src=\"/spi/images/board/button_end_last.gif\" border=\"0\" class=\"m_lr2\" /></a>";
      } else {
       //btnEnd = "&nbsp;<a href=\"#\"><img src=\"/spi/images/board_img/button_end.gif\" border=\"0\" align=\"middle\" /></a>";
      }

      StringBuffer pageInfo = new StringBuffer();

      pb.setPageInfo(pageInfo.toString());

      StringBuffer pageHtml= new StringBuffer();


      pageHtml.append("<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">");
      pageHtml.append(" <tr>");
      pageHtml.append("  <td align=\"center\" >" );
      pageHtml.append(   btnStart);
      pageHtml.append(   btnListTenPrev);
      pageHtml.append(   btnListPrev);
      pageHtml.append(   btnPageList);
      pageHtml.append(   btnListNext);
      pageHtml.append(   btnListTenNext);
      pageHtml.append(   btnEnd);
      pageHtml.append("  </td>");
      pageHtml.append(" </tr>");
      pageHtml.append("</table>");


      pb.setPageHtml(pageHtml.toString());

      //페이징 처리 내용을 넘기기 위해 PagingBean에 처리한 값들을 담는다.
      pb.setTotalCount(totalCount);
      pb.setCurrentPage(currentPage);
      pb.setTotalPage(totalPage);
      pb.setStartPage(startPage);
      pb.setEndPage(endPage);
      pb.setStartNum(startNum);
      pb.setEndNum(endNum);
      pb.setBtnStart(btnStart);
      pb.setBtnEnd(btnEnd);
      pb.setBtnListPrev(btnListPrev);
      pb.setBtnListNext(btnListNext);
      pb.setBtnPageList(btnPageList);

      return pb;
     }
    }

    Posted by WebProgrammer 1010
    개발노트/Tomcat2009/12/09 13:28

    보통 톰캣으로 서비스 구축할 때 안정적으로 서비스하려면 한 서버에 톰캣을 4개 정도 구동시켜야 한다고 하던데 ㅎㅎ
    http://www.ibm.com/developerworks/kr/li ··· 61017%2F

    웹 개발자에게 있어 톰캣은 JSP를 배우거나 간단한 테스트를 하는 정도의 웹 컨테이너로 생각하는 경우가 많다. 하지만 근래 들어 기업 및 대형 포탈에서 상용 서비스를 위한 웹 컨테이너로서 톰캣을 선택해, 성공적으로 적용한 사례들이 늘고 있다. 톰캣에서 안정적인 웹 서비스를 제공하기 위해서 지원하는 기능은 5가지가 있다. 아파치 웹서버와 연동, 로드밸런싱, 세션 클러스터링, 데이터베이스 처리, 모니터링 및 관리 등이 그것이다.
    이 문서에서는 로드밸런싱과 세션 클러스터링 위주로 설명을 할 것이며, 다음에 기회가 된다면 다른 부분에 대해서도 자세히 알아보도록 하겠다.

    아파치 웹 서버와 톰캣의 연동

    일반적으로 정적인 페이지를 서비스할 때는 웹서버가 훨씬 더 좋은 성능을 발휘한다. 또한 이렇게 역할 분담을 함으로 톰캣에 가중되는 부하를 줄여주는 효과도 얻을 수 있다. 아파치웹서버와 톰캣을 연동하는 것을 일반적으로 ‘커넥터(Connector)'라고 부르며, 여기에는 WARP 커넥터, JK 커넥터 그리고 JK2 커넥터가 있다. 이중에서 WARP와 JK2는 공식 커넥터에서 제외되었고 현재 남아 있는 것은 JK 커넥터뿐이다. 그럼 먼저 JK 커넥터를 이용해서 아파치 웹서버와 톰캣을 연동해 보도록 하겠다.
    아파치 웹사이트에서 바이너리 혹은 소스 코드를 다운로드 받도록 하자. 유닉스 혹은 리눅스는 mod_jk.so이며 윈도우용은 mod_jk.dll이다. 이 파일을 아파치 웹서버의 modules 디렉토리에 저장한다(주의, 아파치 웹서버를 컴파일해서 사용하는 경우는 컴파일시에 DSO 기능이 가능하도록 설정해줘야 한다). 저장을 한 후에 아파치 웹서버에 해당 모듈을 인식시켜야 하며 아파치 웹서버의 httpd.conf 파일에 다음 내용을 추가하도록 하자.

    리스트 1. httpd.conf

            ...
    LoadModule jk_module modules/mod_jk.so    # 모듈 추가
    JkWorkersFile "conf/workers.properties"   # JK 설정 파일 위치 및 이름
     
    JkLogFile "logs/mod_jk.log"               # JK에 대한 로그 파일 위치
    JkLogLevel info                           # 로그 레벨 지정
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"   # 로그 시간 포맷 지정
    JkRequestLogFormat "%w %V %T"             # 로그 내용 포맷
    JkMount /* loadbalancer                   # URL 링크 -> 모든 요청을 톰캣으로 지정
    JkMount /servlet/* loadbalancer           # URL 링크 -> servlet 요청을 톰캣으로 지정
    ...

    위와 같은 설정을 하게 되면 아파치 웹서버로 들어온 모든 요청을 톰캣으로 재전송 하게 된다. 만일 JSP와 서블릿만 톰캣에서 서비스를 하고 나머지는 아파치 웹서버에서 서비스 하고자 한다면 다음과 같이 수정하면 된다.

      
    JkMount /*.jsp loadbalancer                # URL 링크 -> *.jsp 요청을 톰캣으로 지정 
    JkMount /servlet/* loadbalancer           # URL 링크 -> servlet 요청을 톰캣으로 지정 

    httpd.conf에는 위의 내용이 전부이다. 그럼 이제 workers.properties 파일을 작성해 보도록 하겠다. 이 파일이 실제 로드밸런싱을 위한 설정이 되겠다.


    위로

    라운드 로빈 방식의 로드밸런싱 설정

    톰캣에서 제공하는 로드밸런싱은 정확히 톰캣 자체에서 제공하는 것이 아니라 아파치 웹서버와 연동되는 커넥터에 의해서 제공된다(로드밸런싱은 JK, JK2 커넥터에서만 제공된다). 현재는 라운드 로빈(Round Robin) 방식만이 제공되며 로드밸런싱에 대한 설정은 workers.properties 파일에서 정의하게 된다.

    리스트 2. workers.properties

      
    worker.list=tomcat1, tomcat2, loadbalancer
     
    worker.tomcat1.type=ajp13
    worker.tomcat1.host=localhost
    worker.tomcat1.port=11009
    worker.tomcat1.lbfactor=100
     
    worker.tomcat2.type=ajp13
    worker.tomcat2.host=localhost
    worker.tomcat2.port=12009
    worker.tomcat2.lbfactor=200
     
    worker.loadbalancer.type=lb
    worker.loadbalancer.balanced_workers=tomcat1,tomcat2

    worker라는 개념은 톰캣의 프로세스로 보면 된다. 즉 worker를 설정하는 구성 요소는 JK 커넥터를 연결하는 방식(JK는 ajp13을 이용한다), 톰캣이 실행되어 있는 IP 혹은 도메인, ajp13 서비스 포트, 그리고 작업 할당량이다. 여기서 주의 깊게 볼 것이 작업 할당량인데 로드밸런싱 시에 lbfactor라는 작업량의 비율을 보고 라운드 로빈 방식의 서비스를 제공하게 된다. 여기서는 tomcat1과 tomcat2를 1대 2의 비율로 작업량을 할당한 것이다.
    그럼 이제 남은 작업은 2개의 톰캣 프로세스를 실행시키는 것이다. 톰캣 프로세스를 여러 개 띄우는 방법은 2가지가 있다.

    • 톰캣을 2개 설치해서 기동시킨다. 이때 포트 충돌을 피하기 위해 서버 포트, AJP13과 HTTP 1.1 커넥터 포트 2개를 충돌되지 않게 재정의 한다.
    • 하나의 톰캣에 2개의 서비스를 정의하고 톰캣을 기동시킨다. 이때 AJP13과 HTTP1.1 커텍터 포트 2개를 충돌되지 않게 재정의 한다.

    먼저 2개의 바이너리를 설치했다고 가정하면 각각의 톰캣은 다음과 같은 형태의 server.xml 파일로 적용해 준다.

    리스트 3. server.xml

    리스트 4. server.xml

    리스트 3은 tomcat1의 환경 설정이고 리스트 4는 tomcat2의 환경 설정이다. 두 환경 설정의 차이는 3개의 포트번호와 태그의 jvmRoute 속성이다. 태그의 포트는 톰캣을 종료 시키는 작업을 할 때 사용하는 것이며 태그의 포트들은 아파치를 통하지 않고 직접 톰캣에 접속할 경우와 아파치와 연계하여 JK 커넥터와 연동할 때 사용하는 포트이다. 마지막으로 태그는 JK 커넥 터에서 로드밸런싱을 수행할 때 해당 값을 구분자로 활용하게 되는데 이 값을 반드시 다른 톰캣 프로세스와 다른 이름으로 지정해야 한다. 지금까지의 환경 설정은 하나의 아파치 웹서버와 두 개의 톰캣 간의 연계를 위한 것이며 톰캣은 동일한 하드웨어 장비에 설치되어 있다는 가정하에 적용한 것이다. 만일 각각의 톰캣이 서로 다른 하드웨어에 존재한다면 jvmRoute명만 다르게 하고 포트명은 동일해도 상관이 없다. 하지만 만일 하나의 장비에 4개의 톰캣 프로세스를 실행시키고 로드밸런싱을 하려고 한다면 어떻게 될까? 톰캣을 4번 설치하고 각각의 환경 설정 파일을 수정해 주어야 할까? 만일 필요한 환경 설정 내용이 변경된다면(예를 들어 JNDI Resource 정보) 모두 운영자가 환경 설정 파일을 수정해 주어야 할까? 다행히도 톰캣에서는 하나의 바이너리에 여러 개의 프로세스가 뜨도록 할 수 있다. 톰캣의 server.xml 태그는 다음과 같은 구조를 가지고 있다.

    --> --> --> -->

    여기서 Server 태그는 유일해야 하며 Server 태그 밑에는 여러 개의 태그가 올 수 있다. 여기서 말하는 태그가 바로 하나의 톰캣 프로세스가 된다. 만일 2개의 태그를 정의했다면 2개의 프로세스가 구동되는 것이다. 리스트 5는 이렇게 구현한 환경 설정 파일이다.

    리스트 5. server.xml

    리스트 5는 하나의 톰캣 바이너리를 통해 2개의 프로세스를 실행시키는 것이다. 이렇게 하면 환경 설정의 편리성을 가져올 수 있지만 특정 서비스만 실행하거나 종료 시키는 것은 아직 지원되지 않는다. 즉 모든 서비스가 동시에 실행되거나 혹은 동시에 종료되는 것을 의미한다. 이런 점을 잘 판단해서 두 가지 형태의 환경 설정 중 하나를 선택하면 되겠다.
    지금까지는 로드밸런싱에 대해 알아보았다. 위의 환경설정을 가지고 테스트를 하다 보면 한가지 문제가 발생한다. 예를 들어 어떤 사용자가 tomcat1을 이용해서 쇼핑몰 서비스를 받고 있다가 tomcat1이 비정상 종료를 하게 되었다. 이때 사용자가 웹 페이지를 요청하게 되면 아파치 웹서버는 tomcat1이 종료된 것을 인지하고 그 이후부터 서비스를 tomcat2로 요청하게 된다. 하지만 tomcat1에 저장되어 있던 쇼핑바구니 정보 즉 세션 정보는 사라진 상태다. 즉, 서비스는 유지되지만 사용자는 다시 이유도 모르게 처음부터 쇼핑 항목들을 등록해야 하는 문제를 가지게 된다. 이제부터는 이런 문제를 해결할 수 있는 톰캣 프로세스 간의 세션 정보 공유에 대해서 알아보겠다.


    위로

    세션 클러스터링 설정

    클러스터링은 톰캣 5.x 버전부터 지원이 되고 있지만 아직은 초기 단계이고 세션 클러스터링만이 제공되고 있는 수준이다. 기능이 많이 부족하긴 하지만 로드밸런싱과 더불어 사용할 경우에는 좀 더 안정적인 서비스를 제공할 수 있다. 작업을 해주어야 할 것은 다음과 같다.

    • server.xml에 태그 정의
    • 웹 어플리케이션의 web.xml에 태그 추가
    그럼 server.xml에 설정해 보자. 태그는 태그의 하위에 정의해 주면 된다. 즉 여러 개의 호스트(예를 들어 가상 호스트) 를 설정했다면 각각의 경우에 맞게 설정해 주어야 한다. 여기서는 tomcat1과 tomcat2가 동일한 하드웨어에 별도의 바이너리 형태로 설치되어 있다고 가정하고 진행하겠다.

    리스트 6. server.xml

    ... ...

    리스트 6은 tomcat1의 server.xml에 적용한 태그이다. 이 내용은 태그 사이에 위치하게 된다. 태그 사이에는 , , 라는 3개의 태그가 위치하는데 은 멤버 그룹을 정의하는 것으로 해당 값이 동일한 모든 톰캣 프로세스는 클러스터로 묶이게 된다. 는 클러스터 그룹에서 보내오는 메시지와 세션 정보 등을 받아오는 것이며 는 자신의 세션 정보 및 메시지를 전송하는 것이다. 위의 내용을 tomcat2의 server.xml에 Receiver 태그의 tcpListenPort 값을 4002로 변경해서 적용하도록 하자.


    위로

    웹 어플리케이션 작성을 통한 테스트

    먼저 테스트를 위해서 간단한 웹 어플리케이션을 작성하도록 하겠다. 여기서 웹 어플리케이션 이름은 lbtest라고 하겠다.

    리스트 7. index.jsp

    <%@ page contentType="text/html; charset=euc-kr" %>

    세션 JSP 테스트

    <% Integer ival = (Integer)session.getAttribute("sessiontest.counter"); if(ival==null) { ival = new Integer(1); } else { ival = new Integer(ival.intValue() + 1); } session.setAttribute("sessiontest.counter", ival); %> 당신은 이곳을 <%= ival %> 번 방문 했습니다.

    여기를 클릭하세요. 여기

    request 객체와 관련된 세션 데이터
    요청된 세션 ID : <%= request.getRequestedSessionId() %>
    쿠키로 부터 요청된 세션 ID 인가? : <%= request.isRequestedSessionIdFromCookie() %>
    URL로부터 요청된 세션 ID 인가? : <%= request.isRequestedSessionIdFromURL() %>
    유효한 세션 ID 인가? : <%= request.isRequestedSessionIdValid() %>

    작성된 웹 애플리케이션을 tomcat1과 tomcat2에 배포한다. 이때 가장 중요한 것이 web.xml에 반드시 이라는 항목을 넣어 야 한다. 그럼 이제 테스트를 해보도록 하자. 먼저 아파치 웹서버, tomcat1, tomcat2를 차례로 실행시켜 보자. 그리고 http://ipaddress/lbtest/index.jsp 접속하여 세션 객체를 생성해보자. 결과 화면은 그림 1과 같다. 여기서 요청된 세션ID를 보면 뒤에 어떤 톰캣에 접속한 상태인지를 알 수 있다. 이 화면상에서는 tomcat2에 접속한 세션이다. 그럼 tomcat2를 강제로 종료시켜 보도록 하자. 종료 후 화면에 보이는 “여기”를 계속 눌러 보자. 분명히 tomcat2가 종료되었음에도 불구하고 세션 값이 유지되고 있음을 알 수 있다. 이젠 반대로 tomcat2를 다시 실행시킨 후에 tomcat1을 종료시켜 보도록 하자. 역시 마찬가지로 세션 정보가 유지되는 것을 확인할 수 있을 것 이다.

    test 결과화면
    그림 1. 테스트 결과 화면

    이상으로 톰캣을 이용한 로드밸런싱과 세션 클러스터링에 대해서 알아보았다. 일반적으로 로드밸런싱과 클러스터링은 성능 향상이라는 측면과 안정성 확보에 그 목적을 가지고 있다. 물론 고가의 상용 웹 어플리케이션 서버에 비하면 많이 부족하고 하드웨어를 이용한 로드밸런싱과 클러스터링에 비하면 안정성이 떨어질 수도 있지만 저렴한 비용으로 최대의 안정성과 성능을 얻고자 한다면 한번쯤 시도해 볼만한 좋은 기능이라고 할 수 있다. 아무쪼록 리눅스, 아파치, 톰캣 그리고 오픈소스를 통해 즐거운 웹 어플리케이션 개발 환경을 느껴보기 바란다.


    위로

    참고 자료
    The Apache Tomcat Connector: http://tomcat.apache.org/connectors-doc/
    Clustering/Session Replication HOW-TO: http://tomcat.apache.org/tomcat-5.5-doc/cluster-howto.html


    출처 : http://tellus.tistory.com/63?srchid=BR1http%3A%2F%2Ftellus.tistory.com%2F63

    Posted by WebProgrammer 1010
    개발노트/Java2009/12/09 11:40

    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.PrintStream;
    import java.io.PrintWriter;
    import java.io.StringWriter;
    import java.io.UnsupportedEncodingException;
    import java.text.DecimalFormat;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.StringTokenizer;
    import java.util.regex.Pattern;

    import org.apache.commons.lang.StringUtils;


    /**
     * 공통 String Util
     * org.apache.commons.lang.StringUtils 상속후 필요 메소드 추가
     * 자세한 기타 자세한 스펙은 org.apache.commons.lang.StringUtils 참조
     * (url :
    http://jakarta.apache.org/commons/lang/api-release/org/apache/commons/lang/StringUtils.html)
     */
    public class StringUtil extends StringUtils {
     
     public static String nullToZero(String value){
      ;
      if(value == null || value.equals("")){
       value   =   "0";
      }
      return value;
     }
     
     
     
     /**
      * 문자열 좌측의 공백을 제거하는 메소드
      * @param  str 대상 문자열
      * @return trimed string with white space removed from the front.
      */
     public static String ltrim(String str){
      int len = str.length();
      int idx = 0;

      while ((idx < len) && (str.charAt(idx) <= ' '))
      {
       idx++;
      }
      return str.substring(idx, len);
     }

     /**
      * 문자열 우측의 공백을 제거하는 메소드
      * @param  str 대상 문자열
      * @return trimed string with white space removed from the end.
      */
     public static String rtrim(String str){
      int len = str.length();

      while ((0 < len) && (str.charAt(len-1) <= ' '))
      {
       len--;
      }
      return str.substring(0, len);
     }


     /**
      * String을
      * @param str
      * @return
      */
     public static String changeMoney(String str) {
      DecimalFormat df = new DecimalFormat("###,###");

      return df.format(parseInt(str));
     }

     /**
      * 파라미터로 넘어오는 String을 , 를 제거해준다.
      *
      * @param s java.lang.String
      * @return java.lang.String
      */
     public static String removeComma(String str) {
      String rtnValue = str;
      if ( isNull(str) ) {
       return "";
      }

      rtnValue = replace(rtnValue, ",", "");
      return rtnValue;
     }

     /**
      * 숫자 0이 넘어오면 ""로 대치
      * @param  int 대상 숫자
      * @return java.lang.String
      */
     public static String isOneNull(int num){
      if (num == 0) return "";
      else return Integer.toString(num);
     }
     
     /**
      * str이 null 이거나 "", "    " 일경우 return true
      * @param str
      * @return
      */
     public static boolean isNull(String str) {

      return (str == null || (str.trim().length()) == 0 );
     }

     public static boolean isNull(Object obj) {
      String str = null;
      if( obj instanceof String ) {
       str = (String)obj;
      } else {
       return true;
      }

      return isNull(str);
     }


     /**
      * null이 아닐때.
      * @param str
      * @return
      */
     public static boolean isNotNull(String str) {
      /**
       * isNull이 true이면 false
       * false이면 true
       */
      if( isNull(str) ){
       return false;

      } else {
       return true;
      }
     }

     /***
      * 널체크
      * @param obj
      * @return
      */
     public static boolean isNotNull(Object obj) {
      String str = null;
      if( obj instanceof String ) {
       str = (String)obj;
      } else {
       return false;
      }

      return isNotNull(str);
     }

     /**
      * 파라미터가 null 이거나 공백이 있을경우
      * "" 로 return
      * @param value
      * @return
      */
     public static String replaceNull(String value) {
      return replaceNull(value, "");
     }

     /**
      * Object를 받아서 String 형이 아니거나 NULL이면 ""를 return
      * String 형이면 형 변환해서 넘겨준다.
      * @param value
      * @return
      */
     public static String replaceNull(Object value) {
      Object rtnValue = value;
      if( rtnValue == null || !"java.lang.String".equals(rtnValue.getClass().getName())) {
       rtnValue = "";
      }

      return replaceNull((String)rtnValue, "");
     }

     /**
      * 파라미터로 넘어온 값이 null 이거나 공백이 포함된 문자라면
      * defaultValue를 return
      * 아니면 값을 trim해서 넘겨준다.
      * @param value
      * @param repStr
      * @return
      */
     public static String replaceNull(String value, String defaultValue) {
      if (isNull(value)) {
       return defaultValue;
      }

      return value.trim();
     }

     /**
      * Object를 받아서 String 형이 아니거나 NULL이면 defaultValue를 return
      * String 형이면 형 변환해서 넘겨준다.
      * @param value
      * @param repStr
      * @return
      */
     public static String replaceNull(Object value, String defaultValue) {
      String valueStr = replaceNull(value);
      if ( isNull(valueStr) ) {
       return defaultValue;
      }

      return valueStr.trim();
     }

     /**
      * Method ksc2asc.
      * 8859-1를 euc-kr로 인코딩하는 함수
      * @param str - String
      * @return String
      */
     public static String ksc2asc(String str) {
      String result = "";

      if (isNull(str)) {
       result = "";
      } else {
       try {
        result = new String( str.getBytes("euc-kr"), "8859_1" );
       } catch( Exception e ) {
        result = "";
       }
      }

      return result;
     }

     /**
      * Method asc2ksc.
      * euc-kr을 8859-1로 인코딩하는 함수
      * @param str - String
      * @return String
      */
     public static String asc2ksc(String str) {
      String result = "";

      if (isNull(str)) {
       result = "";
      } else {
       try {
        result = new String( str.getBytes("8859_1"), "euc-kr" );
       } catch( Exception e ) {
        result = "";
       }
      }

      return result;
     }

     /**************************************************************************************/
     /* parse method start */


     /**
      * String을 int형으로
      * @param value
      * @return
      */
     public static int parseInt(String value) {
      return parseInt(value, 0);
     }
     /**
      * Object를 int형으로
      * defaultValue는 0이다.
      * @param value
      * @return
      */
     public static int parseInt(Object value) {
      String valueStr = replaceNull(value);
      return parseInt(valueStr, 0);
     }
     /**
      * Object를 int형으로
      * Object가 null이면 defaultValue return
      * @param value
      * @param defaultValue
      * @return
      */
     public static int parseInt(Object value, int defaultValue) {
      String valueStr = replaceNull(value);
      return parseInt(valueStr, defaultValue);
     }
     /**
      * String을 int형으로
      * String이 숫자 형식이 아니면 defaultValue return
      * @param value
      * @param defaultValue
      * @return
      */
     public static int parseInt(String value, int defaultValue) {
      int returnValue = 0;

      if( isNull(value) ) {
       returnValue = defaultValue;
      } else if( !isNumeric(value) ) {
       returnValue = defaultValue;
      } else {
       returnValue = Integer.parseInt(value);
      }

      return returnValue;
     }

     /**
      * String을 long형으로
      * defaultValue는 0이다.
      * @param value
      * @return
      */
     public static long parseLong(String value) {
      return parseLong(value, 0);
     }

     /**
      * String을 long형으로
      * 잘못된 데이타 일시 return은 defaultValue
      * @param value
      * @return
      */
     public static long parseLong(String value, long defaultValue) {
      long returnValue = 0;

      if( isNull(value) ) {
       returnValue = defaultValue;
      } else if( !isNumeric(value) ) {
       returnValue = defaultValue;
      } else {
       returnValue = Long.parseLong(value);
      }

      return returnValue;
     }

     /**
      * Exception을 String으로 뽑아준다.
      * @param ex
      * @return
      */
     public static String stackTraceToString(Throwable e) {
      try {
       StringWriter sw = new StringWriter();
       PrintWriter pw = new PrintWriter(sw);
       e.printStackTrace(pw);
       return "------\r\n" + sw.toString() + "------\r\n";
       }catch(Exception e2) {
        return StringUtil.stackTraceToString2(e);
       }
     }
     /**
      * Exception을 String으로 뽑아준다.
      * @param ex
      * @return
      */
     public static String stackTraceToString2(Throwable e) {
      ByteArrayOutputStream b = new ByteArrayOutputStream();
      PrintStream p = new PrintStream(b);
      e.printStackTrace(p);
      p.close();
      String stackTrace = b.toString();
      try {
       b.close();
      } catch (IOException ex) {
       ex.printStackTrace();
      }

    //  return convertHtmlBr(stackTrace);
      return stackTrace;
     }

     /**
      * Html 코드에서 &#60;br&#62; 태크 제거
      * @param comment
      * @return
      */
     public static String convertHtmlBr(String comment) {
      String rtnValue = "";
      if( isNull(comment) ) {
       return "";
      }

      rtnValue = replace(comment, "\r\n", "<br>");

      return rtnValue;
     }


     /**
      * String 배열을 List로 변환한다.
      * @param values
      * @return
      */
     public static List changeList(String [] values) {
      List list = new ArrayList();

      if( values == null ) {
       return list;
      }
      for(int i=0,n=values.length; i<n; i++) {
       list.add(values[i]);
      }

      return list;
     }


     public static String[] toTokenArray(String str, String sep){

      String[] temp = null;

      try{
       StringTokenizer st = new StringTokenizer(str, sep);
       temp = new String[st.countTokens()];
       int index = 0;
       while(st.hasMoreTokens()){
        temp[index++] = st.nextToken();
       }
      }catch(Exception e){
       e.printStackTrace();
      }

      return temp;
     }
        public static String strip(String str, String str1){

         if(str == null || "".equals(str.trim())) return "";

         String temp = str;
      int pos = -1;
      while((pos = temp.indexOf(str1, pos)) != -1) {
       String left = temp.substring(0, pos);
       String right = temp.substring(pos + 1, temp.length());
       temp = left + "" + right;
       pos += 1;
      }
      return temp;
        }

        /**
      * Method ksc2asc.
      * euc-kr을 euc-kr로 인코딩하는 함수
      * @param str - String
      * @return String
      */
     public static String ksc2utf8(String str) {
      String result = "";

      if (isNull(str)) {
       result = "";
      } else {
       try {
        result = new String( str.getBytes("euc-kr"), "utf-8" );
       } catch( Exception e ) {
        result = "";
       }
      }

      return result;
     }

     /**
      * string에 있는 ', ", \r\n 를 HTML 코드로 변환한다.
      * @param str
      * @return
      */
     public static String changeQuotation(String str) {
      String rtnValue = str;
      rtnValue = replaceNull(rtnValue);
      rtnValue = replace(replace(replace(rtnValue, "'", "&#39;"), "\"", "&#34;"), "\r\n", "<br>");

      return rtnValue;
     }
     public static String changeQuotation(Object obj) {
      if( isStringInteger(obj) ) {
       return changeQuotation(String.valueOf(obj));
      }

      return "";
     }

     /**
      * 해당 Object가 String or Integer 이면 true
      * 아니면 false
      * @param obj
      * @return
      */
     public static boolean isStringInteger(Object obj) {

      boolean flag = false;

      if( obj instanceof String || obj instanceof Integer ) {
       flag = true;
      }

      return flag;
     }

     /**
      * 백분율을 구한다.
      * %는 빼고 값만 리턴
      * @param value
      * @param total
      * @return
      */
     public static String percentValue(int value, int total) {
      double val = Double.parseDouble(String.valueOf(value)) / Double.parseDouble(String.valueOf(total)) * 100;

      DecimalFormat df = new DecimalFormat("##0.0");
      return df.format(val);
     }

     


     /**
      *  XSS(Cross Site Scripting) 취약점 해결을 위한 처리
      *
      * @param sourceString String 원본문자열
      * @return String 변환문자열
      */
     public static String replaceXSS(String sourceString){
      String rtnValue = null;
      if(sourceString!=null){
       rtnValue = sourceString;
       if(rtnValue.indexOf("<x-") == -1){
        rtnValue = rtnValue.replaceAll("< *(j|J)(a|A)(v|V)(a|A)(s|S)(c|C)(r|R)(i|I)(p|P)(t|T)", "<x-javascript");
        rtnValue = rtnValue.replaceAll("< *(v|V)(b|B)(s|S)(c|C)(r|R)(i|I)(p|P)(t|T)", "<x-vbscript");
        rtnValue = rtnValue.replaceAll("< *(s|S)(c|C)(r|R)(i|I)(p|P)(t|T)", "<x-script");
        rtnValue = rtnValue.replaceAll("< *(i|I)(f|F)(r|R)(a|A)(m|M)(e|E)", "<x-iframe");
        rtnValue = rtnValue.replaceAll("< *(f|F)(r|R)(a|A)(m|M)(e|E)", "<x-frame");
        rtnValue = rtnValue.replaceAll("(e|E)(x|X)(p|P)(r|R)(e|E)(s|S)(s|S)(i|I)(o|O)(n|N)", "x-expression");
        rtnValue = rtnValue.replaceAll("(a|A)(l|L)(e|E)(r|R)(t|T)", "x-alert");
        rtnValue = rtnValue.replaceAll(".(o|O)(p|P)(e|E)(n|N)", ".x-open");
        rtnValue = rtnValue.replaceAll("< *(m|M)(a|A)(r|R)(q|Q)(u|U)(e|E)(e|E)", "<x-marquee");
        rtnValue = rtnValue.replaceAll("&#", "&amp;#");
       }
      }

      return rtnValue;
        }


     /**
      * 특정문자를 HTML TAG형식으로 변경하는 메소드.
      *
      * <xmp>
      * & --> &amp;
      * < --> &lt;
      * > --> &gt;
      * " --> &quot;
      * ' --> &#039;
      *-----------------------------------------------------------------
      * <option type=radio  name=r value="xxxxxxxx"> yyyyyyy
      * <input  type=hidden name=h value="xxxxxxxx">
      * <input  type=text   name=t value="xxxxxxxx">
      * <textarea name=msg rows=20 cols=53>xxxxxxx</textarea>
      *-
      * 위와 같은 HTML 소스를 생성할 때, xxxxxxx 부분의 문자열 중에서
      * 아래에 있는 몇가지 특별한 문자들을 변환하여야 합니다.
      * 만약 JSP 라면 미리 변환하여 HTML 전체 TAG를 만들거나, 혹은 아래처럼 사용하세요.
      *-
      * <option type=radio  name=r value="<%= StringUtil.translate(s) %>"> yyyyyyy
      * <input  type=hidden name=n value="<%= StringUtil.translate(s) %>">
      * <input  type=text   name=n value="<%= StringUtil.translate(s) %>">
      * <textarea name=body rows=20 cols=53><%= StringUtil.translate(s) %></textarea>
      *-
      * 또 필요하다면 yyyyyyy 부분도  translate(s)를 할 필요가 있을 겁니다.
      * 필요할 때 마다 사용하세요.
      *-
      * </xmp>
      *
      * @return the translated string.
      * @param str java.lang.String
      */
     public static String translate(String str){
      if ( str == null ) return null;

      StringBuffer buf = new StringBuffer();
      char[] c = str.toCharArray();
      int len = c.length;

      for ( int i=0; i < len; i++){
       if      ( c[i] == '&' ) buf.append("&amp;");
       else if ( c[i] == '<' ) buf.append("&lt;");
       else if ( c[i] == '>' ) buf.append("&gt;");
       else if ( c[i] == '"' ) buf.append("&quot;"); // (char)34
       else if ( c[i] == '\'') buf.append("&#039;"); // (char)39
       else buf.append(c[i]);
      }
      return buf.toString();
     }

       /**
        * String 앞 또는 뒤를 특정문자로 지정한 길이만큼 채워주는 함수    <BR>
        * (예) pad("1234","0", 6, 1) --> "123400"   <BR>
        *
        * @param    src  Source string
        * @param    pad  pad string
        * @param    totLen     total length
        * @param    mode     앞/뒤 구분 (-1:front, 1:back)
        * @return   String
        */
     public static String pad(String src, String pad, int totLen, int mode){
      String paddedString = "";

      if(src == null) return "";
      int srcLen = src.length();

      if((totLen<1)||(srcLen>=totLen)) return src;

      for(int i=0; i< (totLen-srcLen); i++){
       paddedString += pad;
      }

      if(mode == -1)
       paddedString += src; // front padding
      else
           paddedString = src + paddedString; //back padding

      return paddedString;
     }

     /**
      * 주어진 길이(iLength)만큼 주어진 문자(cPadder)를 strSource의 왼쪽에 붙혀서 보내준다.
      * ex) lpad("abc", 5, '^') ==> "^^abc"
      *     lpad("abcdefghi", 5, '^') ==> "abcde"
      *     lpad(null, 5, '^') ==> "^^^^^"
      *
      * @param strSource
      * @param iLength
      * @param cPadder
      */
     public static String lpad(String strSource, int iLength, char cPadder){
      StringBuffer sbBuffer = null;

      if (!isEmpty(strSource)){
       int iByteSize = getByteSize(strSource);
       if (iByteSize > iLength){
        return strSource.substring(0, iLength);
       }else if (iByteSize == iLength){
        return strSource;
       }else{
        int iPadLength = iLength - iByteSize;
        sbBuffer = new StringBuffer();
        for (int j = 0; j < iPadLength; j++){
         sbBuffer.append(cPadder);
        }
        sbBuffer.append(strSource);
        return sbBuffer.toString();
       }
      }

      //int iPadLength = iLength;
      sbBuffer = new StringBuffer();
      for (int j = 0; j < iLength; j++){
       sbBuffer.append(cPadder);
      }
      return sbBuffer.toString();
     }

     /**
      * 주어진 길이(iLength)만큼 주어진 문자(cPadder)를 strSource의 오른쪽에 붙혀서 보내준다.
      * ex) lpad("abc", 5, '^') ==> "abc^^"
      *     lpad("abcdefghi", 5, '^') ==> "abcde"
      *     lpad(null, 5, '^') ==> "^^^^^"
      *
      * @param strSource
      * @param iLength
      * @param cPadder
      */
     public static String rpad(String strSource, int iLength, char cPadder){
      StringBuffer sbBuffer = null;
       if (!isEmpty(strSource)){
       int iByteSize = getByteSize(strSource);
       if (iByteSize > iLength){
        return strSource.substring(0, iLength);
       }else if (iByteSize == iLength){
        return strSource;
       }else{
        int iPadLength = iLength - iByteSize;
        sbBuffer = new StringBuffer(strSource);
        for (int j = 0; j < iPadLength; j++){
         sbBuffer.append(cPadder);
        }
        return sbBuffer.toString();
       }
      }
      sbBuffer = new StringBuffer();
      for (int j = 0; j < iLength; j++){
       sbBuffer.append(cPadder);
      }
      return sbBuffer.toString();
     }

     /**
      *  byte size를 가져온다.
      *
      * @param str String target
      * @return int bytelength
      */
     public static int getByteSize(String str){
      if (str == null || str.length() == 0)
       return 0;
      byte[] byteArray = null;
       try{
       byteArray = str.getBytes("UTF-8");
      }catch (UnsupportedEncodingException ex){}
      if (byteArray == null) return 0;
      return byteArray.length;
     }
          /**
         * 긴 문자열 자르기
         * @param srcString      대상문자열
         * @param nLength        길이
         * @param isNoTag        테그 제거 여부
         * @param isAddDot        "..."을추가 여부
         * @return
         */
        public static String strCut(String srcString, int nLength, boolean isNoTag, boolean isAddDot){  // 문자열 자르기
            String rtnVal = srcString;
            int oF = 0, oL = 0, rF = 0, rL = 0;
            int nLengthPrev = 0;

            // 태그 제거
            if(isNoTag) {
                Pattern p = Pattern.compile("<(/?)([^<>]*)?>", Pattern.CASE_INSENSITIVE);  // 태그제거 패턴
                rtnVal = p.matcher(rtnVal).replaceAll("");
            }
            rtnVal = rtnVal.replaceAll("&amp;", "&");
            rtnVal = rtnVal.replaceAll("(!/|\r|\n|&nbsp;)", "");  // 공백제거
            try {
             byte[] bytes = rtnVal.getBytes("UTF-8");     // 바이트로 보관
             // x부터 y길이만큼 잘라낸다. 한글안깨지게.
             int j = 0;
             if(nLengthPrev > 0) while(j < bytes.length) {
              if((bytes[j] & 0x80) != 0) {
               oF+=2; rF+=3; if(oF+2 > nLengthPrev) {break;} j+=3;
                 } else {if(oF+1 > nLengthPrev) {break;} ++oF; ++rF; ++j;}
             }

             j = rF;

             while(j < bytes.length) {
              if((bytes[j] & 0x80) != 0) {
               if(oL+2 > nLength) {break;} oL+=2; rL+=3; j+=3;
                 } else {if(oL+1 > nLength) {break;} ++oL; ++rL; ++j;}
             }

             rtnVal = new String(bytes, rF, rL, "UTF-8");  // charset 옵션

             if(isAddDot && rF+rL+3 <= bytes.length) {rtnVal+="...";}  // ...을 붙일지말지 옵션
            } catch(UnsupportedEncodingException e){
             e.printStackTrace();
             return srcString;
            }

         return rtnVal;
        }
       
        /**
         * total과 success 로 % 구하고 소수점 1자리까지 계산
         * @param int success     
         * @param int total      

         * @return String %
         */
        public static String calculatePercent(int success,int total){
         String result   =  "0";
         
         if(total == 0){
           
         
         }else{
         
            Double tempSuccess  = new Double(success+".0");
            Double tempTotal    = new Double(total+".0");
            Double tempPercent   = new Double(100+".0");
         
            double cal =  tempSuccess.doubleValue()*tempPercent.doubleValue()/tempTotal.doubleValue();
         
          result = new java.text.DecimalFormat("#.#").format(cal);
         
         }
         
         return result;
        }

    }


    출처 : http://shonm.tistory.com/177?srchid=BR1http%3A%2F%2Fshonm.tistory.com%2F177

    Posted by WebProgrammer 1010
    개발노트/DataBase2009/12/09 11:34
    오라클 데이타딕셔너리

    All_all_tables : user가 access할수있는 모든 Table
    All_catalog : user가 access할수있는 모든 Table, Views, synonyms, sequence
    All_clusters : user가 access할수있는 모든 clusters
    less..
    All_col_comments : user가 access할수있는 모든 Table,Views에 대한 칼럼comments
    All_col_privs : user에게 또는 Public에게 허용된 모든 칼럼에 대한 권한.
    All_col_privs_made : user가 부여한 칼럼에 대한 권한.
    All_col_privs_recd : user에게 또는 Public에게 허용된 모든 칼럼에 대한 권한.
    All_coll_types : user가 access 할수 있는 모든 collection type
    All_cons_columns : 제약조건에 관련된 칼럼, access할수 있는 대한 정보
    All_constraints : access할수 있는 테이블에 대한 제약조건.
    All_db_links : user가 access 할수 있는 데이터베이스 link
    All_def_audit_opts : 오브젝트가 생성될때 적용될수있는 default오브젝트감사내용.
    All_dependencies : user가 access할수있는 오브젝트간의 dependencies(참조,link)
    All_directories : user가 access할 수 있는 모든 directories (owner 는 항상 sys)
    All_errors : user가 access할수있는 모든 objects(view,procedure,package, function,
    packagebody) 에 대한 에러.
    All_ind_columns : user가 access할수있는 테이블에 대한 인덱스의 칼럼.
    All_ind_partitions : user가 access할수있는 인덱스partition, partition에 대한
    storage매개변수, Analyze명령에 의해 결정된 partition통계.
    All_indexes : user가 access할수있는 테이블의 인덱스.
    이 view의 통계를 수집하기위해, Analyze명령을 사용한다.
    병렬partition인텍스탐색을 지원한다.
    All_labels : system labels 에 대한 Oracle server view.
    All_libraries : user가 access할 수 있는 모든 libraries.
    All_lobs : user가 access할 수 있는 모든테이블에 포함된 LOBs.
    All_method_params : user가 access할 수 있는 method와 그method의 parameter.
    All_method_results :
    All_nested_tables : user가 access할수있는테이블내의 Nested Table
    All_object_tables : user가 access할수있는테이블의모든정보.
    All_objects : user가 access할수있는objects(index partition,table partition,package,
    package body, trigger)
    All_part_col_statistics : user가 access할 수 있는 테이블partition에 대한 칼럼통계와
    막대그래프화된 정보.
    All_part_histograms : user가 access할수있는 테이블partition의 histograms에 대한
    histogram정보.
    All_part_indexes : user가 access할수있는 모든partition된 index의 partition정보.
    All_part_key_columns :user가 access할수있는 partition된 objects의 partition key
    칼럼에 대한정보
    All_part_tables : user가 access할수있는partition된 Table에 대한 partition정보.
    All_refresh : user가 access할수있는모든 refresh groups.
    All_refresh_children : user가 access할 수 있는 refresh groups 안의 모든objects
    All_refs : user가 access할 수 있는 칼럼중 REF칼럼과, REF속성.
    All_registered_snapshots : 모든 등록된 snapshots.
    All_sequences : user가 access할수있는 sequences.
    All_snapshot_logs : 모든 snapshot logs.
    All_snapshot_refresh_times : 모든 snapshot refresh times.
    All_snapshots : user가 acces할수있는 모든 snapshots.
    All_source : user가 access할수있는 모든 stored objects의 text source.
    All_synonyms : user가 access할수있는 모든 synonyms.
    All_tab_col_statistics : 'User_tab_columns' view안의 정보에대한 칼럼통계와 그래프정보
    All_tab_columns : user가 access할수있는모든 table, views, clusters에 대한 칼럼.
    이view를 활용하기위해서는 Analyze명령어를 사용한다.
    All_tab_comments : user가 access할 수 있는 모든 table, views에 대한 comments.
    All_tab_histograms : user가 access할수있는table, views에 대한 histograms.
    All_tab_partitions : user가 access할수 있는 각각의 테이블partition에 대한
    partition정보, storage parameter, Analyze명령에 의한

    통계정보등을 서술한다.
    All_tab_privs : user혹은 PUBLIC가 부여받은 오브젝트권한.
    All_tab_privs_made : user가 부여한 user권한과 오브젝트권한.
    All_tab_privs_recd : user 또는 PUBLIC이 부여받은 오브젝트권한.
    All_tables : user가 access할 수 있는 모든 테이블.
    Analyze명령으로 이 view의 통계를 얻을 수 있다.
    All_triggers : user소유의 trigger, user소유테이블의 trigger, 또는 user가
    CREATE ANY TRIGGER 권한을 갖고있다면, 모든 트리거에 대한 정보.
    All_trigger_cols : user소유의 trigger, user소유테이블의 trigger, 또는 user가
    CREATE ANY TRIGGER 권한을 갖고있다면, 모든 트리거에 대한 칼럼정보.
    All_type_attrs : user가 access할 수 있는 type의 attributes.
    All_type_methods : user가 access할수있는type의 methods.
    All_types : user가 access할 수 있는 type.
    All_updatable_columns : join view에서 update가능한 칼럼에 대한 정보.
    All_users : 데이터베이스의 모든 user에 대한 정보.
    All_views : user가 access할수있는view의 텍스트.
    Audit_actions : 감사추적type코드 정보.
    catalog : Oracle 5.0 version과의 호환정보를 포함한다.
    이view의 사용은 추천할만하지 못하다.
    cat : user_catalog 에 대한 synonym.
    chained_rows : ANALYZE LIST CHAINED ROWS 명령에 대한 default table.
    clu : user_clusters 테이블의 synonym.
    code_pieces : dba_object_size 와 user_object_size view를 create 시에 사용됨.
    code_size : dba_object_size 와 user_object_size view를 create 시에 사용됨.
    col : Oracle 5.0version 호환정보를 포함하고 있다.
    cols : user_tab_columns view 의 synonym.
    column_privileges : user가 부여한권한,부여받은권한, owner인권한,
    또는 PUBLIC에게 부여받은 권한에 대한 칼럼정보.
    Dba_2pc_neighbors : 진행중인 트랜잭션에 대한 연결 및 종료에 대한 정보.
    Dba_2pc_pending : recovery를 기다리는 분산된트랜잭션에 대한 정보.
    Dba_all_tables : 데이터베이스내의 모든테이블(object table, relational table).
    Dba_audit_exists : "AUDIT NOT EXISTS" and "AUDIT EXISTS"에 의해 생성된
    감사추적요소.
    Dba_audit_object : 시스템내의 모든 object에 대한 감사추적기록.
    Dba_audit_session : 세션연결과 종료에 관련된 모든 감사 추적기록.
    Dba_audit_statement : GRANT, REVOKE, AUDIT, NOAUDIT, ALTER SYSTEM
    관련된 감사추적기록.
    Dba_audit_trail : 모든 감사추적요소.
    Dba_blockers : 누군가가 스스로 걸지않은 lock이 해제되기를 기다리는 session정보.
    Dba_catalog : 모든 데이터베이스 table, views, synonyms 과 sequence에 대한 정보.
    Dba_clu_columns : cluster칼럼과 table칼럼의 mapping정보.
    Dba_clusters : 데이터베이스내에 있는 모든 cluster.
    Dba_col_comments : 데이터베이스내의 모든 table, views의 칼럼에대한 comments.
    Dba_col_privs : 데이터베이스내의 칼럼에 대한 모든권한.
    Dba_coll_types : 데이터베이스내의 모든 collection type, VARRAYs, nested tables,
    object tables 등에 대한 정보.
    Dba_constraints : 모든테이블에 대한 constraint(primary, check, unique,
    referential integrity, with check option on a view,

    with read only on a view) 정보.
    Dba_cons_columns : constraint 정의안에 있는 access가능한 칼럼에 대한 정보.
    Dba_data_files : 데이터베이스파일에 관한 정보.
    Dba_db_links : 데이터베이스내의 모든 Link.
    Dba_Ddl_locks : 데이터베이스내의 모든 DDL lock과 DDL lock이 현저하게
    요구되는 사항에 관한정보.
    Dba_dependencies : object 에 대한 Dependence.(REF, HARD)
    Dba_directories : 데이터베이스내의 모든 directory objects.
    Dba_Dml_locks : 데이터베이스내에 구성된모든 DML lock과 DML lock이
    현저하게 요구되는사항에 관한정보.
    Dba_errors : 데이터베이스내의 저장된 object에 대해 가장최근에 발생된 error.
    Dba_exp_files : export파일에 대한 정보.
    Dba_exp_objects : 점진적으로 export 되고있는 object에 대한 정보.
    Dba_exp_version : 가장최근에 export된 session에 대한 version 정보.

    Dba_extents : 데이터베이스내의 모든 세그먼트를 이루는 extents에 대한 정보.
    Dba_free_space : 모든 테이블스페이스내의 free extents의 정보.
    Dba_free_space_coalesced : 테이블스페이스내의 합쳐진 공간에 대한 통계정보.

    Dba_indexes : 데이터베이스내의 모든 index. 통계정보를 얻기위해 Analyze를 사용.
    Dba_ind_columns : 모든테이블과 클러스터에서 인덱스를 구성하는 칼럼에 대한정보.
    Dba_ind_partitions : 각각의 index파티션에 대해서, 파티션정보, 파티션에대한
    storage 매개변수, Analyze에 결정된 파티션통계자료.
    Dba_jobs : 데이터베이스에 있는 모든 Jobs.
    Dba_jobs_running : 데이터베이스내에 현재 실행중인 모든 Jobs.
    Dba_libraries : 데이터베이스내의 모든 libraries.
    Dba_lobs : 모든 테이블에 포함된 LOBs.
    Dba_locks : 데이터베이스내에 생성된 모든 lock, latch과 lock,latch가
    현저하게 요구되는 사항에 대한 정보.
    Dba_method_params : 데이터베이스내에 type에 대한 method 매개변수.
    Dba_method_results : 데이터베이스내에 type에 대한 method results.
    Dba_nested_tables : 모든테이블내에 포함된 nested table에 대한 정보.
    Dba_object_size : PL/SQL object에 대한 size, bytes.
    Dba_object_tables : 데이터베이스내에 모든 object tables.
    Dba_objects : 데이터베이스내에 모든 objects.(index partition, table partition,
    package,package_body,trigger)
    Dba_obj_audit_opts : 모든 table, view에 대한 감사 option.
    Dba_part_col_statistics : 모든 table 파티션에 대한 칼럼통계와 그래프정보.
    Dba_part_histograms : 모든 table 파티션의 histogram에 대한 데이터(endpoint).
    Dba_part_indexes : 모든 partition index에 대한 정보.
    Dba_part_key_columns : 모든 partition된 object에 대한 분할키칼럼정보.
    Dba_part_tables : 모든 partition된 table에 대한 정보.
    Dba_priv_audit_opts : 시스템과 user에 의해 감사를 받고있는 시스템 privileges.
    Dba_profiles : 모든 profiles과 해당 profile의 limit을 나타냄.
    Dba_queue_schedules : 메시지를 전달하는 schedule.
    Dba_queue_tables : 데이터베이스내에 생성된 모든 queue테이블의
    queue type의 name과 type.
    Dba_Queus : 데이터베이스내의 모든 queue에 대한 동작특성.
    Dba_rchild : refresh group 안의 모든 children object.
    Dba_refresh : 모든 refresh group 에 대한 정보.
    Dba_refresh_children : refresh group 안의 모든 object에 대한 정보.
    Dba_refs : 데이터베이스내의 모든 테이블의 REF칼럼과, REF 속성을 가진 칼럼.
    Dba_refistered_snapshot_groups : 모든 snapshot 사본 그룹.
    Dba_registered_snapshots : 지역테이블의 원격snapshot 에 대한 정보.
    Dba_rgroup : 모든 refresh group.
    Dba_roles : 모든 데이터베이스내에 존재하는 roles.
    Dba_role_privs : user와 role에 부여된 role에 대한 정보.
    Dba_rollback_segs : rollback segments 에 대한 정보.
    Dba_segments : 모든 데이터베이스 segment에 대한 할당된 storage에 대한 정보.
    Dba_sequences : 모든 데이터베이스내의 sequences 에 대한 정보.
    Dba_snapshot_logs : 모든 데이터베이스내의 snapshot_logs.
    Dba_snapshot_refresh_times : snapshot refresh 한 시간.
    Dba_snapshots : 모든 데이터베이스내의 snapshots.
    Dba_source : 모든 데이터베이스내의 저장object 의 source를포함.
    Dba_stmt_audit_opts : system, user에 의한 현재의 감사option에 대한 정보.
    Dba_synonyms : 데이터베이스내의 모든 synonyms
    Dba_sys_privs : user에게 부여된 system privilege와 role.
    Dba_tab_col_statistics : Dba_tab_columns view에 있는정보에 대한 칼럼통계와
    그래프정보
    Dba_tab_columns : 모든 table, view, cluster에 대한 칼럼정보. Analyze명령어사용.
    Dba_tab_comments : 데이터베이스내의 모든 table, view에 대한 주석.
    Dba_tab_histograms : 모든 table의 칼럼에 대한 histogram.
    Dba_tab_partitions : 각각의 table partition에 대해서, partition level의 partition정보와,
    partition의 storage매개변수 ,Analyze 에의해 결정된 여러 partition통계정보.
    Dba_tab_privs : 모든 데이터베이스내의 object에 부여된 권한.
    Dba_tables : 모든 데이터베이스내의 관계형테이블에 관한정보.Analyze로
    통계정보를 얻을수 있다.
    Dba_tablespaces : 모든 테이블스페이스에 관한정보.
    Dba_triggers : 모든 데이터베이스내의 trigger 정보.
    Dba_trigger_cols : 모든 trigger에서 사용된 칼럼정보.
    Dba_ts_quotas : 모든 user에게 할당된 tablespace.
    Dba_type_attrs : 데이터베이스내의 type에 대한 속성.
    Dba_type_methods : 데이터베이스내의 모든 type에 대한 methods.
    Dba_types : 데이터베이스내의 모든 추상적데이터type.
    Dba_updatable_columns : join view에서 데이터베이스관리자가
    update할수있는칼럼정보.
    Dba_users : 데이터베이스내의 모든 user정보.
    Dba_views : 모든 데이터베이스내의 view의 text.
    Dbms_alert!_info : 등록된 alert!정보.
    Dbms_lock_allocated : 사용자에게 할당된 lock정보.
    Deptree : utldtree.sql 에의해 생성되며, object의 dependency tree정보를 포함함.
    'Sys' user인 경우. 이 object에 관련된 공유커서를 나타내고,
    다른 user인 경우공유커서이외의 object를 나타낸다.
    다른 user는 공유커서정보를 얻기위해, Sys.deptree를 access할수있다.

    Dictionary : data dictionary table, view에 대한 정보.
    Dict_columns : data dictionary table, view에 대한 칼럼.
    Error_size : Dba_obejct_size 와 user_obejct_size view를 create 할때 사용된다.
    Exceptions : 무결성제약조건에 위배되는 정보를 포함. utlexcpt.sql 로 생성.
    File_lock : 병렬서버view. 초기화파라미터 GC_FILE_TO_LOCKS 에 명시된,
    데이터파일에 PCM lock의 mapping정보.
    File_ping : 병렬서버view.각데이타파일에 할당된 block의 수.
    GC_FILES_TO_LOCKS 최적값을 구하기 위해 현존하는 데이터파일의
    access방법을 결정하는데 이 정보를사용할 수 있다.
    FILEXT$ : DBA_DATA_FILES 와 동일. (DBA_DATA_FILES의 사용을 추천)
    GLOBAL_NAME : 현제 데이터베이스의 유일한 이름.
    HS_ALL_CAPS : 모든 비 Oracle Data store (FDS) 와 관련된 특성에 관한정보.
    HS_ALL_DD : 모든 비 Oracle Data store(FDS)에 대한 Data dictionary.
    HS_ALL_INITS : 비 Oracle Data store(FDS)에 대한 초기화 매개변수.
    HS_BASE_CAPS : 비 Oracle Data store(FDS)에 대한 기본특성에 관한정보.
    HS_BASE_DD : 비 Oracle Data store(FDS)에 대한 Data dictionary.
    HS_CLASS_CAPS : 비 Oracle Data store(FDS)에 포함된 class-specific 특성정보.
    HS_CLASS_DD : 비 Oracle Data store(FDS) class_specific data dictionary.
    HS_CLASS_INIT : 비 Oracle Data store(FDS) class-specific 초기화 매개변수.
    HS_EXTERNAL_OBJECT_PRIVILEGES : user에게 부여된 object권한.
    HS_EXTERNAL_OBJECTS : oracle server에서 access가능한 external obejct.
    HS_EXTERNAL_USER_PRIVILEGES : 어느 특정object에 국한되지않은 모든
    부여된권한
    HS_FDS_CLASS : 비 oracle (FDS) class 에 관한 정보.
    HS_FDS_INST : 비 oracle (FDS) instance에 관한정보.
    HS_INST_CAPS : instance-specific 특성정보.
    HS_INST_DD : 비 oracle (FDS) instance-specific data dictionary 변경정보.
    HS_INST_INIT : 비 oracle (FDS) instance-specific 초기화 매개변수정보.
    IDEPTREE : UTLDTREE.sql 로 생성하고, 관련tree를 나타냄.
    Deptree의 자동정렬버젼.
    INDEX_HISTOGRAM : Analyze index...validate structure 명령에 대한정보.
    INDEX_STATS : 마지막 Analyze index..validate structure 명령에 대한정보.
    NLS_DATABASE_PARAMETERS : 데이터베이스의 NLS 매개변수.
    NLS_INSTANCE_PARAMETERS : instance의 NLS 매개변수.
    NLS_SESSION_PARAMETERS : user session의 NLS 매개변수.

    OBJ : user_objects 의 synonym.
    PARSED_PIECES : Dba_object_size, User_object_size view를 생성시에 필요.
    PARSED_SIZE : Dba_obejct_size, User_object_size view를 생성시에 필요.
    Plan_table : explain plan의 결과에 대한 table. utlxplan.sql로 생성.
    Product_component_version : Oracle 제품군의 버전과 상태설명.


    Pstubtbl : Pstub utility에 의해 생성된 stub에 관한정보.
    Publicsyn : public synonym 에 관한 정보.
    Public_dependency : object와 관련된 dependencies.(parent object)
    Resource_cost : 각각의 resource에 대한 cost.
    Resource_map : 각각의 resource에 대한 정보.(resource name, resource number)
    Role_role_privs : 다른 role에 부여된 role정보.(user가 access가능한 role에 한해)
    Role_sys_privs : 다른 role에 부여된 system role정보(user가 access가능한role에 한해)
    Role_tab_privs : 다른 role에 부여된 table privileges정보.
    (user가 access가능한role에 한해)

    SEQ : user_sequences 의 synonym.
    Session_privs : 현재 user에게 사용가능한 권한.
    Session_roles : 현재 user에게 사용가능한 roles.
    Source_size : Dba_object_size, User_object_size view를 생성시 필요.
    Stmt_audit_option_map : 감사 option type code정보.
    Syn : user_synonyms 에 대한 synonym.
    Synonyms : Oracle ver 5.와 호환성을 포함. not recommend
    Syscatalog : Oracle ver 5.와 호환성을 포함. not recommend
    Sysfiles : Oracle ver 5.와 호환성을 포함. not recommend
    Syssegobj : Oracle ver 5.와 호환성을 포함. not recommend
    System_privilege_map : system privilege code에 대한 정보.
    Sys_objects : object ID와 object type 그리고 segment data block주소를 매핑하는정보.
    Tab : Oracle ver 5.와 호환성을 포함. not recommend
    Table_privileges : user가 부여한, 부여받은, 소유한, 그리고 PUBLIC으로
    부여된 object 권한정보. Oracle ver 6.과 호환성을 포함. not recommend.
    Table_privilege_map : access 가능한 권한code/권한명칭 정보.
    Tabs : User_tables 의 synonym.
    Tabquotas : Oracle ver 5.와 호환성을 포함. not recommend
    Trusted_servers : 분산환경에서 서버가 신뢰할만한지를 나타냄.
    Tp_pitr_check : catpitr.sql 에 의해 생성. 테이블스페이스의 point-in-time복구를
    방해할지도 모르는 dependencies혹은 restriction에 관한 정보제공.
    Ts_pitr_objects_to_be_dropped : 테이블스페이스의 point-in-time복구수행의 결과
    손실된 object에 대한 정보. (point-in-time recovery의 경우만 해당).
    User_all_tables : user가 사용가능한 테이블(object table, relational table)정보.
    User_arguments : user가 access가능한 object의 매개변수정보.
    User_Audit_object : cataudit.sql로 생성. object에 관련된 감사추적기록.
    User_Audit_session : cataudit.sql로 생성. user의 연결/종료에 관련된 감사추적기록.
    User_Audit_statement : cataudit.sql로 생성. user에 의해 실행된 GRANT,REVOKE,
    AUDIT, NOAUDIT, ALTER SYSTEM 명령에 대한 감사추적기록.


    User_Audit_trail : user와 관련된 전반적인 사항의 감사추적기록.
    User_catalog : user 소유의 table, views, synonyms, sequences 의 이름과 type.
    User_clusters : user소유의 cluster.
    User_clu_columns : user table 의 칼럼과 cluster칼럼과의 매핑테이블.
    User_col_comments : user 의 table, view의 칼럼에 대한 주석.
    User_col_privs : user 가 소유한, 부여한, 부여받은 칼럼에 대한 권한.
    User_col_privs_made : user 소유 object의 칼럼에 대한 권한.
    User_col_privs_recd : user가 부여받은 칼럼에 대한 권한.
    User_coll_types : user가 명명한 collection type정보.
    User_constraints : user소유 테이블의 제약조건정의.
    User_cons_columns : user소유 제약조건에 정의된 칼럼에 대한정보.
    User_db_links : user소유 데이터베이스링크에 대한정보.
    User_dependencies : user소유 object에 대한 dependencies.
    User_errors : user소유 저장 object에 대한 현재의 에러.
    User_extents : user소유 object에 속하는 세그먼트의 extent 정보.
    User_free_space : user가 access가능한 테이블스페이스내의 free extent 정보.
    User_indexes : user 소유의 indexes. Analyze명령을 사용해야함. 병렬서버를 지원.
    User_ind_columns : user소유 index 또는 user소유 table 의 칼럼정보.
    User_ind_partitions : user소유의 index partition각각에 대한설명과, partition정보,
    partition의 storage 매개변수, Analyze명령으로 결정된 여러partition통계
    User_jobs : user소유의 모든 job.(export/import!, execution)
    User_libraries : user소유의 모든 libraries .
    User_lobs : user소유의 table에포함된 LOBs정보.
    internal LOBs( BLOBs, NCLOBs) 만해당, external LOBs(i.e, BFILES)은 아님.
    User_method_params : user type의 method 매개변수.
    User_method_results : user type의 method 의 results.
    User_nested_tables : user소유 테이블에 포함된 nested tables.
    User_object_tables : user가 사용가능한 object table.
    User_objects : user소유의 object.(index partition, table partition, package,
    packagebody, trigger)
    User_object_size : user소유의 PL/SQL object.
    User_obj_audit_opts : cataudit.sql로 생성. user소유의 table,view에 대한 감사option
    User_part_col_statistics : user소유의 tablepartition정보에 대한 칼럼통계와 그래프정보.
    User_part_histograms : user가 access할수있는 table partition의 histogram에 대한
    그래프데이터(end-pointer).
    User_part_key_columns : user소유의 partition object의 partition key칼럼에 대한정보.
    User_part_indexes : 모든 user소유의 partition index의 partition정보.
    User_part_tables : user소유의 partition table에 대한 object 레벨의 partition정보.


    User_password_limits : user에게 적용된 password profile parameter.
    User_queue_tables : user소유 스키마에 생성된 queue table내부의 queues정보.
    User_Queues : user스키마의 모든 queue에 대한 동작 특성을 나타냄.
    User_refresh : 모든 refresh group.
    User_refresh_children : user가 소유한 refresh group 내부의 object에 관한정보.
    User_refs : user소유테이블의 object type칼럼중 REF칼럼, REF속성.
    User_resource_limits : 현재 user의 resource 한계.
    User_role_privs : user에게 부여된 roles.
    User_segments : user오브젝트에 포함된 데이터베이스 segments의 storage할당정보.
    User_sequences : user 소유의 sequences.
    User_snapshots : user 가 볼수있는 snapshots.
    User_snapshot_logs : user 소유의 모든 snapshot logs.
    User_source : user소유 저장 objects 의 모든 text source.
    User_snapshot_refresh_times : snapshot refresh time.
    User_synonyms : user소유의 synonym.
    User_sys_privs : user에게 부여된 system 권한.
    User_tab_col_statistics : user_tab_columns view에 대한 칼럼통계와
    그래프정보를 나타냄.
    User_tab_columns : user소유의 table, view, cluster의 칼럼정보.(Analyze명령사용)
    User_tab_comments : user소유의 table, view에 대한 주석.
    User_tab_histograms : user소유 table의 칼럼에 대한 histogram.
    User_tab_partitions : user소유 table partition에 대한, partition 레벨의 분할정보와,
    partition의 storage매개변수, Analyze에 의해 집계된 여러통계정보.
    User_tab_privs : user가 소유한, 부여한, 부여받은 object에 대한 권한 정보.
    User_tab_privs_made : user가 소유한 object에 관한 모든 권한.
    User_tab_privs_recd : user가 부여받은 object 권한정보.
    User_tables : user소유의 relational table에 대한 정보. (Analyze명령사용)
    User_tablespaces : user가 access 가능한 tablespaces에 대한 설명.
    User_triggers : user가 소유한 triggers 정보.
    User_trigger_cols : user가 소유한 또는 user테이블에 있는 trigger안의 column 정보.
    User_ts_quotas : user에게 할당된 tablespace quotas 정보.
    User_types : 테이블안의 user소유의 type.
    User_type_attrs : user type의 속성을 나타냄.
    User_type_methods : user type의 methods를 나타냄.
    User_updatable_columns : join view에서 사용자에게 update가 허용된 칼럼정보.
    User_users : 현재 user에 관한 정보.
    User_views : user 소유의 view에 대한 text.




    FILEXT$ : 데이터파일의 AUTOEXTEND를 ON으로 변경했을 때 처음 생성.
    V$ACCESS : 현재 데이터베이스내의 lock이걸린 object와 그 object를
    access 하려는 session id.
    V$ACTIVE_INSTANCES : 현재 데이터베이스내의 Mount된
    모든 인스턴스에대하여 인스턴스 이름과, 번호를 매치.
    V$AQ : 데이터베이스내의 모든 Queue에 대한 통계.
    V$ARCHIVE : Archive에 필요한 redo log file에 대한 정보.
    각각의 행은 하나의 thread에 대한 정보이다. V$LOG도 동일한정보.
    V$ARCHIVE_DEST : 현재의 instance에서, 모든 archive log destination,
    현재값, mode, status.
    V$ARCHIVED_LOG : archive log 이름을 포함하는 controlfile에 대한 archive log 정보,
    archive log 기록은 online중 redo log가 성공적으로 저장되었거나,
    clear(log가 clear되면, name칼럼은 null이 된다)된후 insert된다.
    V$BACKUP : 모든 online 데이터파일의 backup 상태를 나타낸다.
    V$BACKUP_CORRUPTION : 데이터파일의 backup 중 에러정보를 나타낸다.
    에러들은 control 파일과 achived log backup 에 포함되지 않는다.
    V$BACK_DATAFILE : control 파일에서 datafile과 controlfile 의 backup정보를 보여줌.
    V$BACK_DEVICE : 지원되는 backup 디바이스정보.
    V$BACK_PIECE : controlfile에서 backup piece에 대한 정보를 포함.
    각각의 backup set 은 하나 또는 그이상의 backup piece로 구성된다.
    V$BACKUP_REDOLOG : controlfile에서 backup set의 저장된 log에 대한 정보.
    Online redo logs는 곧바로 backup 되지 않는다: 먼저 disk에 저장된후 backup
    된다. 저장된 log backup set 은 하나 또는 그이상의 logs들로 구성된다.
    V$BACKUP_SET : controlfile에서 backupset 정보를 보여줌.
    backup set 행은 backup set이 성공적으로 완료되었을 때 insert된다.
    V$BGPROCESS : 백그라운드 프로세스 정보.
    V$BH : 병렬서버 view이다.
    SGA내의 모든 버퍼에 대한 ping의 상태와 수를 나타낸다.
    V$BUFFER_POOL : 인스턴스내에서 사용가능한 모든 버퍼풀에 대한정보.
    V$CACHE : 병렬서버 view이다.
    특정데이타베이스object에 관련된 현재의 인스턴스의
    SGA내부의 각각의 block에 대한 block header에 대한 정보.
    V$CACHE_LOCK : 병렬서버view. platform-specific lock manager 식별자를 제외하면,
    V$CACHE와 유사하다.
    V$CIRCUIT : 가상 circuit에 관한 정보이며, 가상circuit란 dispatcher와 server를
    통한 데이터베이스와의 user 연결을 말한다.
    V$CLASS_PING : 각각blockclass마다 ping된 블록의 수를나타낸다.
    다른class블록의 충돌을 비교하기위해 사용.
    V$COMPATIBILITY : 이전버전으로 downgrade를 방지하기위해
    데이터베이스인스턴스에 의해 사용된특성들을 설명.
    다른 인스턴스가 갖고있는 특성에 영향을 미치지 않으며,
    데이터베이스가 완전히 정지한이후에도 존재하지 않는 일시적인
    비호환성들을 포함할수도 있다.
    V$COMPATSEG : 이전버전으로 되돌아가는 것을 막기위한 데이터베이스에서
    사용되는 영구적인 특성들.
    V$CONTROLFILE : 컨트롤파일의 이름과 상태.
    V$CONTROLFILE_RECORD_SECTION : 컨트롤파일의 record에 대한 정보.
    V$COPY_CORRUPTION : 컨트롤파일로부터 데이터파일의 복사불량에 대한 정보.
    V$CURRENT_BUCKET : 캐쉬내의 버퍼의 수가 감소할때 발생할 수 있는
    캐쉬손실의 경우수를 예상하는데 유용.
    V$DATABASE : control file 로부터 데이터베이스정보를 포함.
    V$DATAFILE : 컨트롤파일로부터데이타파일에대한 정보를 포함.
    V$DATAFILE_COPY :컨트롤파일로부터 데이터파일의 복사에 대한 정보를포함.
    V$DATAFILE_HEADER : 데이터파일헤더에 대한 정보.

    V$DBFILE : 데이터베이스를 구성하는 모든 데이터파일.
    대신에 V$DATAFILE 추천한다.
    V$DBLINK : 세션에 의해 open된 데이터베이스링크에 대한 설명.
    이 데이터베이스링크들은 닫히기전에 commit되거나 rollback되어야만 한다.

    V$DB_OBJECT_CACHE : library cache에 cach된 데이터베이스오브젝트를 나타냄.
    V$DB_PIPES : 데이터베이스내에 현재 운영중인 pipe에 대한 설명.
    V$DELETED_OBJECT : 삭제된 archived 로그, 데이터파일 copy,
    컨트롤파일에서 백업piece 에 대한 정보. 이뷰의 목적은 복구목록의
    재동조작업을 최적화하는 것이다. archived 로그나, 데이터파일 copy,
    백업piece 등이 삭제될때는 해당하는 행이삭제되었음이 표시된다.
    V$DISPATCHER : dispatcher 프로세스에 관한 정보.
    V$DISPATCHER_RATE : dispatcher 프로세서에 관련된 확률통계.
    V$DLM_CONVERT_LOCAL : lock 변환작업에 대한 경과시간.
    V$DLM_CONVERT_REMOTE : 원격 lock변환작업에 대한 경과시간.
    V$DLM_LATCH : DLM 잠금에 대한 통계.
    각각의 잠금에 대한 통계보다는, 각 타입에 대한 총계를 포함.
    개념적으로 IMM_GETS/TTL_GETS 값은 1에 가깝게 된다.
    V$DLM_LOCKS : 병렬서버 view이다. 블록화되었거나, 다른 것을
    블록화하고있는 lock manager에 알려진 모든 lock에 대한 정보.
    V$DML_MISC : 잡다한 DLM 통계에 대한 정보.
    V$ENABLEDPRIVS:사용가능한 권한에 대한정보, 이들권한은
    SYS.SYSTEM_PRIVILEGES_MAP테이블에 존재해야만 한다.
    V$ENQUEUE_LOCK : 큐에 대기상태인 오브젝트에의해 소유된 모든 lock이
    view의 칼럼은 V$LOCK의 칼럼과 동일하다.
    자세한 것은 V$LOCK을 참고.
    V$EVENT_NAME : wait event 에 대한 정보.
    V$EXECUTION : 병렬 질의 실행에 대한 정보.
    V$EXECUTION_LOCATION : 병렬 질의 실행 트리의 위치에 대한 자세한 정보.
    V$FALSE_PING : 병렬서버view. ping에 실패지도 모르는 버퍼에 대한 정보.
    즉, 10회이상ping된 다른 버퍼와
    동일한 lock으로 잠겨있는 버퍼를 말한다.
    ping이 실패로 판명된 버퍼는 lock충돌을 감소시키기위해
    1-44페이지의 "GC_FILES_TO_LOCK"에 다시 매핑된다.
    V$FILE_PING : 데이터파일마다 ping된 블록수를 보여줌. 이정보는 현존하는
    데이터파일에 대한 access패턴을 결정하는데 and,
    데이터파일블록을 PCM lock에 새로 매핑하는것을 결정하는데 사용된다.
    V$FILESTAT : 파일 read/write 통계.
    V$FIXED_TABLE : 데이터베이스내의 모든 동적실행테이블, views, 유도테이블.
    실제테이블을 참조하는 약간의 V$테이블은 리스트에 없다.
    V$FIXED_VIEW_DEFINITION : (V$로 시작하는)고정view에 대한 설명.
    유의해서 사용해야한다.
    V$GLOBAL_TRANSACTION : 현재 활동중인 트랜잭션에 대한 설명.
    V$INDEXED_FIXED_COLUMN : index된 동적실행테이블(X$ table)의 칼럼에
    대한 설명. X$ table은 경고없이 변경할수있다.
    이view는 보다 효과적으로 고정뷰(V$view)에 대한
    V$INSTANCE : 현재의 인스턴스의 상태를 나타냄.
    V$INSTANCE의 버전은 V$INSTANCE의 초기버전과 호환성이 없다.
    V$LATCH : 하위 잠금에 대한 통계와 상위 잠금에 대한 요약통계.
    즉, 상위잠금에 대한 통계는 그 하위잠금에 대한 각각의 통계를 포함한다.
    V$LATCHHOLDER : 현재잠금에 대한 정보.
    V$LATCHNAME : V$LATCH 에 있는 잠금에 대한 디코드된 잠금이름에 대한
    정보. V$LATCHNAME의 행들은 V$LATCH의 행들과 1:1로 대응된다.

    V$LATCH_CHILDREN : 하위잠금에 대한 통계를 포함.
    V$LATCH의 칼럼에 child# 칼럼이추가되었다. LATCH#칼럼이 서로
    동일하다면, 하위잠금이 동일한 상위잠금을 갖는 것이다.
    V$LATCH_MISSES : 잠금을 획득하는데 실패한 시도에 대한 통계.
    V$LATCH_PARENT : 상위잠금에 대한 통계.
    V$LATCH_PARENT 칼럼은 V$LATCH칼럼과 동일하다.
    V$LIBRARYCACHE : library cache의 실행과 활동통계.
    V$LICENSE : license 한계에 대한 정보.
    V$LOADCSTAT : 직접적재하는동안 컴파일된 SQL*loader 통계정보.
    이테이블에대한 어떤 Select 문도 "no rows returned" 결과가 나오는데,
    왜냐면, 동일한 시간에 데이터를 적재하면서, 쿼리를 날릴수 없기 때문이다.

    V$LOCK : 현재 Oracle 서버에 의해 확립된 잠금에 대한 정보나 lock또는
    latch에 대한 두드러진요청
    V$LOCK_ACTIVITY : 병렬서버view이다. V$LOCK_ACTIVITY는 현재의
    인스턴스의 DLM잠금동작을 나타낸다.
    각각의 행은 잠금동작의 타입과 일치된다.
    V$LOCK_ELEMENT : 병렬서버view이다. 버퍼캐쉬에 의해사용된 각각의
    PCM잠금에 대해 v$LOCK_ELEMENT 에 한행이다.
    잠금요소에 대응되는 PCM잠금의 이름은 'BL',indx,class등이다.
    V$LOCKED_OBJECT : 시스템안의 모든 트랜잭션에 걸린 잠금을 나타낸다.
    V$LOCKED_WITH_COLLISIONS : 병렬서버view이다.
    여러버퍼를 보호하는 lock을 찾는데 사용되며, 그 버퍼들은 최소한
    10회이상 각각 강제로 쓰여지거나, 강제로 읽혀진 버퍼들이다.
    V$LOG : 컨트롤파일로부터 log 파일정보를 포함한다.
    V$LOGFILE : redo log 파일정보. redo log 그룹과 멤버 파일명.
    V$LOGHIST : 컨트롤파일로부터 log history정보를 포함. 지속적인 호환성을
    포함하고 있다. 대신에 V$LOG_HISTORY의 사용을 권장한다.
    V$LOG_HISTORY : 컨트롤파일로부터 log history 정보를 포함한다.
    V$MLS_PARAMETERS : Oracle Server의 확정된 초기화파라미터를 나타냄.
    V$MTS : multi-threaded server의 성능향상을위한 정보를 포함.
    V$MYSTAT : 현재 세션에 대한 통계값포함.
    V$NLS_PARAMETERS : 현재의 NLS 매개변수의 값들을 포함.
    V$NLS_VALID_VALUES : 유효한 NLS 매개변수값.
    V$OBJECT_DEPENDENCY : 현재 공유풀에 적재되어있는 package, procedure,
    cursor등에 관련되어있는 object를 결정하는데 사용된다.
    예를들면, V$SESSION, V$SQL등과 조인하면, 현재 어떤 user가
    실행중인 SQL문에서 어떤 테이블이 사용되었는지를 알아낼수가 있다.
    V$OFFLINE_RANGE : 컨트롤파일로부터 offline된 datafile을 보여준다.
    DATAFILE행에 저장되어있는 각각의 데이터파일의 최종offline 간격을
    보여줌. offline 간격은 테이블스페이스가 처음 offline normal,
    또는 Read Only로 변경되고난이후 다시 online 또는 read-write로
    변경된다음에 확정된다.
    데이터파일이 스스로 Offline로 변경되거나 테이블스페이스가
    OFFLINE IMMEDIATE로 변경되면, offline간격은 확정되지 않는다.

    V$OPEN_CURSOR : 각각 user 세션이 열렸있거나, 정지되어있는 cursor를 보여준다.
    V$OPTION : Oracle Server와 같이 설치된 선택사항들.
    V$PARAMETER : 초기화 파라미터에 대한 설명이다.
    V$PING : 병렬서버view이다.
    최소한 1번이상 ping된 블록만을 보여준다는 것을 제외하고 V$CACHE view와
    동일하다.특정 데이터베이스 object와 관련된 현재의 인스턴스내의 SGA에
    있는 각각의 블록에대한 block header정보를 포함하고 있다.
    V$PQ_SESSTAT : 병렬쿼리에 대한 session 통계를 포함.
    V$PQ_SLAVE : 인스턴스내에 실행중인 parallel 쿼리서버에 대한 통계.
    V$PQ_SYSSTAT : 병렬쿼리에 대한 시스템통계.


    V$PQ_TQSTAT : 병렬쿼리 동작의 통계를 포함. 통계는 질의가 완료된후에
    컴파일되며 세션이 살아있는동안 계속 남아있는다.
    V$PROCESS : 현재 작업중인 프로세스에 대한 정보.
    LATCHWAIT 칼럼은 프로세스잠금이 무엇을 기다려야하는가를 나타내며,
    LATCHSPIN 칼럼은 프로세스잠금이 동작되는 것을 나타낸다.
    멀티프로세서의 경우 Oracle 프로세스는 잠금을 기다리기전에 실시한다.
    V$PWFILE_USERS : password 파일로부터 유도해낸
    SYSDBA, SYSOPER 권한을 부여받은 user.
    V$QUEUE : 멀티쓰레드 메시지큐에 대한 정보.
    V$RECENT_BUCKET : 대용량 캐쉬실행을 평가하기에 유용한 정보.
    V$RECOVER_FILE : media 복구에필요한 파일의 상태를 나타냄.
    V$RECOVERY_FILE_STATUS : 각각의 RECOVER명령에 대한 각 데이터파일에
    대한 정보를 한행씩 포함.
    Oracle프로세스가 복구를 수행하는데 유용한 정보임.
    recover manager는 서버프로세스에 직접 복구를수행하도록 했을 때,
    recovery manager가 이 view에서 관련된정보를 참고할 수 있다.
    다른user들에게는 유용하지 않다.
    V$RECOVERY_LOG : 완벽한 media복구에 필요한 archived logs에 관한 정보.
    이정보는 log history view인 V$LOG_HISTORY에서 유도된 것이다.
    V$RECOVERY_PROGRESS : 데이터베이스복구작업이 중간에 멈추지않도록하는데
    사용되며, 복구작업을 완료하는데 요구되는 시간을 측정하는데 사용된다.
    V$RECOVERY_STATUS : 현재의 복구진행상태를 나타낸다. 단지 복구를 수행하는
    Process 에대한 정보만이유용하다. 복구관리자가 서버프로세스에게 복구를
    수행하라고 지시할때에, 복구관리자는 이view에서
    관련정보를 참조할 수 있다. 다른 user에게는 불필요하다.
    V$REQDIST : MTS dispatcher의 응답시간에 대한 그래프통계를 나타내며,
    time range는 버킷 number의 지수함수로 증가한다.
    V$RESOURCE : 자원(resource)의 이름과 주소정보를 포함.
    V$RESOURCE_LIMIT : System 자원의 부분적인 사용에 대한 정보. 자원의
    소비를 모니터링함으로서 낭비를 방지하는데 사용된다.

    V$ROLLNAME : 모든 online중인 rollback segments의 이름.
    데이터베이스가 open시에만 조회가능.
    V$ROLLSTAT : 롤백세그먼트통계정보.
    V$ROWCACHE : 자료사전활동에 대한 통계.
    각각의 행은 하나의 자료사전cache 통계를 포함.
    V$SESSION : 현재 open된 세션에 대한 정보.
    V$SESSION_CONNECT_INFO : 현재의 세션에 대한 network 연결에 대한 정보.
    V$SESSION_CURSOR_CACHE : 현재의 세션에 대한 cursor 사용에 대한 정보.
    SESSION_CACHED_CURSORS 초기화파라미터에 대한 효율을 측정하지는
    않는다.
    V$SESSION_EVENT : 세션의 event 대기에 관한정보.
    V$SESSION_LONGOPS : 장시간실행되는 작업에 대한 상태. SOFAR,
    TOTALWORK칼럼은 진행상태를 제공한다. 예를들어
    다음요소(hach cluster creations, backup, recovery) 에 대한
    작동상태를 모니터링할 수 있다.
    V$SESSION_OBJECT_CACHE : 로칼서버의 현재사용중인
    user세션의 object, cache통계정보.
    V$SESSION_WAIT : 활동중인 세션이 대기하고있는 자원또는 이벤트이다.
    V$SESSTAT : user세션 통계이다. 통계number(statistic#)에 해당하는
    통계name을 찾으려면, V$STATNAME를 참고하면 된다.
    V$SESS_IO : 각각의 user세션에 대한 I/O 통계이다.
    V$SGA : System Global Area 에대한 간략한 정보.(name, size)
    V$SGASTAT : System Global Area에 대한 자세한 정보.(name, bytes, pool)

    V$SHARED_POOL_RESERVED : Shared Pool내에 예약풀과 공간을
    바꾸고자할 때 도움이 되는통계.
    V$SHARED_SERVER : Shared Server processes 에 대한 정보를 포함.
    V$SORT_SEGMENT : 주어진 인스턴스내의 각 sort세그먼트에 대한 정보.
    테이블스페이스가 Temporary 타입일때만 update된다.

    V$SORT_USAGE : sort 사용에 대해 기술한다.
    V$SQL : Group by절이없는 공유sql영역에대한 통계이며 입력된
    원래 sql문장의 각 child의 row를 포함.
    V$SQL_BIND_DATA : 데이터가 이 서버에서 추출가능하다면 이 view를
    조회하는 세션에 소유된 각 커서안에 있는 각각의 원격bind변수에 대한
    클라이언트에 의해 보내진 데이터.
    V$SQL_BIND_METADATA : 이view를 조회하는 세션에 소유된 각커서안에 있는
    각각의 원격bind변수에 대해 클라이언트에의해 제공되는 bind metadata.

    V$SQL_CURSOR : 이 view를 조회하는 세션과 관련된 각 cursor에 대한 디버깅정보.
    V$SQL_SHARED_MEMORY : 메모리 스냅샷에 공유된 커서에 대한 정보.
    공유풀에 저장된 각SQL문은 관련된 하나또는 그이상의 하위object를
    가지고 있다.
    V$SQLAREA : 공유SQL영역에 대한 통계를 가지고있으며, Sql 문자열마다
    한행을 포함한다. 메모리내에 존재하는, parse된, 실행을 대기하고있는
    SQL문장에 대한 통계를 제공한다.
    V$SQLTEXT : SGA내부의 공유SQL 커서에 속해있는 SQL문장을 포함.
    V$SQLTEXT_WITH_NEWLINES : 가독성이 증가되고, 공백을 포함한 SQL문장안에
    newline과 tabs을 대체하지 않는다는 것을 제외하고는 V$SQLTEXT view와
    동일하다.
    V$STATNAME : V$SESSTAT와 V$SYSSTAT테이블에서 나타난 statistics에 대한 이름.
    V$SUBCACHE : 현재 라이브러리 캐쉬메모리에 적재된 하위 캐쉬에 대한 정보.
    모든 라이브러리캐쉬에 대해 언급하고있으며, 각 라이브러리 캐쉬object마다
    각 적재된 하위 캐쉬에 대해 한행을 나타낸다.
    V$SYSSTAT : 시스템 통계이다. 각 statistic number(statistic#)와 관련된 statistic의
    이름을 찾기위해서는, "V$STATNAME"를 보시오.
    V$SYSTEM_CURSOR_CACHE : 시스템 전반적인정보라는 것을 제외하고,
    V$SESSION_CURSOR_CACHE와 유사한 정보를 나타낸다.
    V$SYSTEM_EVENT : 이벤트에 대한 총 wait정보. TIME_WAITED,
    AVERAGE_WAIT칼럼은 급속메커니즘을 지원하지 않는 플랫폼에서
    0값을 포함할 것이다. 이런 플랫폼에서 DB를 운영중이고,
    이칼럼이 wait time을 줄여주기를 원한다면, 파라미터파일의
    TIMED_STATISTICS를 TRUE로 세팅하면된다.
    단지 이렇게 하면, 시스템 성능에 약간의 마이너스효과를 가져올 것이다.
    V$SYSTEM_PARAMETER : System parameter에 대한 정보.
    V$TABLESPACE : 컨트롤파일로부터 테이블스페이스 정보를 나타내준다.
    V$THREAD : 컨트롤파일로부터 thread 정보를 가져온다.
    V$TIMER : 1/100 초로 나타낸 경과시간. 시간은 epoch가 시작된이후부터
    측정되며, epoch는 OS의 특성이며, 값이 4bytes(약 497일)를 넘을때마다
    0근처의 값이 된다.
    V$TRANSACTION : 시스템내의 활동중인 트랜잭션.
    V$TRANSACTION_ENQUEUE : 트랜잭션 오브젝트에 의해 소유된 lock를 나타냄.
    V$TYPE_SIZE : 데이터블록용량을 측정하는데 사용되는 여러
    데이터베이스컴포넌트들의 SiZe.
    V$VERSION : Oracle Server의 core 라이브러리 컴포넌트의 Version수이다.
    각 컴포넌트에 한 row가 있다.
    V$WAITSTAT : 블록점유에 대한 통계. 통계가 사용가능한 시간에만 갱신된다.

    출처 : Tong - 늘푸른 소나무(松)님의 오라클-SQL통

    Posted by WebProgrammer 1010
    개발노트/Java2009/12/08 20:16
    /*

    Defining the Table: Oracle and MySql


    create table MyPictures (
       id INT PRIMARY KEY,
       name VARCHAR(0),
       photo BLOB
    );
    */

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.OutputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;

    import oracle.jdbc.OracleResultSet;

    public class Main {
      public static void main(String[] args) throws Exception {
        Connection conn = getOracleConnection();
        int rows = 0;
        FileInputStream fin = null;
        OutputStream out = null;
        ResultSet rs = null;
        Statement stmt = null;
        oracle.sql.BLOB photo = null;
        conn.setAutoCommit(false);
        stmt = conn.createStatement();
        String id = "001";
        String binaryFileName = "fileName.dat";

        rows = stmt.executeUpdate("insert into my_pictures(id, photo ) values ('" + id
            + "', empty_blob() )");
        System.out.println(rows + " rows inserted");

        rs = stmt.executeQuery("select photo from  my_pictures where id = '" + id
            + "' for update nowait");
        rs.next();
        photo = ((OracleResultSet) rs).getBLOB(1);

        fin = new FileInputStream(new File(binaryFileName));
        out = photo.getBinaryOutputStream();
        // Get the optimal buffer size from the BLOB
        byte[] buffer = new byte[photo.getBufferSize()];
        int length = 0;
        while ((length = fin.read(buffer)) != -1) {
          out.write(buffer, 0, length);
        }
        conn.commit();

        out.close();
        fin.close();
        rs.close();
        stmt.close();
        conn.close();

      }

      private static Connection getHSQLConnection() throws Exception {
        Class.forName("org.hsqldb.jdbcDriver");
        System.out.println("Driver Loaded.");
        String url = "jdbc:hsqldb:data/tutorial";
        return DriverManager.getConnection(url, "sa", "");
      }

      public static Connection getMySqlConnection() throws Exception {
        String driver = "org.gjt.mm.mysql.Driver";
        String url = "jdbc:mysql://localhost/demo2s";
        String username = "oost";
        String password = "oost";

        Class.forName(driver);
        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
      }

      public static Connection getOracleConnection() throws Exception {
        String driver = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:thin:@localhost:1521:databaseName";
        String username = "userName";
        String password = "password";

        Class.forName(driver); // load Oracle driver
        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
      }

    }


    Posted by WebProgrammer 1010
    개발노트/Java2009/12/08 20:15
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.Statement;

    public class Main {
      public static void main(String[] args) throws Exception {

        Class.forName("oracle.jdbc.driver.OracleDriver");

        String url = "jdbc:oracle:thin:@localhost:1521:javaDemo";
        String username = "username";
        String password = "welcome";

        String sql = "CREATE TABLE books (id NUMBER(11), title VARCHAR2(64))";
        Connection connection = DriverManager.getConnection(url, username, password);
        Statement statement = connection.createStatement();
        statement.execute(sql);
        connection.close();
      }
    }
     

    Posted by WebProgrammer 1010
    개발노트/Java2009/12/08 20:14
     
    import
    java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    public class DemoResultSetOracle {

      public static Connection getConnection() throws Exception {
        String driver = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:thin:@localhost:1521:databaseName";
        String username = "username";
        String password = "password";

        Class.forName(driver); // load Oracle driver
        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
      }

      public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
          conn = getConnection();
          System.out.println("conn=" + conn);
          // prepare query
          String query = "select id, name, age from employees";
          // create a statement
          stmt = conn.createStatement();
          // execute query and return result as a ResultSet
          rs = stmt.executeQuery(query);
          // extract data from the ResultSet
          while (rs.next()) {
            String id = rs.getString(1);
            String name = rs.getString(2);
            int age = rs.getInt(3);
            System.out.println("id=" + id);
            System.out.println("name=" + name);
            System.out.println("age=" + age);
            System.out.println("---------------");
          }
        } catch (Exception e) {
          e.printStackTrace();
          System.exit(1);
        } finally {
          // release database resources
          try {
            rs.close();
            stmt.close();
            conn.close();
          } catch (SQLException e) {
            e.printStackTrace();
          }
        }
      }
    }
               
             
    Posted by WebProgrammer 1010
    개발노트/DataBase2009/11/27 15:34

    SQL문 튜닝 개요

    Added by honghoekim, last edited by honghoekim on 7월 31, 2009

    Labels:

    Enter labels to add to this page:
    Wait Image 
    Looking for a label? Just start typing.

    1.문제가 있는 SQL 식별

    1)느린 프로그램을 식별
    2)프로그램에서 SQL을 검토
    3)SQL_Trace 및 TKPROF를 사용

    • SQL문 식별이 불가능한 경우(SQL이 동적으로 생성되는 경우) SQL TRACE를 사용하여 실행된 SQL을 포함하는 Trace file을 생성한 다음 TKPROF를 사용하여 출력 파일을 생성

    2.Optimizer 통계 확인

    1)모든 테이블에 대한 통계를 수집

    • 모든 SQL문의 실행 계획을 결정하는 CBO는 테이블 및 인덱스에 대해 수집된 통계를 사용함.통계가 수집되지 않았거나 통계가 데이터베이스에 저장된 데이터를 대표하지 못할 경우 Optimizer에 정보가 부족해 최상의 계획을생성할 수 없다.

    3.실행 계획 검토

    다음 사항을 검토

    1)Driving table이 최상의 필터를 가지는 계획이 되어야 한다.
    2)각 단계의 조인 순서는 가장 적은 수의 행이 다음 단계로 반환됨을 의미 한다.
    3)조인 방식이 반환되는 행 수에 적합.예를 들어 인덱스를 통한 중첩 루프 조인은 많은 행이 반환될 때 최적화되지 않을 수 있다.
    4)뷰가 효율적으로 사용 된다.뷰에 대한 access 필요 여부 확인
    5)작은 테이블에도 비의도적인 cartesian product가 없다.
    6)각 테이블이 효율적으로 액세스 된다.

    4.SQL문 재구성

    1)AND 및 = 를 사용
    2)WHERE절에 변환된 열이 포함되지 않도록 함

    • 술어 절 또는 WHERE절에 SQL 함수 사용 금지
      3)복합 모드 표현식을 빼고 암시적인 유형 변환에 유의
      4)각 작업에 대해 별도의 SQL문을 작성
    • 다양한 작업에 대해 하나의 SQL문을 사용할 경우 각 작업에 최적화 되지 않은 결과 나옴.굳이 하나의 SQL문을 사용해야 할 경우 UNION ALL 연산자를 사용
      5)서브 쿼리에 대해 IN 대신 EXISTS를 사용
      -선택적 술어가 서브 쿼리에 있는 경우는 IN을 사용.선택적 술어가 상위 쿼리에 있는 경우는 EXISTS를 사용
      6)힌트로 엑세스 경로 및 조언 순서를 제어
      -인덱스를 통해 필요한 행을 얻는 것이 더 효율적인 경우 전체 테이블 스캔 사용 금지,
      더 적은 수의 행을 Fetch하는 다른 인덱스를 대신 사용할 수 있다면 Driving 테이블에서 많은 수의 행을 Fetch하는 인덱스의 사용을 피하자,
      조인 순서에서 나중에 테이블에 적은 수의 행을 조인하는 조인 순서를 선택

    5.인덱스 재구성

    1)비선택적 인덱스를 제거하여 DML 속도를 높임
    2)성능에 중요한 액세스 경로를 인덱스화함
    3)기존에 연결된 인덱스에서 열 순서를 변경
    4)인덱스에 열을 추가하여 선택성을 높임
    5)IOT를 고려

    6.시간 경과에 따른 실행 계획 유지 관리


    출처 : http://www.javastudy.co.kr:8080/pages/viewpage.action?pageId=786591

    Posted by WebProgrammer 1010

    html 소스 암호화


    Posted by WebProgrammer 1010

    <style type="text/css">
    *{font-family:돋움,Dotum,AppleGothic,sans-serif;font-size:12px;color:#333;}
    body,form,div,p,h1,h2,h3,h4,h5,h6,dl,dt,dd,ul,ol,li,pre,fieldset,input,blockquote,th,td{margin:0;padding:0;}
    ol,ul,dl{list-style:none;}
    a{color:#333;text-decoration:none;}
    a:hover,a:hover b,a:hover em,a:hover span{color:#06c;text-decoration:underline;}

    /*rolling Button*/
    div.rollBtn{position:absolute;z-index:3;}
    div.rollBtn a.next{background-position:-22px 0px;cursor:hand;}
    div.rollBtn a.previous{margin-right:3px;cursor:hand;}
    div.rollBtn a span{display:none;}

    #bKey{position:relative;margin-top:9px;width:270px;zoom:1;}
    #bKey .keyBg{margin:1px 0 0 0;overflow:hidden;height:18px;}
    #bKey ul{clear:both;}
    #bKey ul li{float:left;height:18px;}
    #bKey ul li.x{background:url(http://simg.paran.com/top_v2.2/top/ic_line06.gif) 100% 0 no-repeat;margin:0 7px 0 0;padding:0 7px 0 0;}
    #bKey ul li a{font-weight:bold;color:#FB6A31;letter-spacing:-1px;}
    #bKey .rollBtn{left:203px;top:0;}
    #bKey .rollBtn .up{margin-right:3px;}
    </style>
    <script language="JavaScript">
    function scrolling(objId,sec1,sec2,speed,height){
      this.objId=objId;
      this.sec1=sec1;
      this.sec2=sec2;
      this.speed=speed;
      this.height=height;
      this.h=0;
      this.div=document.getElementById(this.objId);
      this.htmltxt=this.div.innerHTML;
      this.div.innerHTML=this.htmltxt+this.htmltxt;
      this.div.isover=false;
      this.div.onmouseover=function(){this.isover=true;}
      this.div.onmouseout=function(){this.isover=false;}
      var self=this;
      this.div.scrollTop=0;
      window.setTimeout(function(){self.play()},this.sec1);
    }
    scrolling.prototype={
      play:function(){
        var self=this;
        if(!this.div.isover){
          this.div.scrollTop+=this.speed;
          if(this.div.scrollTop>this.div.scrollHeight/2){
            this.div.scrollTop=0;
          }else{
            this.h+=this.speed;
            if(this.h>=this.height){
              if(this.h>this.height|| this.div.scrollTop%this.height !=0){
                this.div.scrollTop-=this.h%this.height;
              }
              this.h=0;
              window.setTimeout(function(){self.play()},this.sec1);
              return;
            }
          }
        }
        window.setTimeout(function(){self.play()},this.sec2);
      },
      prev:function(){
        if(this.div.scrollTop == 0)
        this.div.scrollTop = this.div.scrollHeight/2;
        this.div.scrollTop -= this.height;
      },
      next:function(){
        if(this.div.scrollTop ==  this.div.scrollHeight/2)
        this.div.scrollTop =0;
        this.div.scrollTop += this.height;
      }
    };
    </script>
     <BODY>
    <div id="bKey">
    <div id="jFavList" class="keyBg">
    <ul>
     <li class="x"><a href="http://c3.paran.com/?l=P111063">부시 8월 방한</a></li>
     <li><a href="http://c3.paran.com/?l=P111064">우리 구단 가입금</a></li>
    </ul>
    <ul>
     <li class="x"><a href="http://c3.paran.com/?l=P111065">진보신당 난입 폭행</a></li>
     <li><a href="http://c3.paran.com/?l=P111066">남규리 대시</a></li>
    </ul>

    <ul>
     <li class="x"><a href="http://c3.paran.com/?l=P111067">미국산 쇠고기 판매</a></li>
     <li><a href="http://c3.paran.com/?l=P111068">조중동 다음</a></li>
    </ul>
    <ul>
     <li class="x"><a href="http://c3.paran.com/?l=P111069">호나우지뉴 방한</a></li>
     <li><a href="http://c3.paran.com/?l=P111070">김구라 사과</a></li>
    </ul>
    <ul>
     <li class="x"><a href="http://c3.paran.com/?l=P111071">LPG가격 인상</a></li>
     <li><a href="http://c3.paran.com/?l=P111072">임창용 19세이브</a></li>
    </ul>
    <ul>
     <li class="x"><a href="http://c3.paran.com/?l=P111073">한전 납품비리</a></li>
     <li><a href="http://c3.paran.com/?l=P111074">유재석 웨딩사진</a></li>
    </ul>
    <ul>
     <li class="x"><a href="http://c3.paran.com/?l=P111075">채은정 비키니</a></li>

     <li><a href="http://c3.paran.com/?l=P111076">PD수첩 압수영장</a></li>
    </ul>
    <ul>
     <li class="x"><a href="http://c3.paran.com/?l=P111077">신혼부부 주택</a></li>
     <li><a href="http://c3.paran.com/?l=P111078">사제단 시국미사</a></li>
    </ul>
    </div>
    <script type="text/javascript"> var hotKeyword = new scrolling("jFavList",3000,1,1,18); </script>

    <div class="rollBtn" onmouseover="hotKeyword.div.isover=true;" onmouseout="hotKeyword.div.isover=false;">
      <a class="previous" onclick="hotKeyword.prev();" title="위로">[↑]</a>
      <a class="next" onclick="hotKeyword.next();" title="아래로">[↓]</a>
    </div>
    </div>


    출처 : http://www.jakartaproject.com/article/javascripttip/121573854953934

    Posted by WebProgrammer 1010
    개발노트/DataBase2009/11/25 17:56
    - http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html
    • Oracle Database 11g Release 1 (11.1.0.7.0) JDBC Drivers
      ojdbc5.jar (1,890,499 bytes) - Classes for use with JDK 1.5.
      ojdbc6.jar (1,988,051 bytes) - Classes for use with JDK 1.6.
    • Oracle Database 11g Release 1 (11.1.0.6.0) JDBC Drivers
      ojdbc5.jar (1,879,860 bytes)
      ojdbc6.jar (1,977,267 bytes)
    • Oracle Database 10g Release 2 (10.2.0.4) JDBC Drivers
      classes12.jar (1,609,607 bytes) - for use with JDK 1.2 and JDK 1.3
      ojdbc14.jar (1,555,682 bytes) - classes for use with JDK 1.4 and 1.5
    • Oracle Database 10g Release 2 (10.2.0.3) JDBC Drivers
      classes12.jar (1,600,090 bytes) - for use with JDK 1.2 and JDK 1.3
      ojdbc14.jar (1,545,954 bytes) - classes for use with JDK 1.4 and 1.5
    • Oracle Database 10g Release 2 (10.2.0.2) JDBC Drivers
      classes12.jar (1,594,191 bytes) - for use with JDK 1.2 and JDK 1.3
      ojdbc14.jar (1,540,457 bytes) - classes for use with JDK 1.4 and 1.5
    • Oracle Database 10g Release 2 (10.2.0.1.0) JDBC Drivers
      classes12.jar (1,590,491 bytes) - for use with JDK 1.2 and JDK 1.3
      ojdbc14.jar (1,536,979 bytes) - classes for use with JDK 1.4 and 1.5
    • Oracle Database 10g 10.1.0.5 JDBC Drivers
      classes12.jar (1,442,469 bytes) - for use with JDK 1.2 and JDK 1.3
      ojdbc14.jar (1,378,346 bytes) - classes for use with JDK 1.4
    • Oracle Database 10g 10.1.0.2 JDBC Drivers
      classes12.jar (1,417,089 bytes) - for use with JDK 1.2 and JDK 1.3
      ojdbc14.jar (1,352,918 bytes) - classes for use with JDK 1.4
    • Oracle9i 9.2.0.8 JDBC Drivers
      ojdbc14.jar - JDBC classes (1,212,964 bytes) - For use with JDK 1.4
      classes12.jar - JDBC classes (1,234,433bytes) - For use with JDK 1.2 and JDK 1.3
      classes111.jar - JDBC classes (1,063,074 bytes) - For use with JDK 1.1
    • Oracle9i 9.2.0.5 JDBC Drivers
      ojdbc14.jar - JDBC classes (1,200,046 bytes) - For use with JDK 1.4
      classes12.zip - JDBC classes (1,232,604 bytes) - For use with JDK 1.2 and JDK 1.3
      classes111.zip - JDBC classes (1,063,479bytes) - For use with JDK 1.1
    • Oracle9i 9.2.0.4 JDBC Drivers
      ojdbc14.jar - JDBC classes (1,187,584 bytes) - For use with JDK 1.4
      classes12.zip - JDBC classes (1,219,950 bytes) - For use with JDK 1.2 and JDK 1.3
      classes111.zip - JDBC classes (1,052,833 bytes) - For use with JDK 1.1
    • Oracle9i 9.2.0.3 JDBC Drivers
      ojdbc14.jar - JDBC classes (1,181,679 bytes) - For use with JDK 1.4
      classes12.zip - JDBC classes (1,213,897 bytes) - For use with JDK 1.2 and JDK 1.3
      classes111.zip - JDBC classes (1,048,261 bytes) - For use with JDK 1.1
    • Oracle9i 9.2.0.1 JDBC Drivers
      ojdbc14.jar - JDBC classes ( 1,174,976 bytes) - For use with JDK 1.4
      classes12.zip - JDBC classes ( 1,207,068 bytes) - For use with JDK 1.2 and JDK 1.3
      classes111.zip - JDBC classes ( 1,043,528 Bytes) - For use with JDK 1.1
    • Oracle9i 9.0.1.4 JDBC Drivers
      classes12.zip - JDBC classes (1,143,559 bytes) - For use with JDK 1.2 and JDK 1.3
      classes111.zip - JDBC classes (988,625 bytes) - For use with JDK 1.1
    • Oracle9i 9.0.1 JDBC Drivers
      classes12.zip - JDBC classes( 1,081 kb) - For use with JDK 1.2 and JDK 1.3
      classes111.zip - JDBC classes ( 936 kB) - For use with JDK 1.1
    • Oracle8i 8.1.7.1JDBC Drivers
      classes12.zip - JDBC classes ( 1,892 kB) - For use with JDK 1.2
      classes111.zip - JDBC classes ( 1,741 kB)


    출처 : http://pantarei.tistory.com/tag/oracle

    Posted by WebProgrammer 1010
    개발노트/Ajax2009/11/24 07:33


    http://www.methodchain.com/index.html

    MethodChain?


    MethodChain은 Ajax 라이브러리로 New Paradigm입니다.


    MethodChain은 프로그램을 작성하지 않고 웹 애플리케이션을 개발할 수 있는

    아키텍처와 메커니즘을 제공합니다.


    2009년 11월 17일: MethodChain UI RC1 버전을 발표했습니다.


    • MethodChain UI 정식 버전은 2009년 12월 1일에 발표할 예정입니다.
    • 정식 버전에는 다음 내용이 포함됩니다.
    • - RC1에 포함되지 않은 예제
    • - 주석이 포함된 클래스 단위의 소스 코드
    • - MethodChain의 발전 방향, 사상, 아키텍처와 메커니즘 설명
    • - 2.1 버전 로드맵
    • - 라이센스 정책 및 가격


    • ** 아래 예제는 별도로 프로그램을 개발하지 않고 MethodChain 기능만으로 개발한 것입니다.
    • - 서버에서 받은 데이터는 상품명, 수량, 단가, 할인율 코드입니다.
    • - 할인율 코드에 해당하는 radio를 checked 상태로 설정하였으며
    • - Calculator 메커니즘을 적용하여 산출금액에서 부가세포함까지를 클라이언트에서 산출한 것입니다.


    • ** 아래 예제는 Grid Entry로 다수의 데이터를 입력할 수 있습니다.
    • - Operator 메커니즘을 적용하여 산출금액과 할인금액을 체크하고 메시지를 표시하였습니다.
    • - 수량과 단가를 입력할 때마다 산출금액, 판매금액, 부가세, 부가세포함을 자동으로 계산합니다.
    • - 이 모든 것을 위해 별도로 프로그램을 개발하지 않아도 됩니다.
    Posted by WebProgrammer 1010

    JavaScriptMVC - develop with direction!

    JavaScriptMVC is an open-source framework containing the best ideas in enterprise JavaScript development. It guides you to successfully completed projects by promoting best practices, maintainability, and convention over configuration.

    Download JavaScriptMVC 2.0 Production (6.2 MB) Watch 2.0 Video

    What's Inside?

    We've made everything you should be doing as easy as possible.
    • Maintainability via the Model-View-Controller architecture pattern.
    • Application Concatination and Compression via include.
    • Testing via Test.
    • Documentation via include.Doc.
    • Error Reporting via DamnIT.
    • Updates and Dependancy Management via update.
    • Ajax and DOM functionality via jQuery.

    The Plan.

    1. Download JavaScriptMVC
    2. Read the Getting Started Guide
    3. Learn the technology
    4. Explore the api

    Showcase.

    Checkout some of the companies using JavaScriptMVC:
    Posted by WebProgrammer 1010

    Getting Started with the Closure Compiler Application

    The Hello World of the Closure Compiler Application

    The Closure Compiler application is a Java command-line utility that compresses, optimizes, and looks for mistakes in your JavaScript. To try out the Closure Compiler application with a simple JavaScript program, follow the steps below.

    To work through this exercise you need the Java Runtime Environment version 6.

    1. Download the Closure Compiler package

      Create a working directory called closure-compiler.

      Download the Closure Compiler compiler.jar file and save it in closure-compiler.

    2. Create a JavaScript file

      Create a file named hello.js containing the following JavaScript:

      // A simple function. 
      function hello(longName) { 
        alert('Hello, ' + longName); 
      } 
      hello('New User');

      Save this file in the closure-compiler directory.

    3. Compile the JavaScript file

      Run the following command from the closure-compiler directory:

      java -jar compiler.jar --js hello.js --js_output_file hello-compiled.js
      

      This command creates a new file called hello-compiled.js, which contains the following JavaScript:

      function hello(a){alert("Hello, "+a)}hello("New User");

      Note that the compiler has stripped comments, whitespace and an unnecessary semi-colon. The compiler has also replaced the parameter name longName with the shorter name a. The result is a much smaller JavaScript file.

      To confirm that the compiled JavaScript code still works correctly, include hello-compiled.js in an HTML file like this one:

      <html> 
      <head><title>Hello World</title></head> 
      <body> 
      <script src="hello-compiled.js"></script> 
      </body> 
      </html>

      Load the HTML file in a browser, and you should see a friendly greeting!

    Next Steps

    This example illustrates only the most simple optimizations performed by the Closure Compiler. To learn more about the compiler's capabilities, read Advanced Compilation and Externs.

    To learn more about other flags and options for the Closure Compiler, execute the jar with the --help flag:

    java -jar compiler.jar --help
    
    Posted by WebProgrammer 1010
    개발노트/Etc...2009/11/23 10:25
    [참고]
    http://www.google.co.kr/support/webmasters/bin/topic.py?topic=8459&hl=ko

    [퍼온글]

    구글의 검색 결과에 있는 내용을 삭제하고 싶으세요?

    구글은 그 검색 결과에 있어서 그 품질을 가장 중요하게 봅니다. 그렇기 때문에 구글은 사용자의 사이트에서 페이지들을 목록화하는 것을, 그 페이지에 대한 책임이 있는 관리자의 요청이 있을 때에만 중지합니다. 이 정책은 어떤 페이지가 구글의 색인에서 부당하게 제거되지 않도록 보호해주기 위해서 필요합니다.

    구글은 구글의 사용자를 위해 완전하고 공평한 검색 결과를 제공하기 위한 의무로, 웹에서 정보를 검열하는 행동에 참여할 수 없습니다.

     삭제 기능

    다음의 삭제 기능들은 구글이 다음 번에 사용자의 사이트 페이지를 색인 할 때 적용됩니다. (보통 6-8주 걸립니다.)

     사용자 웹사이트의 URL 바꾸기

    구글은 페이지의 URL주소와 그의 내용을 밀접히 관련하기 때문에 수동적으로 직접 URL 주소를 변경할 수는 없습니다. 하지만 구글은 인터넷 페이지들을 정기적으로 새롭게 수집하기 때문에 그럴 때마다 변경될 것입니다. 수집하는 것 역시 자동으로 이루어지기 때문에 저희가 수동적으로 일정한 사이트만 더욱 자주 검색할 수는 없습니다.

    만약에 사이트가 변경이 되었으면 URL 등록 페이지 를 사용하셔서 페이지 추가를 하실 수 있고, 페이지 삭제에 대한 정보는 아래에 있습니다. 하지만 페이지 등록은 시간이 걸릴 수 있으니 삭제를 하신 후 다시 추가를 하시려 해도 저희가 새롭게 수집하기 전에는 결과에 뜨지 않을 수 있습니다.

    구글에 직접 주소 변경을 요청하는 대신, 현재 사용자의 사이트에 연결하고있는 다른 사이트의 링크를 먼저 새롭게 고치는 것을 권장합니다. 그리고 야후! 디렉토리나 오픈 디렉토리에 변경이 입력된 것을 확인하시기 바랍니다. 또는, 전 주소가 HTTP 301 (permanent) redirect를 사용해 방향전환 한다면 저희의 자동 검색기가 새로운 주소를 기록합니다. 이렇게 등록된 페이지가 검색 결과에 나타나려면 보통 6-8주 정도 걸립니다.


     사용자의 웹사이트 URL 제거

    사이트 일부, 또는 전체를 구글이 수집 못하게 하시려면 다음의 내용을 지닌 robots.txt파일을 서버 루트(root) 디렉토리에 저장하세요:

    User-Agent: *
    Disallow: /

    이것은 사이트를 검색기에서 제외하는 표준입니다. 다음의 문서를 참조하시면 이 표준에 대한 더 자세한 정보가 있습니다 (영문 문서입니다): http://www.robotstxt.org/wc/norobots.html

    참조: 만약 긴급하게 하는 요청이고, 구글의 자동 검색 로봇을 못 기다리시면 구글의 자동 삭제 시스템을 사용하세요. 먼저 해당하는 페이지의 관리자가 사이트에 robots.txt 파일을 저장해야 결과에서 자동적으로 링크를 지우는 이 기능이 올바르게 작동합니다.

    웹 서버의 루트(root) 디렉토리에 robots.txt 파일이 저장돼 있으면 페이지들은 계속 구글의 검색 결과에서 제외됩니다. 또한, 루트 디렉토리에 사용자 권위가 없으시더라도 robots.txt 파일을 해당하는 폴더에 저장하면 됩니다. 자동 제외 시스템을 같이 사용하시면 임시적인 180일 동안 구글 검색에서 제외됩니다. (하지만, 루트 폴더가 아닌, 다른 곳에 저장한 상태이면 180일마다 또다시 자동 제외 시스템을 사용하셔야 계속 제외됩니다.)



     각각의 페이지 삭제

    모든 검색 로봇을 막으시려면 다음의 메타 테그(meta tag)를 HTML페이지에 포함하세요:

    <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">

    구글 로봇을 제외한 다른 검색 로봇을 허용하시려면 다음의 메타 태그를 사용하세요:

    <META NAME="GOOGLEBOT" CONTENT="NOINDEX, NOFOLLOW">

    이 표준 메타 태그에 대한 더 많은 정보가 필요하시면 다음 페이지를 방문하세요: http://www.robotstxt.org/wc/exclusion.html#meta.

    참조: 만약 긴급하게 하는 요청이고, 구글의 자동 검색 로봇을 못 기다리시면 구글의 자동 제외 시스템을 사용하세요. 먼저 해당하는 페이지의 관리자가 페이지의 HTML 안에 올바른 메타 태그를 입력해야 이 시스템의 기능이 작동합니다.


     사이트 내용의 제거

    구글 검색 결과에는 URL 내용을 보여드립니다. 나타나는 검색어들을 bold체로 보기 쉽게 하고, 문맥으로 내용을 파악하실 수 있게 해드립니다. 이렇게 내용을 미리 볼 수 있게 하여 사용자가 원하는 결과를 더욱 정확하게 찾을 수 있게 해 드립니다.

    구글이 자신의 페이지를 보지 못하도록 하고 싶다면 다음 태그를 사용하세요:

    <META NAME="GOOGLEBOT" CONTENT="NOSNIPPET">

    참고: 삭제할 때에는 저장되어 있던 페이지도 삭제됩니다.

    참조: 만약 긴급하게 하는 요청이고, 구글의 자동 검색 로봇을 못 기다리시면 구글의 자동 제외 시스템을 사용하세요. 먼저 해당하는 페이지의 관리자가 페이지의 HTML 안에 올바른 메타 태그를 입력해야 이 시스템의 기능이 작동합니다.


     저장된 페이지의 제거

    구글은 수집한 모든 문서들을 저장해둡니다. 구글은 저장된 문서를 사용자들을 위해 제공하고, 무슨 이유로 사이트에 접속이 불가능하면 구글의 저장된 페이지를 사용하여 구글이 수집했던 당시의 모습 그대로 볼 수 있습니다. 저장된 페이지는 위 부분에 원본이 아닌 복사된 내용임을 설명하는 메시지가 있습니다.


    만약 로봇이 귀하의 사이트에서 내용을 수집 못하게 하고 싶다면, NOARCHIVE 메타 태그를 사용하세요. 이 태그는 문서의 부분에 다음과 같이 배치 하세요.

    <META NAME="ROBOTS" CONTENT="NOARCHIVE">

    만일 목록을 붙이는 다른 로봇들이 사용자의 페이지에 있는 내용을 수집하는 것을 허락하고, 단지 구글의 로봇들이 페이지를 저장하는 것을 막고 싶으시다면, 다음 태그를 사용하세요.:

    <META NAME="GOOGLEBOT" CONTENT="NOARCHIVE">

    참조: 이 태그는 페이지에서 단지 저장된 페이지만 삭제합니다. 구글은 계속해서 페이지를 색인하고 그 일부 내용을 보여줍니다.

    참조: 만약 긴급하게 하는 요청이고, 구글의 자동 검색 로봇을 못 기다리시면 구글의 자동 제외 시스템을 사용하세요. 먼저 해당하는 페이지의 관리자가 페이지의 HTML 안에 올바른 메타 태그를 입력해야 이 시스템의 기능이 작동합니다.


     오래된 링크(대드 링크) 삭제

    구글은 정기적으로 새롭게 웹 페이지를 수집합니다. 구글은 웹을 색인하며 새로운 페이지를 찾고, 삭제 된 링크는폐기하고, 링크를 자동적으로 업데이트 합니다. 접속과 연결이 안 되는 링크는 색인에서 없어집니다.

    참조: 만약 긴급하게 하는 요청이고, 구글이 다음번에 사용자의 사이트를 색인 할 때까지 기다릴 수 없다면 저희의 자동 URL 삭제 시스템을 사용하세요. 저희는 웹상에 페이지가 더이상 존재하지 않을 때만 사용자의 삭제 요청을 받아들일 수 있습니다.


     구글 이미지 검색에서 이미지 삭제

    만약 사용자가 구글의 이미지 검색에서 결과 내용을 삭제하셔야 한다면, 그 사이트의 웹 마스터의 참여가 있어야 합니다. 페이지의 웹 마스터에게 robots.txt 파일을 서버의 root에 추가하도록 해주세요. (만약 그것을 서버 루트(root)에 넣을 권리가 없다면 그것을 해당하는 디렉토리 부분에 넣을 수 있습니다.)

    예시: 만일 사용자의 사이트가 www.yoursite.com/images/dogs.jpg 이고 구글이 그 사이트에서 수집한 dogs.jpg 이미지를 포함하지 않기를 바라신다면,

    사용자는 www.yoursite.com/robots.txt 라고 불리는 파일을 만들어야 합니다.

    그리고 이 파일 안에는 다음 텍스트 내용이 있어야 합니다.

    User-Agent: Googlebot-Image
    Disallow: /images/dogs.jpg

    저희의 목록에서 사용자의 사이트에 있는 모든 이미지를 삭제하려면 사용자의 서버 root에 다음 robots.txt 파일이 있어야 합니다.

    User-Agent: Googlebot-Image
    Disallow: /

    웹 마스터가 이 파일을 추가한 후에는googlebot@google.com로 그 사실과 그 파일의 위치에 대한 메모를 보내주세요. 저희는 48시간 내에 그 이미지를 삭제해 드릴 것입니다.

    출처 : Tong - anidu012님의 기본통

    Posted by WebProgrammer 1010

    넘기는 url 이 post 방식을때 iis 405 에러가 나온다.
    간단하게 method=get 로 변경하면 되지만 열리는 페이지에 쓸모없는 값들이 보인다.
    이럴때는 그냥 맘편하게 원도우 오픈을 이용해서 하면 간단히 해결할수있다.

    function linkSite(obj) {
     
     var f  = obj; 

     if(f.selSite.value == ""){
      alert("이동할 싸이트를 선택해 주세요.");
            return false;
     }else{ 
      //f.target ="_blank";    
      //f.action = obj.selSite.value;
      window.open(f.selSite.value, "", "width=950, height=650, menubar=yes, toolbar=yes,  location=yes, scrollbars=yes, resizable=yes ");
             //return true;
      return false;
     } 
     

    Posted by WebProgrammer 1010
    <nobr style="text-overflow:ellipsis;overflow;hidden;width;250px"></nobr>
    Posted by WebProgrammer 1010

    <html>
    <head>
        <title>http://www.blueb.co.kr</title>

    <script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAAdV0OihhLfo4ru8N1BXzlWxSJ87f2VNqmObhB7kj4DJwDOGkiiBR3Nh79Pxxmk0DgEb3TTwZHI-Fp1g"></script>
    <script type="text/javascript" src="http://www.blueb.co.kr/SRC/javascript/js/gfeedfetcher.js"></script>
    <style type="text/css">
    .labelfield{ /*CSS for label field in general*/
    color:brown;
    font-size: 90%;
    }

    .datefield{ /*CSS for date field in general*/
    color:gray;
    font-size: 90%;
    }

    #example1 li{ /*CSS specific to demo 1*/
    margin-bottom: 4px;
    }

    #example2 div{ /*CSS specific to demo 2*/
    margin-bottom: 5px;
    }

    #example2 div a{ /*CSS specific to demo 2*/
    text-decoration: none;
    }

    #example3 a{ /*CSS specific to demo 3*/
    color: #D80101;
    text-decoration: none;
    font-weight: bold;
    }

    #example3 p{ /*CSS specific to demo 3*/
    margin-bottom: 2px;
    }

    code{ /*CSS for insructions*/
    color: red;
    }
    </style>
    </head>
    </body>


    <b>Example 1: (Single RSS feed, 10 entries, "<code>date</code>" field enabled, sort by <code>title</code>)</b><p>
    <a href="javascript:cssfeed.init()"><B>본 항목을 새로고침</B></a><br>
    <script type="text/javascript">
    var cssfeed=new gfeedfetcher("example1", "example1class", "")
        cssfeed.addFeed("문화일보", "http://news.naver.com/rss/rss_presscenter.nhn?office_id=021") //RSS주소 및 제목
        cssfeed.displayoptions("date") //날짜 필드 보여주기
        cssfeed.setentrycontainer("li") //정렬은 Li태그로
        cssfeed.filterfeed(10, "title") //목록은 10개
        cssfeed.init() //Always call this last
    </script>
    <br><br>

    <b>Example 2: (Two RSS feeds, 6 entries, "<code>label"</code>, "<code>datetime</code>", and "<code>snippet</code>" fields enabled, sort by <code>label</code>)</b><p>
    <a href="javascript:socialfeed.init()"><B>본 항목을 새로고침</B></a><br>
    <script type="text/javascript">
    var socialfeed=new gfeedfetcher("example2", "example2class", "_new")
        socialfeed.addFeed("동아일보", "http://news.naver.com/rss/rss_presscenter.nhn?office_id=020") //Specify "label" plus URL to RSS feed
        socialfeed.addFeed("조선일보", "http://news.naver.com/rss/rss_presscenter.nhn?office_id=023") //Specify "label" plus URL to RSS feed
        socialfeed.displayoptions("label datetime snippet") //show the specified additional fields
        socialfeed.setentrycontainer("div") //Display each entry as a DIV
        socialfeed.filterfeed(6, "label") //Show 6 entries, sort by label
        socialfeed.init() //Always call this last
    </script>
    <br><br>


    <b>Example 3: (Three RSS feeds, 8 entries, "<code>datetime</code>" and "<code>snippet</code>" fields enabled, sort by <code>date</code>)</b><p>
    <a href="javascript:newsfeed.init()"><B>본 항목을 새로고침</B></a><br>

    <script type="text/javascript">
    var newsfeed=new gfeedfetcher("example3", "example3class", "_new")
        newsfeed.addFeed("서울신문", "http://news.naver.com/rss/rss_presscenter.nhn?office_id=081") //Specify "label" plus URL to RSS feed
        newsfeed.addFeed("한겨레", "http://news.naver.com/rss/rss_presscenter.nhn?office_id=028") //Specify "label" plus URL to RSS feed
        newsfeed.addFeed("중앙일보", "http://news.naver.com/rss/rss_presscenter.nhn?office_id=025") //Specify "label" plus URL to RSS feed
        newsfeed.displayoptions("datetime snippet") //show the specified additional fields
        newsfeed.setentrycontainer("p") //Display each entry as a paragraph
        newsfeed.filterfeed(8, "date") //Show 8 entries, sort by date
        newsfeed.init() //Always call this last
    </script>


    </body>
    </html> 

    Posted by WebProgrammer 1010
    개발노트/DataBase2009/11/05 18:07

    EyeQ MC - Developer Site

    오라클 10g 이상에서 expdp와 impdp를 사용한 tablespace 복사 방법

    - 복사할 원본 tablespace 이름은 “SRC”, 사용자는 “SRC_USER”라 한다. - 복사 대상 tablespace 이름은 “COPY”, 사용자는 “COPY_USER”라 한다. - system 권한이 있어야 한다.(password는 “manager”)

    < 순서 >

    1. 복사본 tablespace 및 사용자 생성

    2. Dump 디렉토리 설정

    3. 원본 export

    4. 원본 import


    1. 복사본 tablespace 및 사용자 생성(SQL-Plus 로긴 필요)

    ⅰ)	tablespace 생성
    	CREATE TABLESPACE copy
    		DATAFILE 'C:\ORACLExe\ORADATA\XE\copy00.dbf' SIZE 100M
    		DEFAULT STORAGE 
    		(	INITIAL    500K
     			NEXT      10K
     			MINEXTENTS 2
     			MAXEXTENTS 50
    			PCTINCREASE 50);
    		
    ⅱ)	사용자 생성 및 권한 부여(패스워드는 동일)
    	create user copy_user
    		identified by copy_user
    		default tablespace copy;
    	
    	grant connect,resource to copy_user;
    	grant create table, create sequence, create view TO copy_user;
    	
    ⅲ)	데이타 파일 추가(사이즈에 맞게 설정)
    	ALTER TABLESPACE copy
    	ADD DATAFILE 'C:\ORACLExe\ORADATA\XE\copy01.dbf' SIZE 100M
    	AUTOEXTEND ON NEXT 10M
    	MAXSIZE 1G;	
    	

    2. Dump 디렉토리 설정(SQL-Plus 로긴 필요)

    ⅰ) dump 받을 디렉토리 설정
    	CREATE OR REPLACE DIRECTORY expdpDIR AS 'C:\temp';
    ⅱ) 설정된 디렉토리 확인
    	select * from dba_directories;
    	
    ⅲ)	디렉토리에 대한 권한 부여
    	grant read, write on directory expdpDIR to system,src_user,copy_user;
    

    3. 원본 export

    ⅰ)	오라클(10g) 설치 디렉토리의 bin 디렉토리로 이동
    ⅱ) export 실행
    	expdp system/manager SCHEMAS=SRC directory=expdpdir dumpfile=expdpSRC.dmp job_name=SRC_JOB logfile=SRC_exp.log
    	

    4. 원본 import

    ⅰ) 오라클(10g) 설치 디렉토리의 bin 디렉토리로 이동
    ⅱ) import 실행
    	impdp system/manager REMAP_SCHEMA=SRC:COPY REMAP_TABLESPACE=SRC:COPY directory=expdpDIR dumpfile=expdpSRC.dmp job_name=COPY_JOB logfile=COPY_imp.log
    
    ⅲ) 메시지 확인
    	"작업이 16:46:13에서 성공적으로 완료됨"
     
    oracle_tablespace_copy.txt · 마지막 수정: 2008/12/05 11:41 작성자 jsmoon
     
    Posted by WebProgrammer 1010
    개발노트/DataBase2009/11/05 18:04
    제품 : ORACLE SERVER

    작성날짜 : 2004-05-28

    10G DATAPUMP: REMAP TABLESPACE 기능
    ===================================


    PURPOSE


    이 문서는 datapump의 REMAP_TABLESPACE 파라미터를 사용하여 데이터베이스 객체를
    하나의 테이블 스페이스에서 다른 테이블스페이스로 옮기는 방법을 설명하는 것을 목적으로
    한다.

    Explanation

    Example


    범위와 적용 방안


    데이터베이스 관리자 - 오라클 기술 지원 애널리스트

    다음은, REMAP_TABLESPACE 기능을 사용하여 데이터베이스 객체를 하나의 테이블스페이스로 부터
    다른 테이블스페이스로 옮기는 예제를 보여주고 있다.

    이 작업은 datapump 임포트에를 통해 수행되며, 다음 세개의 datapump 명령에 의해 소스 스키마로 부터
    객체를 추출 할 수 있다.

    expdp SYSTEM/password TABLES=<schemaname.tablename>
    expdp SYSTEM/password SCHEMAS=<schema>
    expdp SYSTEM/password FULL=y

    다음은 Scott의 객체를 NewScott의 스키마로 datapump export 명령에 의해 추출하는 절차를
    보여준다.

    expdp SYSTEM/manager SCHEMAS=scott DIRECTORY=dpump_dir1 DUMPFILE=hr.dmp

    =====================

    sun1/home/prod/scmiller> sqlplus

    SQL*Plus: Release 10.1.0.2.0 - Production on Tue Dec 23 14:29:18 2003

    Copyright (c) 1982, 2003, Oracle. All rights reserved.

    Enter user-name: / as sysdba

    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
    With the Partitioning, OLAP and Data Mining options

    SQL> create directory dpump_dir1 as '/home/prod/scmiller';

    Directory created.

    SQL> grant read, write on directory dpump_dir1 to public;

    Grant succeeded.

    SQL> exit
    Disconnected from Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 -
    With the Partitioning, OLAP and Data Mining options

    sun1/home/prod/scmiller> expdp system/manager schemas=scott
    DIRECTORY=dpump_dir1 DUMPFILE=newtbs.dmp

    Export: Release 10.1.0.2.0 - on Tuesday, 13 January, 2004 12:29

    Copyright (c) 2003, Oracle. All rights reserved.

    Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 -
    With the Partitioning, OLAP and Data Mining options
    FLASHBACK automatically enabled to preserve database integrity.
    Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01": system/******** schemas=scott DIRECT
    Estimate in progress using BLOCKS method...
    Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
    Total estimation using BLOCKS method: 192 KB
    Processing object type SCHEMA_EXPORT/USER
    Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
    Processing object type SCHEMA_EXPORT/ROLE_GRANT
    Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
    Processing object type SCHEMA_EXPORT/SE_PRE_SCHEMA_PROCOBJACT/PROCACT_SCHEMA
    Processing object type SCHEMA_EXPORT/TABLE/TABLE
    Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
    Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
    Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
    Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
    Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
    . exported "SCOTT"."DEPT" 5.656 KB 4 rows
    . exported "SCOTT"."EMP" 7.820 KB 14 rows
    . exported "SCOTT"."SALGRADE" 5.585 KB 5 rows
    . exported "SCOTT"."BONUS" 0 KB 0 rows
    Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
    ******************************************************************************
    Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
    /home/prod/scmiller/newtbs.dmp
    Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at 12:36

    Scott의 객체가 어느 테이블스페잇에 존재하는지 확인 해 보자 :

    Enter user-name: scott/scott

    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 -
    With the Partitioning, OLAP and Data Mining options

    SQL> select owner, tablespace_name from dba_segments where owner='SCOTT';

    OWNER TABLESPACE_NAME

    ------------------------------
    SCOTT USERS
    SCOTT USERS
    SCOTT USERS
    SCOTT USERS
    SCOTT USERS
    SCOTT USERS

    이제 관련 테이블들을 삭제해 보자 :

    SQL> drop table SALGRADE;

    Table dropped.

    SQL> drop table emp;

    Table dropped.

    SQL> drop table dept;

    Table dropped.

    SQL> drop table bonus;

    Table dropped.

    Import는 다음 명령으로 실행 시킨다.

    impdp Scott/Scott DIRECTORY=dpump_dir1 DUMPFILE=newtbs.dmp
    REMAP_TABLESPACE='USERS':'NEW_USERS'

    sun1/home/prod/scmiller> impdp SYSTEM/manager DIRECTORY=dpump_dir1
    DUMPFILE=newtbs.dmp REMAP_TABLESPACE='USERS':'NEW_USERS'

    Import: Release 10.1.0.2.0 - Production on Tuesday, 23 December, 2003 14:50

    Copyright (c) 2003, Oracle. All rights reserved.

    Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Produn
    With the Partitioning, OLAP and Data Mining options
    Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
    Starting "SYSTEM"."SYS_IMPORT_FULL_01": SYSTEM/******** DIRECTORY=dpump_dir1 D
    Processing object type SCHEMA_EXPORT/USER
    Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
    Processing object type SCHEMA_EXPORT/ROLE_GRANT
    Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
    Processing object type SCHEMA_EXPORT/SE_PRE_SCHEMA_PROCOBJACT/PROCACT_SCHEMA
    Processing object type SCHEMA_EXPORT/TABLE/TABLE
    Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
    . imported "NEWSCOTT"."DEPT" 5.656 KB 4 rows
    . imported "NEWSCOTT"."EMP" 7.820 KB 14 rows
    . imported "NEWSCOTT"."SALGRADE" 5.585 KB 5 rows
    . imported "NEWSCOTT"."BONUS" 0 KB 0 rows
    Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
    Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
    Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
    Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
    Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
    Job "SYSTEM"."SYS_IMPORT_FULL_01" successfully completed at 14:53

    sun1/home/prod/scmiller> sqlplus

    SQL*Plus: Release 10.1.0.2.0 - Production on Tue Dec 23 14:54:13 2003

    Copyright (c) 1982, 2003, Oracle. All rights reserved.

    sun1% sqlplus

    SQL*Plus: Release 10.1.0.2.0 - Production on Tue Jan 13 12:53:36 2004

    Copyright (c) 1982, 2003, Oracle. All rights reserved.

    Enter user-name: / as sysdba

    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 -
    With the Partitioning, OLAP and Data Mining options

    SQL> select owner, tablespace_name from dba_segments where owner='SCOTT';

    OWNER TABLESPACE_NAME


    ------------------------------
    SCOTT NEW_USERS
    SCOTT NEW_USERS
    SCOTT NEW_USERS
    SCOTT NEW_USERS
    SCOTT NEW_USERS
    SCOTT NEW_USERS

    6 rows selected.

    =======================

    여러개의 REMAP_TABLESPACE 파라미터를 지정할 수는 있으나, 두개 이상의 타겟 테이블스페이스에 대해
    동일한 소스 테이블스페이스를 지정할 수 없다. 타겟 스키마는 타겟 테이블스페이스 내
    충분한 quota를 부여 받은 상태이어야 한다.

    주의해야 할 점은 REMAP_TABLESPACE 파라미터는 Data Pump Import에서만 유일하게 제공하는 테이블스페이스
    remap 이법이라는 것이다. 이것은, Import 유틸리티 보다 깨끗하고 단순하게 작업을 수행할 수 있게 해
    준다. Import 유틸리티에서는, 사용자의 default tablespace를 변경 시키기위해서는, export 및
    사용자 drop, 사용자의 생성, 데이터 import와 같은 여러 단계의 작업을 수행 해야만 했었다. 이 방법에는
    많은 제약 사항이 존제하는데 (테이블스페이스 지정과 관련 구문) 이것은 일부 DDL이 수행 실패하는
    결과를 초래 하기도 한다.

    그러나 Data Pump Import는 REMAP_TABLESPACE 파라미터를 제공하므로, 모든객체에 대해 DDL 구문에
    어떤 테이블스페이스 지정 구문을 사용했던 상관 없이 안전하게 remap 시킬 수 있는 기능을 제공한다.

    Reference Documents

    Note:261085.1 Datapump: Remap Tablespace feature
    Oracle Database Utilities 10g Release 1 (10.1)


    출처 : http://kr.forums.oracle.com/forums/thread.jspa?messageID=1699010


    Posted by WebProgrammer 1010
    개발노트/Eclipse2009/11/03 10:37

    Posted by ObLiB on August 20, 2008

    EclipseWhile trying to install Subversive on Eclipse Ganymede I get this error :

    Cannot find a solution where both Match[requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.team.svn.feature.group/[0.7.1.I20080612-1500,0.7.1.I20080612-1500]] and Match[requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.team.svn.feature.group/[0.7.3.I20080814-1500,1.0.0)] can be satisfied.
    Unsatisfied dependency: [org.polarion.eclipse.team.svn.connector.svnkit.feature.group 2.0.3.I20080814-1500] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.team.svn.feature.group/[0.7.3.I20080814-1500,1.0.0)
    Unsatisfied dependency: [org.polarion.eclipse.team.svn.connector.svnkit.feature.group 2.0.3.I20080814-1500] requiredCapability: org.eclipse.equinox.p2.iu/org.polarion.eclipse.team.svn.connector.feature.group/0.0.0
    Unsatisfied dependency: [org.polarion.eclipse.team.svn.connector.svnkit15.feature.group 2.0.3.I20080814-1500] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.team.svn.feature.group/[0.7.3.I20080814-1500,1.0.0)
    Unsatisfied dependency: [org.polarion.eclipse.team.svn.connector.svnkit15.feature.group 2.0.3.I20080814-1500] requiredCapability: org.eclipse.equinox.p2.iu/org.polarion.eclipse.team.svn.connector.feature.group/0.0.0
    Unsatisfied dependency: [org.polarion.eclipse.team.svn.connector.feature.group 2.0.3.I20080814-1500] requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.team.svn.feature.group/[0.7.3.I20080814-1500,1.0.0)

    Just like everyone I add this url in p2 :
    http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/
    The error comes out when I tried to Install the followings:

    Ganymede SVN Provider

    So I tried again but this time I unchecked the SVN Connectors and kept the SVN Team Provider. This time the installation worked well and I restarted my Eclipse to finish it. Of course, even if the SVN Team Provider was installed, I can't use it without a SVN Connector. So I retried to install the SVN Connector, but the error cames out again...

    On the subversive website they talk about the Subversive plug-in update site:
    http://download.eclipse.org/technology/subversive/0.7/update-site/
    So I add it in p2 and I retried the install but it failed again...

    At this time I really don't understand what was appening. But after some google search, I got the solution: The SVN Team Provider version in the Ganymede update site is not the latest version. To get it works with the Connectors you've got to update it to the latest version. Here are the steps to make it works :

    1. Go to Help->Software Updates.
    2. Click on the "Available Software" tab.
    3. Unfold the Ganymede->Collaboration Tools node, and if your experience is like mine, you will see the "SVN Team Provider (Incubation)" item with this version identifier, "0.7.1.I20080612-1500". What you really need (since the Subversive/Polarion team posted updates) is the version from 2008-08-01.
    4. Click on "Manage Sites…".
    5. Uncheck the "Ganymede" checkbox (http://download.eclipse.org/releases/ganymede)
    6. Scroll down to find "http://download.eclipse.org/technology/subversive/0.7/update-site/", select it and click "OK".
    7. You should be back on the "Available Software" tab, with only the subversive items present. Unfold the "Subversive SVN Team Provider Plugin (Incubation)" item, and you will see the "SVN Team Provider (Incubation)" item. Note that the version identifier is "0.7.3.I20080814-1500".
    8. Check the box, and click"install". The install will be change to an update. Restart Eclipse at the end of the install.
    9. Go to "Help->Software Updates".
    10. Choose the "Available Software" tab.
    11. Click the "Add Site" button, and add "http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/".
    12. Check the SVNKit Connectors and click "Install". Restart Eclipse at the end of the install.
    13. Subversive should be working !

    Thanks to Frank Carver and Graig Thomas

    Posted by WebProgrammer 1010
    개발노트/Linux2009/10/31 23:24
    find . -name "*.tar.gz" -exec tar xvzf{}\;
    Posted by WebProgrammer 1010
    개발노트/Tomcat2009/10/30 13:15

    Tomcat FAQ

    Class Not Found 문제


    print-friendly
    version
    Preface
    이 페이지에서는 당신이 Class Not Found 에러나 그와 유사한 에러를 만났을 때에 대해 논하고 있다. 당신이 다음 문서들을 읽어 보기를 강력히 추천한다: NoClassDefFoundError exception을 만났다면, 근원적인 문제는 ClassNotFound Exception과 같은 원인일 것이다.
    Questions

    Answers
    jsp:useBean가 정상적으로 실행되지 않습니까?
    다음을 확인해 보세요:
    • 당신의 빈즈는 패키지 선언이 되어 있는 클래스야 합니다.
    • 패키지 구조를 포함한 완전한 클래스 명 (예:com.bar.package.MyClass) 이나
    • JSP페이지 위에 import 를 이용 (예: <%@ pageimport="com.bar.package.MyClass"%>)하여야 합니다.

    java.lang.NoClassDefFoundError: javax/servlet/Filter 라는 메시지를 받습니까?
    아마도 servlet.jar파일이 있어서는 안될 어떤 곳에 복사되어 있을 수 있습니다. 이런 상황은 클래스 로더의 동작을 방해 합니다. 톰캣의 클래스 로더가 기대했던 대로 동작하지 않기 때문입니다. (위의 메시지 처럼)

    NoClassDefFoundError: org/xml/sax/InputSource라는 메시지를 받습니까?
    당신의 classpath안에 있는 XML api jar 파일들에 충돌이 생겼습니다. 더 많은 정보는 README나 RELEASE_NOTES를 참고하세요.
    Posted by WebProgrammer 1010
    개발노트/Eclipse2009/10/30 11:46
    이번에 새로나온 이클립스 갈릴레오 버전에서 SVN 세팅법 입니다. 기존 3.4버전에서의 방법과 큰 차이가 없으며, 설치는 그리 오래걸리지 않습니다. ^^;

    Galileo버전에서 SVN설치에는 Subversive.와 SVN Connector가 설치되어야 합니다. 효과적인 설명을 위해 각각을 따로 설치합니다.

    일단 subversive부터 설치합니다.
    1. Eclipse 메뉴의 Help -> Install New Software ...를 선택합니다.
    2. Work with에서 Galileo 항목을 선택하고 아래 화면에서 Collaboration -> Subversive로 시작하는 두항목을 선택합니다.
    3. 이상이 없으니 next 버튼~
    4. 라이센스를 확인하고 동의 선택 후 finish를 하면 설치 됩니다.
    5. 재부팅~
    이로서 svn을 이용할 기본단계는 끝났습니다. 그러나 connector가 없으므로 svn을 통해 checkout도 commit도 update도 할수가없습니다.

    connector가 등록되지않은 모습..

    이번에는 Subversive SVN Connector를 설치합니다.
    1. 똑같은 방법으로 이클립스에서 Install New Software를 선택합니다.
    2. Add 버튼을 눌러 Name에는 적당한 이름을, Location에는 http://www.polarion.com/products/svn/subversive.php?src=eclipseproject 에서 Galileo Release부분의  [required] Subversive SVN Connectors 항목의 주소를 복사해다 붙여넣습니다.
    3. 등록한화면에서 Subversive SVN Connector를 선택합니다. (Source는 필요없습니다.)
    4. 위와 같은방법으로 설치를 진행합니다.

    설치가 완료되면 환경설정부분에서 SVN설정부분에 다음과같이 표시됩니다.
    주의) 개인적으로 3.4 버전의 connector중 기본 설정된 connector의 경우 이용중 svn기능을 사용할 수없는 문제가 잇었습니다.(기억이 가물가물해서 에러내용는....ㅡㅡ;;) 혹시나 이와같은 문제가 발생할경우 위의 리스트 중 적절히 변경해 가면서 테스트를 진행해 보세요.

    끝~ 마지막으로 SVN checkout, commit도 문제없이 이루어지는지 확인하세요
    Posted by WebProgrammer 1010

    특수문자

    ISO Entities

    Name Code Number Code Glyph Description
    &lsquo;     left single quote
    &rsquo;     right single quote
    &sbquo;     single low-9 quote
    &ldquo;     left double quote
    &rdquo;     right double quote
    &bdquo;     double low-9 quote
    &dagger;     dagger
    &Dagger;     double dagger
    &permil;     per mill sign
    &lsaquo;     single left-pointing angle quote
    &rsaquo;     single right-pointing angle quote
    &spades;     black spade suit
    &clubs;     black club suit
    &hearts;     black heart suit
    &diams;     black diamond suit
    &oline;     overline, = spacing overscore
    &larr;     leftward arrow
    &uarr;     upward arrow
    &rarr;     rightward arrow
    &darr;     downward arrow
    &trade;     trademark sign
     
    Name Code Number Code Glyph Description
      &#09; horizontal tab
      &#10; line feed
      &#32; space
      &#33; !  exclamation mark
    &quot; &#34; "  double quotation mark
      &#35; #  number sign
      &#36; $  dollar sign
      &#37; %  percent sign
    &amp; &#38; &  ampersand
      &#39; '  apostrophe
      &#40; (  left parenthesis
      &#41; )  right parenthesis
      &#42; *  asterisk
      &#43; +  plus sign
      &#44; ,  comma
      &#45; -  hyphen
      &#46; .  period
     
    Name Code Number Code Glyph Description
    &frasl; &#47; /  slash
      &#48;-
    &#57;
      digits 0-9
      &#58; :  colon
      &#59; ;  semicolon
    &lt; &#60; <  less-than sign
      &#61; =  equals sign
    &gt; &#62; >  greater-than sign
      &#63; ?  question mark
      &#64; @  at sign
      &#65;-
    &#90;
      uppercase letters A-Z
      &#91; [  left square bracket
      &#92; \  backslash
      &#93; ]  right square bracket
      &#94; ^  caret
      &#95; _  horizontal bar (underscore)
      &#96; `  grave accent
      &#97;-
    &#122;
      lowercase letters a-z
      &#123; {  left curly brace
      &#124; |  vertical bar
     
    Name Code Number Code Glyph Description
      &#125; }  right curly brace
      &#126; ~  tilde
      &#127;-
    &#149;
      unused
    &ndash; &#150;   en dash
    &mdash; &#151;   em dash
      &#152;-
    &#159;
      unused
    &nbsp; &#160;    nonbreaking space
    &iexcl; &#161; ¡  inverted exclamation
    &cent; &#162; ¢  cent sign
    &pound; &#163; £  pound sterling
    &curren; &#164; ¤  general currency sign
    &yen; &#165; ¥  yen sign
    &brvbar; or &brkbar; &#166; ¦  broken vertical bar
    &sect; &#167; §  section sign
    &uml; or &die; &#168; ¨  umlaut
    &copy; &#169; ©  copyright
    &ordf; &#170; ª  feminine ordinal
    &laquo; &#171; «  left angle quote
    &not; &#172; ¬  not sign
    &shy; &#173; ­  soft hyphen
    &reg; &#174; ®  registered trademark
    &macr; or &hibar; &#175; ¯  macron accent
     
    Name Code Number Code Glyph Description
    &deg; &#176; °  degree sign
    &plusmn; &#177; ±  plus or minus
    &sup2; &#178; ²  superscript two
    &sup3; &#179; ³  superscript three
    &acute; &#180; ´  acute accent
    &micro; &#181; µ  micro sign
    &para; &#182;   paragraph sign
    &middot; &#183; ·  middle dot
    &cedil; &#184; ¸  cedilla
    &sup1; &#185; ¹  superscript one
    &ordm; &#186; º  masculine ordinal
    &raquo; &#187; »  right angle quote
    &frac14; &#188; ¼  one-fourth
    &frac12; &#189; ½  one-half
    &frac34; &#190; ¾  three-fourths
    &iquest; &#191; ¿  inverted question mark
    &Agrave; &#192; À  uppercase A, grave accent
    &Aacute; &#193; Á  uppercase A, acute accent
    &Acirc; &#194;   uppercase A, circumflex accent
     
    Name Code Number Code Glyph Description
    &Atilde; &#195; à uppercase A, tilde
    &Auml; &#196; Ä  uppercase A, umlaut
    &Aring; &#197; Å  uppercase A, ring
    &AElig; &#198; Æ  uppercase AE
    &Ccedil; &#199; Ç  uppercase C, cedilla
    &Egrave; &#200; È  uppercase E, grave accent
    &Eacute; &#201; É  uppercase E, acute accent
    &Ecirc; &#202; Ê  uppercase E, circumflex accent
    &Euml; &#203; Ë  uppercase E, umlaut
    &Igrave; &#204; Ì  uppercase I, grave accent
    &Iacute; &#205; Í  uppercase I, acute accent
    &Icirc; &#206; Π uppercase I, circumflex accent
    &Iuml; &#207; Ï  uppercase I, umlaut
    &ETH; &#208; Р uppercase Eth, Icelandic
    &Ntilde; &#209; Ñ  uppercase N, tilde
    &Ograve; &#210; Ò  uppercase O, grave accent
    &Oacute; &#211; Ó  uppercase O, acute accent
    &Ocirc; &#212; Ô  uppercase O, circumflex accent
    &Otilde; &#213; Õ  uppercase O, tilde
     
    Name Code Number Code Glyph Description
    &Ouml; &#214; Ö  uppercase O, umlaut
    &times; &#215; ×  multiplication sign
    &Oslash; &#216; Ø  uppercase O, slash
    &Ugrave; &#217; Ù  uppercase U, grave accent
    &Uacute; &#218; Ú  uppercase U, acute accent
    &Ucirc; &#219; Û  uppercase U, circumflex accent
    &Uuml; &#220; Ü  uppercase U, umlaut
    &Yacute; &#221; Ý  uppercase Y, acute accent
    &THORN; &#222; Þ  uppercase THORN, Icelandic
    &szlig; &#223; ß  lowercase sharps, German
    &agrave; &#224; à  lowercase a, grave accent
    &aacute; &#225; á  lowercase a, acute accent
    &acirc; &#226; â  lowercase a, circumflex accent
    &atilde; &#227; ã  lowercase a, tilde
    &auml; &#228; ä  lowercase a, umlaut
    &aring; &#229; å  lowercase a, ring
    &aelig; &#230; æ  lowercase ae
    &ccedil; &#231; ç  lowercase c, cedilla
    &egrave; &#232; è  lowercase e, grave accent
     
    Name Code Number Code Glyph Description
    &eacute; &#233; é  lowercase e, acute accent
    &ecirc; &#234; ê  lowercase e, circumflex accent
    &euml; &#235; ë  lowercase e, umlaut
    &igrave; &#236; ì  lowercase i, grave accent
    &iacute; &#237; í  lowercase i, acute accent
    &icirc; &#238; î  lowercase i, circumflex accent
    &iuml; &#239; ï  lowercase i, umlaut
    &eth; &#240; ð  lowercase eth, Icelandic
    &ntilde; &#241; ñ  lowercase n, tilde
    &ograve; &#242; ò  lowercase o, grave accent
    &oacute; &#243; ó  lowercase o, acute accent
    &ocirc; &#244; ô  lowercase o, circumflex accent
    &otilde; &#245; õ  lowercase o, tilde
    &ouml; &#246; ö  lowercase o, umlaut
    &divide; &#247; ÷  division sign
    &oslash; &#248; ø  lowercase o, slash
    &ugrave; &#249; ù  lowercase u, grave accent
    &uacute; &#250; ú  lowercase u, acute accent
    &ucirc; &#251; û  lowercase u, circumflex accent
     
    Name Code Number Code Glyph Description
    &uuml; &#252; ü  lowercase u, umlaut
    &yacute; &#253; ý  lowercase y, acute accent
    &thorn; &#254; þ  lowercase thorn, Icelandic
    &yuml; &#255; ÿ  lowercase y, umlaut


    From : http://www.webmonkey.com
    Posted by WebProgrammer 1010
    <br>

    <style type="text/css">
    .black { COLOR:black; }
    .red { COLOR:#FF0000; }
    .blue { COLOR:BLUE; }
    </style>


    <font onMouseOver="this.className='red';" onMouseOut="this.className='black';">바보</font>

    <br>

    <font onMouseOver="this.className='blue';" onMouseOut="this.className='black';">천재</font>

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

    <td onMouseOver=bgColor="#999999" onMouseOut=bgColor="#000000" bgcolor="#000000"> 내용 </td>

    마우스를 올렸을 때의 색상은 onMouseOver=bgColor="#999999"
    마우스를 내렸을 때의 색상은 onMouseOut=bgColor="#000000" bgcolor="#000000"

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

    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    </HEAD>
    <SCRIPT LANGUAGE="JavaScript">
    <!--

    function setTrColor(obj, color){
            obj.style.backgroundColor=color;
            obj.onmouseout = function(){
                    obj.style.backgroundColor=''; //mouseout 시 색상
            }
    }
    // 뭐...대충 궁여지책으로..ㅋ.ㅋ
    //-->
    </SCRIPT>

    <BODY>
    <TABLE width="300" border="1">
    <TR onMouseOver="setTrColor(this, '#c0c0c0')" >
            <TD>1</TD>
            <TD>2</TD>
            <TD>3</TD>
    </TR>
    <TR onMouseOver="setTrColor(this, '#c0c0c0')">
            <TD>4</TD>
            <TD>5</TD>
            <TD>6</TD>
    </TR>
    <TR onMouseOver="setTrColor(this, '#c0c0c0')">
            <TD>7</TD>
            <TD>8</TD>
            <TD>9</TD>
    </TR>
    <TR onMouseOver="setTrColor(this, '#c0c0c0')">
            <TD>7</TD>
            <TD>8</TD>
            <TD>9</TD>
    </TR>

    </TABLE>
    </BODY>
    </HTML>

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

    <td onMouseOver="this.style.backgroundColor='#cccccc'" style="CURSOR: hand" onMouseOut="this.style.backgroundColor=''" bgColor=#e4e4e4> </td>

    Posted by WebProgrammer 1010

    /** 기준소스 IE 전용
        //spec1
         if(document.all.part[0].checked== true) { 
           document.all.spec1[0].disabled=false;
           document.all.spec1[1].disabled=false;
         }else  { 
           document.all.spec1[0].disabled=true;
           document.all.spec1[1].disabled=true;
         }
     
      //spec2  
          if(document.all.part[1].checked== true) { 
           document.all.spec2[0].disabled=false;
           document.all.spec2[1].disabled=false;
         }else  { 
           document.all.spec2[0].disabled=true;
           document.all.spec2[1].disabled=true;
         }
        
       
       //spec3 
         if(document.all.part[2].checked== true) { 
           document.all.spec3[0].disabled=false;
           document.all.spec3[1].disabled=false;
         }else  { 
           document.all.spec3[0].disabled=true;
           document.all.spec3[1].disabled=true;
         }
        
          //spec4 
         if(document.all.part[3].checked== true) { 
           document.all.spec4[0].disabled=false;
           document.all.spec4[1].disabled=false;
           document.all.spec4[2].disabled=false;
         }else  { 
           document.all.spec4[0].disabled=true;
           document.all.spec4[1].disabled=true;
           document.all.spec4[2].disabled=true;
         }
         
         //spec5
         if(document.all.part[4].checked== true) { 
           document.all.spec5[0].disabled=false;
           document.all.spec5[1].disabled=false;
           document.all.spec5[2].disabled=false;
         }else  { 
           document.all.spec5[0].disabled=true;
           document.all.spec5[1].disabled=true;
           document.all.spec5[2].disabled=true;
         }
        
         //spec6 
         if(document.all.part[5].checked== true) { 
           document.all.spec6[0].disabled=false;
           document.all.spec6[1].disabled=false;
           document.all.spec6[2].disabled=false;
         }else  { 
           document.all.spec6[0].disabled=true;
           document.all.spec6[1].disabled=true;
           document.all.spec6[2].disabled=true;
         }
        
           //spec7
         if(document.all.part[6].checked== true) { 
           document.all.spec7[0].disabled=false;
           document.all.spec7[1].disabled=false;
           document.all.spec7[2].disabled=false;
         }else  { 
           document.all.spec7[0].disabled=true;
           document.all.spec7[1].disabled=true;
           document.all.spec7[2].disabled=true;
         }
       
       //spec8
         if(document.all.part[7].checked== true) { 
           document.all.spec8[0].disabled=false;
           document.all.spec8[1].disabled=false;
         }else  { 
           document.all.spec8[0].disabled=true;
           document.all.spec8[1].disabled=true; 
         }
        
         //spec9
         if(document.all.part[8].checked== true) { 
           document.all.spec9[0].disabled=false;
           document.all.spec9[1].disabled=false;
           document.all.spec9[2].disabled=false;
         }else  { 
           document.all.spec9[0].disabled=true;
           document.all.spec9[1].disabled=true; 
           document.all.spec9[2].disabled=true;
         }
        
         //spec10
         if(document.all.part[9].checked== true) { 
           document.all.spec10[0].disabled=false;
           document.all.spec10[1].disabled=false;
           document.all.spec10[2].disabled=false;
         }else  { 
           document.all.spec10[0].disabled=true;
           document.all.spec10[1].disabled=true;
           document.all.spec10[2].disabled=true;
         }
         */

         // 2009.10.26 (anhanho)
         // 지원분야에 맞는 자격요건 체크
         // IE,EE
         var specList = [2,2,2,3,3,3,3,2,3,3]; // 배열의 값이 자동으로 세팅되도록 바꿔줘야함...
         for (var i = 0; i < document.frmInput.part.length; i++) { 
        for(var x = 0 ; x < specList[i] ; x++){
         if(document.frmInput.part[i].checked == true){ 
          document.getElementsByName('spec'+(i+1))[x].disabled = false;
         }else{
          document.getElementsByName('spec'+(i+1))[x].checked = false; 
          document.getElementsByName('spec'+(i+1))[x].disabled = true; 
         }
           }
         }

    Posted by WebProgrammer 1010