90.개발관련문서2008. 8. 12. 11:06
반응형
퍼온곳 : http://kwon37xi.egloos.com/ 

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

초보 Java 웹 개발자들을 위한 학습 로드맵
OKJSP에 자주 가서 요즘 자바 개발자들이 어떻게 살아가나를 보는 편인데, 아주 많이 반복적으로 올라오는 질문이 "대체 뭘 공부해야 하나요? 프레임워크는 Spring을 해야 할까요? iBATIS를 해야 할까요?" 하는 식의 질문들이다(이 질문은 사실 말이 안된다. 왜 그런지 읽다보면 나온다).

Java는 웹 관련 프레임워크들이 너무 다양하고, Ruby나 Python 같은 경우에는 RubyOnRailsDjanog 처럼 하나의 프레임워크 안에 기능별 프레임워크들도 모두 다 All in one 형태로 들어 있어서 혼란을 주지 않는 반면, Java는 각 영역별로 프레임워크가 모두 다르고, 또한 각 영역별로 존재하는 프레임워크들의 종류도 많아서 초보 개발자들에게 극심한 혼란을 주고 있다.

그래서 나름대로 Java Web 개발자들을 위한 학습 로드맵을 정리해 보았다.

1. Java 그 자체
많은 웹 개발자들이 마치 JSP 코드를 짤 줄 알면 그걸로 Java 웹 개발을 할 줄아는 것이라 생각하고 Java 그 자체를 소홀히 하는 것을 본다.
말도 안되는 소리이다. Java를 모르고서 Java 웹 개발을 제대로 한다는 것은 어불 성설이다. Java 그 자체를 먼저 공부하라.

특히 Java 5 문법을 숙지하길 권한다. 이제 우리나라도 점차 Java 5가 대세가 되어 가고 있다. 대부분의 프레임워크들과 WAS(JSP와 서블릿을 구동하는 서버)도 모두 Java 5를 기준으로 바뀌었으며, JVM 자체도 버전이 높을 수록 성능이 더 좋다.

2. JSP와 Servlet 그리고 Model 1
모델 1은, JSP 하나에 DB에 접속해서 쿼리를 날리는 등의 모든 업무적인 기능(Business Logic)을 넣고, 그 아래에 HTML 코드를 박아 넣는 식으로 개발하는 것을 의미한다.
아직도 많은 개발자들이 여기에 길들여져 있는데, 일단 JSP 자체에 대한 기본기를 익힌 뒤로는 재빨리 버려야 할 습관이다.

그리고 많은 개발자들이 Servlet을 무시하고 JSP만 하는 것을 보곤 하는데, Servlet에 대한 학습이 제대로 이뤄지지 않으면 더 나은 웹 개발이 곤란하다. Servlet에 대한 기초 개념을 확실히 잡길 권한다.

3. Model 2 - 프레임워크의 등장
JSP로 열심히 개발을 하다보니 프로젝트 규모도 커지기 시작하고, JSP 파일 크기도 수천줄에 달하는등 엄청나게 커진다.
그런데 이 JSP에다 두서없이 모든 기능을 다 때려 넣다보니 JSP마다 똑같은 기능들이 Copy&Paste로 들어가고, JSP 안에 들어 있는 Java 코드들에서 에러가 발생하면 찾아내서 디버깅 하는 일이 지옥같이 느껴지기 시작한다.

여기서 Model 2가 구원자로 등장한다.

Model 2는 말만 멋드러졌지 실제로는 간단한 개념이다.

JSP에서 수행하던 DB 쿼리 등의 작업을 Servlet에게 넘겨주고 JSP에서는 오로지 화면 출력만 담당하는 것이다.

Servlet에서 DB 쿼리등 화면 출력과는 상관없는 비지니스 로직을 일단 먼저 모두 수행하고, 그 결과를 request.setAttribute("key",결과객체);로 담은 다음 JSP 페이지로 포워딩(forward)을 하면 JSP에서는 request.getAttribute("key")로 그 객체를 받아서 화면에 뿌려주기만 한다.
이런 업무 수행단/화면 출력단의 철저한 역할 분리가 Model 2이다.

여기서 이러한 각 역할을 "MVC - Model View Controller" 라고 한다. 그래서 Model 2는 MVC와 동일한 의미로 사용하기 도 한다. MVC의 의미는 공부하면서 찾아보라.

이게 뭐가 좋냐고? 개발 기간이 좀 길어지고 프로젝트 규모가 쬐끔 커지고, 기존 프로젝트를 유지보수를 해보면 얼마나 좋은지 몸소 뼈져리게 느끼게 된다.

Model 2의 기능을 정형화해서 쉽게 구현하게 해주는 것이 MVC Framework들의 역할이다.
가장 유명한 Model 2 웹 프레임워크들은 다음과 같은 것들이 있다.

* 스트럿츠 1 - Struts 1
* 스트럿츠 2 - Struts 2
* 스프링 MVC - Spring MVC
* 기타 덜 유명한 Wicket, Stripes, JSF, Tapestry 등.

Struts 1은 MVC의 효시라고 할 수 있다. 우리에게 MVC라는 축복을 주기는하였으나, 나온지 오래된 만큼 낡은 개념들이 많이 녹아있고 쓸데 없이 복잡하고 배우기도 어려운 편이다.

오히려 Struts 2와 Spring MVC가 더 배우기 쉬울 것이며, 개발도 더 쉽다. 현재 추세는 Struts 2와 Spring MVC이다. 대형 포탈이나 SI 업체들도 Spring/Struts 2를 주로 채택하는 추세로 가고 있는 것으로 알고 있다.

둘 중 하나의 개념만 확실히 이해해도 다른 것을 배우는데 어려움이 별로 없으므로 그냥 둘중에 골라서 배우길 권한다. 나는 Spring을 선호한다.

그리고 MVC 프레임워크를 사용하기 시작하면서 View를 만드는 JSP에 대해서도 재조명이 시작된다. 기존에 Java 코드를 JSP에 직접 넣던 관행을 버리고 JSTL과 태그 라이브러리를 사용하거나 아예 JSP를 버리고 다른 템플릿 엔진으로 만들기도 한다. 이에 관해서는 맨 마지막에.

4. 퍼시스턴스 프레임워크 : JDBC 반복 작업에 짜증이 나기 시작하다.
현대 웹 개발에서 가장 큰 역할을 차지하는 것은 뭐니뭐니해도 단연 Database 작업이다.
지금까지는 아마도 JDBC에서 DB 커넥션을 맺고, 쿼리를 날리고 그 결과 ResultSet을 JSP로 넘겨주어서 출력하는 식으로 했을 것이다.
이미 다들 알고 있겠지만 JDBC를 사용하면 똑같은 코드가 굉장히 많이 반복해서 나온다. 한마디로 "삽질"의 전형이 JDBC 작업이다.
이것을 깨달은 많은 개발자들이 조금 어정짱하게 반복작업을 해결해주는 Util 클래스들을 프로젝트별로 만들어서 사용하곤 한다.
하지만, 물론 이에 대해 정형화하고 깔끔하고 훨씬 더 사용하기 쉬게 만들려는 노력이 이미 수년에 걸쳐 이루어졌다.

이렇게 DB관련된 작업을 정형화한 것들을 Persistence Framework 라고 한다.

* 아이바티스 - iBATIS : SQL Mapper - JDBC보다 더 쉽게 배우고, 더 편하게 사용한다.
* 하이버네이트 - Hibernate : 객체지향을 객체지향답게, 개발 기간을 엄청나게 단축시켜주다.

퍼시스턴스 프레임워크의 양대 산맥은 iBATIS와 Hibernate이다. 이 둘 모두 우리나라에 책이 나와 있다.
iBATIS는 SQL Mapper의 한 종류이고, Hibernate는 ORM의 한 종류이다.

이 둘의 차이는 iBATIS는 개발자가 SQL 쿼리를 직접 작성한 것을 객체에 매핑시켜주는 것이고, ORM은 DB 스키마와 객체간의 관계를 설정파일로 만들면 자동으로 쿼리를 만들어주는 것이다.

자, 이 둘을 보면 미국에서는 Hibernate가 인기가 좋고, 우리나라에서는 iBATIS가 사실상 SI 업계를 평정했다.
그러니까, 일단은 우리나라에서는 iBATIS를 공부하면 된다고 보면 된다.

이렇게 말하니까 마치 이 둘이 경쟁자 같은데, 사실 이 둘은 경쟁 상대라기 보다는 보완해주는 역할을 한다. SI에서 처럼 DB 테이블이 정규화 되어 있지 않은 경우에는 Hibernate같은 ORM을 사용하면 프로젝트를 말아먹을 수 있다.

iBATIS는 테이블 정규화에 무관하게, 개발자가 작성한 SQL을 객체로 매핑하기 때문에 DB 스키마가 마구 꼬여 있는 상황에서도 유연하게 작동하고, 개발자가 직접 SQL 튜닝을 할 수 있다는 장점이다.

그리고 Hibernate는 배우기가 굉장히 어려운 프레임워크이고 튜닝이 매우 어렵다. Hibernate책을 보면 캐싱을 통해 성능을 향상시키라고 하지만 캐싱은 iBATIS도 못지않게 잘 지원한다. 하지만 일단 배우면, 그로인한 코딩 생산성이 iBATIS가 감히 넘볼 수 없을 정도록 급격히 향상된다.

Hibernate는 DB 정규화가 잘되어 있는 웹 포탈 업체나 패키지 소프트웨어 제작시에 강력히 권장할만 하다.

5. IoC와 DI - 객체의 생성주기와 의존성을 관리하고 싶어지다
사실 내가 경험한 SI를 보면 4단계 까지만 가도 막장은 아닌 프로젝트라고 본다. 아직도 신규 프로젝트를 하면서도 Model 1에 JDBC로 코딩하는 것을 많이 보았기 때문이다.

앞서, MVC라는 형태로 웹 애플리케이션의 역할을 철저하게 분할해서 처리하라고 했었다.

이제 여기서 좀 더 역할을 분할하기 시작한다.

Database를 관장하는 코드(DAO)와 Database 처리 결과를 가지고 그외 비지니스 로직을 추가로 수행하는 코드(Service), 그리고 웹으로 들어온 요청을 받아서 비지니스 로직을 호출하고, 그 결과를 다시 웹(HTML 등)으로 내보내는 코드(Controller)로 분할을 하면 유지보수가 더 쉽고, DB가 Oracle에서 DB2 로 변경되는 식의 중대 변화가 있을 때도 DAO만 바꾸면 되는 식으로 변화에 대한 대처가 유연해 진다는 것을 깨닫기 시작한다.

이제는 각 역할별로 클래스를 분할하고 컨트롤러 객체는 서비스 객체에 서비스 객체는 DAO 객체에 의존해서 작동하도록 코드를 바꾸기 시작한다. 그리고 객체의 생성과 파괴 주기도 관리해야만 하게 된다. 객체를 하나만 생성하면 되는데 불필요하게 매번 new를 할 필요는 없으니까.

이렇게 객체의 생성/파괴 주기를 관리하고 객체간의 의존성을 관리해주는 프레임워크를 IoC 컨테이너라고 부른다.

1. Spring Framework
2. EJB 3.0

사실상 대세는 Spring Framework로 굳어졌다. EJB 3.0은 내가 안써봐서 뭐라 말은 못하겠다.

Spring MVC는 이 Spring Framework의 일부분이다.

Spring은 또한 AOP도 지원한다.

AOP 의 개념이 상당히 어려운 편이라서 개념 자체를 확실히 한마디로는 표현하지 못하겠다. 어쨌든 개발자들에게 가장 쉽게 다가오는 표현으로 하자면, AOP는 동일한 패턴으로 반복적으로 해야하는 일을 설정을 통해 자동으로 해주는 것이다.
이에 관한 가장 보편적인 예가 바로 트랜잭션이다.
지금까지는 아마도 비지니스 로직이 시작될 때 트랜잭션이 시작되고, 비지니스 로직이 끝날 때 트랜잭션을 종료하는 코드를 매번 작성해서 넣었을 것이다.
AOP를 사용하면, 비지니스 로직의 역할을 하는 메소드가 무엇인지 설정파일에 넣어주기만 하면 자동으로 메소드가 시작될 때 트랜잭션을 시작시키고, 메소드가 끝날 때 트랜잭션을 종료시켜준다. 물론 예외가 발생하면 트랜잭션을 rollback도 해준다. 따라서 Spring을 사용한 프로젝트에서는 트랜잭션 관련 코드를 볼 수 없을 것이다.

Spring 프레임워크는 기본적으로 IoC 컨테이너 역할을 하는 것이 핵심이다. 따라서 Spring을 사용한다고 해서 꼭 Spring MVC를 사용할 필요는 없다. Struts 2 + Spring + iBATIS 나 SpringMVC + Spring + Hibernate 등... 어떠한 조합이라도 가능하다.

6. 그 외
◈ Template Engine : JSP 보다 더 간결하면서 강력한게 필요해!
   * JSP + JSTL : Sun이 지정한 산업표준이다. JSTL은 당연히 쓰고 있으리라 믿는다.
   * Freemarker : 가장 권장할 만하다.
   * Velocity : 굉장히 배우기 쉽다. JSTL보다 더 빨리 배워서 쓸 수 있다. 가독성도 좋다. 그러나 Freemarker 만큼 편하고 강력하지는 못하다.
많은 사람들이 Java 웹 개발을 그냥 "JSP 개발"이라고도 부르는데, MVC가 도입되고, Freemarker 같은 다른 템플릿 엔진을 사용하게 되면 더이상 JSP는 코빼기도 안보이게 된다. 그러므로.. JSP 개발이라는 말은 쓰지 않았으면 좋겠다.

◈ Layout Engine
   * Sitemesh : 헤더 푸터 처럼 동일 패턴이 반복되는 레이아웃을 관리해준다.

◈ XML 도우미 : W3C DOM은 너무 어렵고 난잡하다. 좀 더 편한 XML관련 개발을 원한다면..
   * JDOM : Java 표준으로 지정됐다고 한다.
   * DOM4J
둘 다 비슷하게 편한거 같다. 예전엔 JDOM을 썼었는데, 나 같은 경우 현재 프로젝트에서는 DOM4J를 사용한다. Hibernate가 DOM4J를 사용하기 때문에, 별도의 라이브러리 더 넣는게 귀찮아서.

◈ 단위 테스트
   * jUnit : 코드를 철저하게 테스트하자.

◈ 소스코드 버전관리
   * CVS
   * Subversion : 현재 대세는 Subversion
내가 최고 막장으로 꼽는 프로젝트는 아직도 FTP로 소스 관리하는 프로젝트이다. 이런 프로젝트에는 절대로 참여하지 않을 것이라고 굳게 맹세하고 또 맹세했다. --;
소스 코드 버전관리는 여러 개발자들이 동시에 개발할 때 소스코드를 저장하고 충돌을 관리해주며, 소스 변경 내역을 계속해서 추적해서 과거 소스로 언제든지 돌아갈 수 있도록 도와준다.
현재 대세는 Subversion이지만 CVS로도 버전관리의 이점을 충분히 만끽할 수 있다. 그리고.. 사실 CVS가 사용법을 익히기는 더 쉽다.

◈ 자동 빌드
   *
Ant : Ant 면 만사 Ok!
   *
Maven
아직도 javac 로 컴파일하고 있고, FTP로 파일 올려서 복사하고 있다면.. 이 모든일을 자동으로 명령 한방에 처리하도록 해야 실수도 적고, 퇴근도 일찍한다.
Ant로 빌드와 배포를 자동화 하자.

결론

내가 권하는 조합은
* SI 업체에서 일하는 경우 : Struts 2 혹은 SpringMVC + iBATIS + JSP/JSTL + 가능하다면 Spring Framework
* 웹 포털등과 같은 업계, 패키지 소프트웨어 제작 업체 : Struts 2 혹은 Spring MVC + Hibernate + Spring Framework + Freemarker + Sitemesh
Posted by 1010
01.JAVA/Java2008. 8. 12. 10:33
반응형

어제 제가 개발한 시스템에 대해 윗분과 이야기 하는데

총 코딩 파일 라인수가 몇줄이냐고 물어보시는데 -_-;;

몰라서 당황했다는;; 전 나중에 산출물 작성할때나 알아볼까 했는데 흠.

암튼 이클립스에 라인수 측정하는 곳이 안보여서

예전에 만들어뒀던 소스 이용하여 약간 발전시켜 만들어 봤습니다.

이클립스에 이미 있는 기능이라면 저 또 뻘짓한 것이지만서도 ㅎㅎㅎ

뭐 공부용으로도 함 봐보셔도 괜찮을듯 싶습니다.





- Finder.java


/*
 * @Finder.java Created on 2006. 08. 24
 *
 * Copyright (c) 2005 GHLab.com All rights reserved.
 */

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Locale;

/**
 * 파일 총 라인수 구하기.
 *
 * @version 1.0
 * @author 김건호
 */
class Finder {
    public static long totalFileSize = 0; // 전체 파일 사이즈 저장

    public long fileSize = 0; // 파일 사이즈 저장

    public static int totalFileLineCount = 0;

    public int fileLineCount = 0;

    // 파일 정보 저장
    public ArrayList<FileDTO> fileList = new ArrayList<FileDTO>();

    public final static int TOTAL_FIND_CODE = 0; // 전체 검색 코드

    public final static int FILENAME_FIND_CODE = 1; // 파일명 검색 코드

    public final static int EXTENSION_FIND_CODE = 2; // 확장자 검색 코드

    public int findTypeCode = TOTAL_FIND_CODE; // 검색 코드

    // 검색 파일명
    public String findFileName = "*.*";

    // 하위디렉토리 검색 여부
    public boolean isFindUnderDir = false;

    // 대소문자 구분
    public boolean isUpperLower = false;

    public static void main(String[] args) {
 if (args.length == 0 || args.length > 3) {
     StringBuffer sb = new StringBuffer();

     sb
      .append("사용법을 갈켜드리겠습니다~\n")
      .append(
       "예) Windows 폴더 내의 모든 파일의 용량 및 라인수를 추출하고 싶다면 아래처럼~\n\n")
      .append("java Finder c:\\windows\n\n")
      .append("파일을 지정하고 싶다면(기본 전체 파일 검색) 아래와 같은 옵션을 붙이면 됩니다.\n")
      .append("확장자 지정 검색 -e, 파일 지정 검색 : -f\n")
      .append("예) Windows 폴더 내의 확장자가 exe 인 파일을 검색\n\n")
      .append("java Finder c:\\windows -e exe\n\n")
      .append("하위 폴더를 포함하여 검색하고 싶다면 s 옵션을 붙이면 됩니다.\n")
      .append(
       "예) Windows 폴더와 하위 폴더의 모든 파일 중 파일명이 notepad.exe인 파일을 검색\n\n")
      .append("java Finder c:\\windows -sf notepad.exe\n\n")
      .append("파일명을 대소문자 구분하여 검색하려면 u 옵션을 붙이면 됩니다.\n")
      .append(
       "예) Windows 폴더와 하위 폴더의 모든 파일 중 확장자가 exe인 파일을 검색\n\n")
      .append("java Finder c:\\windows -sue exe");

     System.out.println(sb.toString());

     System.exit(1);
 }

 Finder f = new Finder();

 // 검색 경로
 String path = null;

 // 옵션
 String option = "";

 if (args.length > 0)
     path = args[0]; // 검색 경로 저장

 // 인자 갯수에 따른 분류
 if (args.length > 1) {
     // 옵션 저장
     option = args[1];

     // 검색 파일명 또는 확장자 저장
     f.findFileName = args[2];
 }

 // 옵션에 의한 데이터 셋팅
 if (option.indexOf("s") != -1)
     f.isFindUnderDir = true;

 // 대소문자 구분하지 않을 경우
 if (option.indexOf("u") != -1)
     f.isUpperLower = true;

 // 확장자 검색일 경우
 if (option.indexOf("e") != -1)
     f.findTypeCode = Finder.EXTENSION_FIND_CODE;

 // 파일명 검색일 경우
 if (option.indexOf("f") != -1)
     f.findTypeCode = Finder.FILENAME_FIND_CODE;

 // 확장자 검색과 파일명 검색은 함께 쓸수 없다.
 if (option.indexOf("e") != -1 && option.indexOf("f") != -1)
     System.out
      .println("확장자 검색과 파일명 검색 옵션 모두 입력하셨습니다.\n파일명 검색 모드로 자동 설정됩니다.");

 // 디렉토리 존재 여부
 File file = new File(path);
 if (file.isDirectory() == false) {
     System.out.println("정확한 경로를 입력하여 주십시오.");
     System.exit(1);
 }

 // 디렉토리 끝에 \ 또는 / 이 없으면 붙임
 String lastChar = path.substring(path.length() - 1, path.length());
 if (lastChar.equals(File.separator) == false) {
     path = path + File.separator;
 }

 try {
     f.getSize(path);
 } catch (Exception e) {
     System.out.println("에러!! : " + e.getMessage());
     e.printStackTrace();
 }

 System.out.println("검색된 파일 갯수  : " + f.fileList.size());

 // 검색된 파일 갯수가 있을 경우에 정보 출력
 if (f.fileList.size() > 0) {
     System.out.println("총 파일 사이즈 : " + byteTranslater(totalFileSize));
     System.out.println("총 라인수 : " + totalFileLineCount + "라인");

     System.out.print("검색된 파일 정보를 보시겠습니까?(Y/N) : ");

     String choice = null;

     try {
  BufferedReader in = new BufferedReader(new InputStreamReader(
   System.in));
  choice = in.readLine();

     } catch (Exception e) {
  choice = "N";
     }

     choice = choice.toUpperCase();

     if (choice.equals("Y")) {
  // 파일 정보 추출
  FileDTO[] fdto = f.getFileList();

  for (int i = 0; i < fdto.length; i++) {
      System.out.println("파일 : " + fdto[i].getFilePath()
       + fdto[i].getFileName() + ", 사이즈 : "
       + byteTranslater(fdto[i].getFileSize())
       + ", 라인수 : " + fdto[i].getFileLineCount());
  }
     }
 }

 System.exit(1);
    }

    /**
     * 해당 경로에서 파일을 찾아 용량, 라인수를 측정
     *
     * @param path
     *                파일을 찾을 경로
     * @param findFileName
     *                모든 파일 찾기(*.*), 확장자로 찾기(*.java), 파일명 찾기(test.java)
     * @param isFindUnderDir
     *                하위디렉토리 검색 여부
     * @throws Exception
     */
    public void getSize(String path) throws Exception {
 File dir = new File(path);

 String[] list = dir.list();

 File file;

 BufferedReader br = null;

 String fileName = null; // 파일명 저장

 String filePath = null; // 파일 경로

 String findFileName = this.findFileName;

 for (int i = 0; i < list.length; i++) {
     file = new File(path + list[i]);

     fileSize = 0; // 해당 파일 크기 0으로 초기화
     fileLineCount = 0; // 해당 파일 총 라인수 0으로 초기화

     // 파일만 계산
     if (file.isFile()) {
  fileName = file.getName(); // 파일명 추출

  // 대소문자 구분 하지 않는다면 모두 대문자로 변경
  if (this.isUpperLower == false) {
      fileName = fileName.toUpperCase(Locale.KOREAN);
      findFileName = findFileName.toUpperCase(Locale.KOREAN);
  }

  filePath = file.getPath(); // 파일경로 추출

  // 검색 형태에 따른 조건 설정
  if ((findTypeCode == TOTAL_FIND_CODE)
   || (findTypeCode == EXTENSION_FIND_CODE && fileName
    .substring(fileName.lastIndexOf(".") + 1,
     fileName.length()).equals(findFileName))
   || (findTypeCode == FILENAME_FIND_CODE && fileName
    .equals(findFileName))) {
      br = new BufferedReader(new InputStreamReader(
       new FileInputStream(filePath)));

      // 라인수 추출
      while (br.readLine() != null) {
   fileLineCount++;
      }

      fileSize = file.length(); // 파일 크기 추출

      FileDTO fdto = new FileDTO();

      fdto.setFileSize(fileSize);
      fdto.setFileName(file.getName());
      fdto.setFilePath(filePath.substring(0, filePath
       .lastIndexOf(File.separator) + 1));
      fdto.setFileLineCount(fileLineCount);

      fileList.add(fdto);
  }
     }

     // 해당 폴더내의 모든 파일의 크기 추출을 위한 연산
     totalFileSize += fileSize;
     // 해당 폴더내의 모든 파일의 라인수 추출을 위한 연산
     totalFileLineCount += fileLineCount;

     // 하위 디렉토리가 있고, 옵션을 하위 디렉토리 검색을 지정했을 경우 재귀호출
     if (file.isDirectory() && isFindUnderDir)
  getSize(file.getPath() + File.separator);
 }
    }

    /**
     * ArrayList 에 담겨진 파일 정보 DTO를 배열로 전환하여 받아옴
     *
     * @return 파일 정보 목록
     */
    public FileDTO[] getFileList() {
 FileDTO[] result = new FileDTO[fileList.size()];

 for (int i = 0; i < result.length; i++) {
     result[i] = new FileDTO();

     result[i] = fileList.get(i);
 }

 return result;
    }

    /**
     * 파일 사이즈 단위 변환
     *
     * @param size
     *                long 형 타입의 파일 사이즈
     * @return KB, MB, GB 로 변환한 사이즈
     */
    public static String byteTranslater(long size) {
 NumberFormat nf = NumberFormat.getIntegerInstance();

 java.text.DecimalFormat df = new java.text.DecimalFormat("#,##0.00");

 int intSize = 0;

 int kbyteSize = 1024;

 double doubleSize = 0;

 String returnSize = null;

 // 파일 사이즈가 1000, 2000 형식이므로 기가는 1024 가 아닌 1000을 기준으로.
 if (size >= (1000 * 1024 * 1024)) {
     intSize = new Long(size / (1000 * 1024 * 1024)).intValue();

     return nf.format(intSize) + "GB";
 } else if (size > (kbyteSize * 1024)) {
     intSize = (int) (((double) size) / ((double) (kbyteSize * 1024)) * 100);

     doubleSize = (double) (((double) intSize) / 100);

     returnSize = df.format(doubleSize);

     if (returnSize.lastIndexOf(".") != -1) {
  if ("00".equals(returnSize.substring(returnSize.length() - 2,
   returnSize.length()))) {
      returnSize = returnSize.substring(0, returnSize
       .lastIndexOf("."));
  }
     }

     return returnSize + "MB";
 } else if (size > kbyteSize) {
     intSize = new Long(size / kbyteSize).intValue();

     return nf.format(intSize) + "KB";
 } else {
     // return nf.format(size) + "Byte";
     return "1KB";
 }
    }
}

/**
 * 파일 정보 저장 객체
 *
 * @version 1.0
 * @author 김건호
 */
class FileDTO {
    public int fileLineCount;

    private long fileSize;

    private String filePath;

    private String fileName;

    public FileDTO() {
 fileSize = 0;
 filePath = null;
    }

    /**
     * @return the fileLineCount
     */
    public int getFileLineCount() {
 return fileLineCount;
    }

    /**
     * @param fileLineCount
     *                the fileLineCount to set
     */
    public void setFileLineCount(int fileLineCount) {
 this.fileLineCount = fileLineCount;
    }

    /**
     * @return the fileName
     */
    public String getFileName() {
 return fileName;
    }

    /**
     * @param fileName
     *                the fileName to set
     */
    public void setFileName(String fileName) {
 this.fileName = fileName;
    }

    /**
     * @return the filePath
     */
    public String getFilePath() {
 return filePath;
    }

    /**
     * @param filePath
     *                the filePath to set
     */
    public void setFilePath(String filePath) {
 this.filePath = filePath;
    }

    /**
     * @return the fileSize
     */
    public long getFileSize() {
 return fileSize;
    }

    /**
     * @param fileSize
     *                the fileSize to set
     */
    public void setFileSize(long fileSize) {
 this.fileSize = fileSize;
    }

}

Posted by 1010
반응형
We suggest the following mirror site for your download:

http://apache.tt.co.kr/

Other mirror sites are suggested below. Please use the backup mirrors only to download PGP and MD5 signatures to verify your downloads or if no other mirrors are working.

HTTP

FTP

Backup Sites

http://www.apache.org/dist/
http://www.eu.apache.org/dist/

The full listing of mirror sites is also available. The procedure for setting up new mirrors is described in How to become a mirror.

Verify the integrity of the files

It is essential that you verify the integrity of the downloaded files using the PGP or MD5 signatures. Please read Verifying Apache Software Foundation Releases for more information on why you should verify our releases.

The PGP signatures can be verified using PGP or GPG. First download the KEYS as well as the asc signature file for the relevant distribution. Make sure you get these files from the main distribution site, rather than from a mirror. Then verify the signatures using

% pgpk -a KEYS
% pgpv downloaded_file.asc
or
% pgp -ka KEYS
% pgp downloaded_file.asc
or
% gpg --import KEYS
% gpg --verify downloaded_file.asc

Alternatively, you can verify the MD5 signature on the files. A unix program called md5 or md5sum is included in many unix distributions. It is also available as part of GNU Textutils. Windows users can get binary md5 programs from here, here, or here.

Posted by 1010
98..Etc/Anyframe2008. 8. 8. 16:06
반응형
Posted by 1010
반응형
참조 및 번역 http://www.w3schools.com/js/default.asp

자바스크립트는 웹에서 사용하는 스크립트 언어 입니다!

자바스크립트는 수만 개의 웹 페이지에서 디자인을 향상 시키고, 폼을 검증하고, 브라우저를 인식하고, 쿠키를 생성하는데 사용하고 있습니다.

자바스크립트는 인터넷에서 가장 유명한 스크립트 언어입니다.

자바스크립트는 배우기 쉬워요! 즐겨보세요!

JS Basic
JS HOME(Whiteship's Note)
JS Introduction(Introduction to JavaScript)
JS How To(JavaScript How To ...)
JS Where To(JavaScript Where To ...)
JS Variables(JavaScript Variables)
JS If...Else(JavaScript If...Else와 Switch Statement)
JS Switch
JS Operators(JavaScript Operators)
JS Popup Boxes(JavaScript Popup Boxes)
JS Functions(JavaScript Functions)
JS For Loop(JavaScript For Loop와 While Loop)
JS While Loop
JS Break Loops
JS For...In
JS Events(JavaScript Events)
JS Try...Catch(JavaScript Try...Catch Statement)
JS Throw(JavaScript Throw Statement)
JS onerror(JavaScript The onerror Event)
JS Special Text(JavaScript Special Characters)
JS Guidelines(JavaScript Guidelines)

JS Objects
JS Objects Intro(JavaScript Objects Introduction)
JS String(avaScript String Object)
JS Date(JavaScript Date Object)
JS Array(JavaScript Array Object)
JS Boolean(JavaScript Boolean Object)
JS Math(JavaScript Math Object)
JS HTML DOM(JavaScript HTML DOM Objects)

JS Advanced
JS Browser(JavaScript Browser Detection)
JS Cookies(JavaScript Cookies)
JS Validation(JavaScript Form Validation)
JS Animation(JavaScript Animation)
JS Image Maps
JS Timing(JavaScript Timing Events)
JS Create Object(JavaScript Create Your Own Objects)
JS Summary
Basic 부분은 요약 하는 식으로 정리했으며
Object와 Advanced 부분은 거의 번역을 했습니다.

전부 살표보신 분들은 재미삼아 퀴즈도 보실 수 있습니다.
물론 다 보지 않고도 퀴즈만 볼 수도 있지요.ㅋ

사용자 삽입 이미지
문제 난이도는 매우 쉬운데(20문제 푸는데 3분 10초면..그냥 찍기 수준입니다.ㅋㅋ).. 저는 두 문제를 틀려버렸어요;;


출처 : http://whiteship.me/1004
Posted by 1010
98..Etc/Anyframe2008. 8. 8. 15:56
반응형

anyframe(http://www.anyframejava.org)의 등장..

옆에서 기자분이 열심히 어디론가 전화를 하고 있다.

그런데 spring이 나오고 오픈 소스가 나온다..

그러더니 기사가 나오기 시작했다.

http://www.zdnet.co.kr/news/enterprise/si/0,39031197,39169880,00.htm
http://www.zdnet.co.kr/news/enterprise/si/0,39031197,39169940,00.htm
http://www.zdnet.co.kr/news/enterprise/si/0,39031197,39168226,00.htm

왠지 반가운 느낌이 더 많이 든다.

앞으로 SI들이 통일된 프레임웍을 통해서 개발될 확률이 많아 졌고,

그리고 오픈 소스라는 점에서 이 프레임웍이 많은 발전을 이룰것이며,,

또한 삼성 SDS 라는 점도 이를 더 뒷받침하지 않을까 한다.

이 프레임웍은 스프링을 기반으로 하기에 왠지 더 정감이 간당..ㅋㅋ (요즘 열공중..)

물론 앞으로 좀 더 지켜봐야겠지만...

이런 시도들이 좀 더 나왔으면 한다.


출처 : http://rrwr.tistory.com/76?srchid=BR1http%3A%2F%2Frrwr.tistory.com%2F76

Posted by 1010
98..Etc/Etc...2008. 8. 8. 09:59
반응형
 cclskin.net
start.com
del.icio.us
craigslist: san francisco bay area classifieds for jobs, apartments, personals, for sale, services, community, and events
Rollyo: Roll Your Own Search Engine
TechCrunch
Etsy - Your place to buy and sell all things handmade
Protopage v2 released - free AJAX start pages now with RSS news feeds, sticky notes and bookmarks
meebo.com
Google
Windows Live Local
43 Things
Where do you want to go? | 43 Places
Welcome to Flickr - Photo Sharing
CEITON technologies
야후! 허브 - 태그로 세상을 담는다!
Kiko - A New Kind of Online Calendar
Netvibes
TagWorld
Google Base
Windows Live
Google Local
Google Maps API
BlinkList | Your personal start page and social bookmarking engine
Google Transit
Ning | Home: Front Page
smugmug - The ultimate in photo sharing. Online photo albums, photo sharing, photo hosting and photo storage.
YouTube - Broadcast Yourself.

?

Social Bookmarking/Search/Invitation:
Simpy
Goovite
Furl
Spurl
Rollyo
Squidoo
StumbleUpon
RawSugar
Kopikol
SurfTail

Content Filtering
Techtiki
ScoopGo
Filangy

To Do Lists
GooTodo
Listal

Online Calendars
HipCal
AirSet
zEvents
EventSniper

Web Site/Blog Analytics:
Measure Map
Google Analytics

Peer Production Content (News/Music/Listings)
Shoutwire
Millions of Games
Rojo
Last.fm
Pandora
WikiCompany
Glypho
Yazai
BlockRocker
Wists
SpinSpy
NowPublic
Odeo
WebJay
180 Degree News
Quimble
Riffs
ButterFly
Bandnews

Mash-Ups
Ning
FlickrMap
LivePlasma
CoverPop
Qube
Kayak
toEat
AlexaDex

Aggregators
Google Reader
SuprGlu
PBwiki
Attensa
fluctu8
NewsMob
Blummy
Fluxiom
MeFeedia

Start Pages
PageFlakes
Google Ig

Team Planning, Organization, Coordination, & Project Management
Planzo
Backpack
Zimbra
ProjectPlace
Doodle
ZohoPlanner

E-Mail and Communication
Meebo
GMail
myemail
Tempinbox
Citadel

Online Storage
Avvenu
SendSpace
eSnips
StreamLoad

Image Storage, Search, & Sharing
Fotolia
iStockPhoto
Riya
PhotoBucket

Mapping
Google Maps
Yahoo! Maps
MSN Maps
Wayfaring

Word Processing & Note Taking
JotSpot Live
Webnote

Web 2.0 Parts
TinyMCE
RSS2PDF
ZohoChallenge

Grassroots Web 2.0
Knowmore.org

Online Business Software
2ndSite
NetWorthIQ
ThinkFree
CampaignMonitor

Web 2.0 Social Communities
MySpace
Orkut
LinkedIn

Web 2.0 Command Line
YubNub
Ambedo

Web 2.0 Humor
Web 2.0 Validator

?

?

?

부록2. 시맨틱웹(웹2.0) 관련 사이트

시맨틱웹 또는 웹2.0을 좀더 잘 이해하려면 관련 사이트를 직접 둘러보는 것이 좋다. 이 책에서 미처 소개하지 못한 곳을 포함해 관련 사이트를 정리해봤다. 시간이 나는대로 차례대로 방문해보거나 검색엔진을 통해 아래 소개된 사이트에 대한 정보를 찾아보기 바란다.

(2006.01.25 최종 수정. 사이트 주소는 수시로 바뀝니다.)


43things(www.43things.com) : 꼬리표 기술을 적극 활용하는 소셜 네트워크 기반의 블로그 커뮤니티

A9(www.a9.com) : 아마존의 검색엔진으로 Ajax를 도입한 것이 특징이다. 일단 일반 검색이 아닌 전자상거래 검색 분야로 좁혀 전문적인 검색시장부터 노리고 있다.

Browsr : social directory manager 사이트. 쉽게 설명하자면 웹사이트를 주제별로 구분했던 야후 디렉토리 서비스를 사용자들이 구분하는 사이트다. 사회적책갈피(소셜북마크)의 한 종류로 볼 수 있는데, 각종 사이트 링크를 사용자들이 평가하고 분류한다는 점이 특징이다. 물론 꼬리표 적용은 필수.

BudgetTracker(http://budgettracker.com/login.php) : 무료로 사용할 수 있는 웹 회계, 일정관리 서비스.

Bunchball(www.bunchball.com) : 플래시 기반의 온라인 게임 서비스. 개발자들이 직접 게임 개발에 참여할 수 있는 것이 특징이다.

DrawSWF(http://drawswf.sourceforge.net/) : 웹 상에서 그림을 그릴 수 있다. Java2를 이용한 것이 특징이며 SVG 형식을 활용해 그린 그림을 플래시 애니메이션 파일로 저장할 수 있는 점이 독특하다.

Flock(www.flock.com) : 불여우 기반의 오픈소스 소셜 브라우저 공식 사이트. 즐겨찾기, 방문기록, 블로깅 등의 활동을 브라우저 차원에서 제공해준다.


?

JotSpot(www.jotspot.com) : 개인용 위키 응용프로그램 제공 사이트

KnowNow(www.knownow.com) : RSS 알리미(alert) 시스템 사이트로 기업에서 필요한 정보를 모아서 제공하는 솔류션을 발표했다.

MS 라이브로컬(http://local.live.com) : 미국 주요 지역의 정밀항공사진 지도서비스를 포함한 지역정보 종합서비스

MS 라이브닷컴(www.live.com) : 마이크로소프트가 선보인 라이브 소프트웨어를 제공하는 사이트

MS 스타트닷컴(www.start.com) : 마이크로소프트의 개인화 서비스 사이트

MSN 버추얼 어스(virtualearth.msn.com) : 마이크로소프트의 위성지도 서비스

MSN 샌드박스(sandbox.msn.com) : 마이크로소프트가 진행 중인 프로젝트를 보여주는 사이트

MusicBrainz(http://musicbrainz.org) : 음악 관련 자료를 RDF 문법을 이용해 제공하는 사이트

Oddpost(www.oddpost.com) : 웹기반 이메일 업체로 DHTML을 이용하여 브라우저에서 아웃룩과 거의 같은 인터페이스를 구현하여 주목받은 회사. 야후가 인수했다.

Orb(www.orb.com) : 웹과 연동해 동영상 사진 화상캠 등을 통해 집안을 관리하거나 각종 알리미 기능을 이용할 수 있는 홈관리 시스템 사이트.

Podscope(www.podscope.com) : 파드캐스팅 자료를 검색해주는 검색엔진으로 숨은자료(meta data)를 활용한 검색엔진이라는 특징이 있다.

Pubsub(www.pubsub.com) : RSS와 블로그 전문 검색엔진. 구조화된 블로깅(Structured Blogging) 기술을 선보였다.

Real Travel(http://realtravel.com/) : 여행을 주제로 한 소셜 네트워크. 블로그 형식과 지도 연계 정보가 특징이다.

Rico(www.openrico.org) : 자바스크립트를 이용한 RIA기술 사이트. Ajax 기술을 사용한 개발 사이트.

SAGE(sage.mozdev.org) : 불여우 브라우저의 탭브라우징 기능과 접목해 사용하는 불여우 브라우저용 RSS 구독기 확장기능 사이트

W3C(www.w3.org) : 웹표준을 만들고 웹을 주관하는 공식기관. 시맨틱웹에 관한 자료도 이곳에 있다.

ZDNET RSS 공급 페이지(http://www.zdnet.co.kr/etc/feeds/xml/) : 다양한 형식의 RSS를 주제별로 제공해주고 있는 사례를 볼 수 있다.

Zvents(www.zvents.com) : 지역의 각종 행사(이벤트) 검색 서비스. 현재 샌프란시스코 지역의 행사를 검색해주며, 구글맵과 연동되어 장소를 소개한다.

개버(http://www.gabbr.com/) : 사용자가 덧글을 다는 것을 주요 특징으로 내세우는 뉴스 사이트. 덧글 수가 대문의 주요 뉴스에 표시됨으로써 사용자들의 관심도를 측정할 수 있다.

구글 개인화 홈페이지(http://www.google.co.kr/ig) : 구글의 개인화 홈페이지 사이트. 아작스를 도입해 옮기려는 영역을 마우스로 끌어다놓으면 원하는 위치로 바로 재배치되는 것을 볼 수 있다.

구글 라이드파인더(http://labs.google.com/ridefinder) : 구글의 Ride Finder는 검색 지역의 수송수단을 찾아주는 로컬 서비스로, 지도 서비스와 연동되는 서비스다.

구글 리더(http://www.google.com/reader/) : 구글의 RSS 웹구독 서비스. 지메일과 비슷한 화면을 가지고 있으며 검색과 연동된 점이 특징이다.

구글 베이스(http://base.google.com) : 구글이 내놓은 무료 알맹이(content) 검색 서비스

구글 비디오검색(http://video.google.com/) : 구글의 멀티미디어 검색 서비스

구글 야후 교통 날씨 지도(traffic.poly9.com) : '구글맵 + 야후 교통정보 + 월드웨더(worldweather) 날씨정보'를 결합하여 지도를 통해 교통상황과 날씨를 함께 확인할 수 있는 서비스. 그레그 새더츠키(Greg Sadetsky)가 개발했다.

구글 오컷(www.orkut.com) : 사회적 네트워크(Social Network)의 대명사처럼 인식되는 사이트로 평판 시스템과 검색 기능이 특징이다.

구글 지메일(www.gmail.com) : 구글의 웹메일 서비스. 기존의 폴더 방식이 아닌 레이블(lable, 찌종이) 방식으로 편지를 관리하고 있으며 아작스 등을 도입한 점, 2기가바이트가 넘는 용량이 특징이다.

구글 트랜지트 여행 플래너(Google Transit Trip Planner, http://www.google.com/transit) : 구글이 선보인 교통 안내 서비스. 미국 포틀랜드(Portland) 지역에 한정적으로 공개되었다.

구글(www.google.com) : 상장 1년 만에 미국 20대 기업에 들고 100조가 넘는 기업으로 성장한 세계 최고의 검색엔진 기업. 웹2.0 기술을 가장 잘 활용하는 곳이다.

구글 어스(Google Earth, http://earth.google.com) : 구글의 위성지도 서비스

구글 지도(http://maps.google.com/) : 아작스를 도입한 구글의 지도 서비스 사이트

그리스몽키(Greasemonkey, http://greasemonkey.mozdev.org/) : 아론 부드맨이 2004년 12월에 친구를 위해 개발한 불여우 브라우저용 확장 기능의 하나로 자신이 보는 페이지를 재정의해서 볼 수 있다.

나우퍼블릭(http://www.nowpublic.com/) : 사용자들이 기사를 작성할 수 있는 뉴스 사이트로 꼬리표를 적용하고 있다.

넘섬(http://www.numsum.com) : Ajax로 구현한 웹스프레드시트 사이트.

넷바이브스(http://www.netvibes.com/) : Ajax로 구현한 개인이 설정할 수 있는 개인화 페이지.

넷플릭스(www.netflix.com) : 미국의 DVD 대여 사이트로 아작스를 도입해 마우스를 올려놓기만 해도 상자가 뜨면서 DVD 요약 내용이 나온다.

뉴스게이터(www.newsgator.com) : 사용자가 좋아하는 뉴스, 사이트, 블로그를 한 자리에서 볼 수 있게 해주는 서비스. 아웃룩이나 피드데몬을 이용할 수도 있다.

다음 RSS넷(rss.daum.net) : 국내 포탈로는 처음 선보인 RSS웹구독기.

닷지볼(www.dodgeball.com) : 휴대전화 소셜 네트워킹 애플리케이션. 구글이 인수했다.

델리셔스(http://del.icio.us) : 조슈아 샤흐터(Joshua Schachter)가 만든 소셜 북마크 공유 서비스. 웹2.0 시대에 플릭커와 함께 양대 스타로 떠오른 사이트로 야후에 인수되었다. 30만 사용자들이 1000만개 즐겨찾기(북마크)를 공유했다.

디그(www.digg.com) : 슬래시(slashdot.org)와 같은 뉴스 포럼 사이트. 2006년 초부터 슬래시의 트래픽을 따라잡을만큼 급성장했다. 슬래시는 편집진에 의해 주제가 선정되지만 디그는 사용자의 투표(digg it)를 통해 선정되는 점이 다르다. 네티즌의 자발적 참여가 성장에 어떤 역할을 하는지 보여주는 사례.

라에드는 어디에(http://dear_raed.blogspot.com) : 블로그의 매체성을 가장 잘 보여준 살람팍스의 블로그

라이브마크스(http://sandbox.sourcelabs.com/livemarks/) : Ajax로 구현한, 델리셔스(del.icio.us)의 새로 추가된 북마크 실시간 보기 사이트.

라이트리(www.writely.com) : 웹 기반의 워드프로세서. 웹에서 문서를 작성한 후 컴퓨터에 Word, HTML, ZIP 형식으로 저장할 수 있고 공유도 가능한 점이 특징이다. 어디서나 사용할 수 있다는 점 때문에 최근 주목받는 사이트.

로조닷컴(www.rojo.com) : 블로그라인스와 같은 웹 기반의 RSS 구독기. 포크소노미 기술로 꼬리표에 가중치를 부여해 구성원들이 체계화시키고 있다.

롤요(www.rollyo.com) : 사용자가 원하는 사이트를 묶어두면 해당 사이트만을 대상으로 검색해주는 개인화 검색엔진. 데이브 펠이 만들었다.

리멤버더밀크(http://www.rememberthemilk.com) : Ajax를 적용한 할일 목록 관리 사이트. 메신저로 수신이 가능한 점이 특징이다.

리야닷컴(http://riya.com) : 인공지능 사진 검색엔진

마요미(www.mayomi.com) : 브라우저 상에서 사용 가능한 웹 마인드맵 서비스.

마이스페이스(www.myspace.com) : 미국 10대들이 주로 사용하는 커뮤니티 사이트

마이웹2.0(http://myweb.yahoo.com) : 야후가 내세우는 소셜 검색엔진(social search engine)

모든블로그(www.modenblog.com) : 휴대전화를 이용해 RSS를 구독할 수 있는 한국 사이트

모질라(www.mozilla.org) : 불여우(Firefox) 브라우저와 천둥새 편지 프로그램을 등을 배포하는 사이트. 오픈소스와 플랫폼 기반의 프로그램 흐름을 파악할 수 있다.

미보(http://www.meebo.com) : Ajax로 구현한 웹메신저. 당연히 프로그램 설치 없이 웹에서 바로 사용할 수 있는 메신저다. MSN 메신저 외에 야후, ICQ, 구글토크 등과도 연결된다.

믹시(www.mixi.co.jp) : 일본의 사회적 네트워크 사이트로 한국의 싸이월드와 구글을 섞은 것 같은 사이트다.

백베이스(www.backbase.com) : 아작스 기반의 응용 프로그램 개발 사이트

보잉보잉(http://boingboing.net) : 해외의 블로그 사이트. 방문객들의 불여우 브라우저 사용자가 IE 사용자를 추월하는 일이 나타나 화제를 모았다.

블로거닷컴(www.blogger.com) : 가입형 블로그 서비스. 구글이 인수했다.

블로그라인스(www.bloglines.com) : 전문 RSS웹서비스로 가장 유명한 곳. 해외 사이트지만 사용하기 편리하다는 이유로 한국 네티즌도 많이 사용한다. 애스크지브스에 인수된 후 IAC로 넘어갔다.

블로그펄스(www.blogpulse.com) : 블로그 검색엔진

샤프리더(www.sharpreader.net) : RSS구독기인 샤프리더 배포 사이트

세이바로직(www.ceiva.com) : 디지털액자 판매 기업으로 가족들이 사진을 인터넷에 올려놓기만 하면 다음 날 액자를 통해 새롭게 올라온 가족사진을 감상할 수 있는 서비스를 제공한다.

소셜텍스트(www.socialtext.com) : 기업용 위키 제품 사이트

스카이프(www.skype.com) : VoIP 서비스의 대표 사이트로 이베이(eBay)에 최대 41억 달러라는 천문학적인 돈을 받고 인수되었다.

스퀘어프리 HTML에디트(http://www.squarefree.com/htmledit/) : Ajax로 구현한 실시간 HTML 편집기

시맨틱웹 커뮤니티 포탈(www.semanticweb.org) : 시맨틱웹 관련 정보를 얻을 수 있는 포탈. 시맨틱웹에 관한 행사나 다양한 정보가 올라오며 시맨틱웹 컨퍼런스인 ISWC 정보도 여기에 올라온다.

싱잉피시(www.singingfish.com) : AOL 검색기에서 선보인 멀티미디어 검색 사이트

썸원뉴(www.someonenew.com) : 스카이프를 플랫폼으로 이용하고 있는 데이트 사이트

아이스로켓(www.icerocket.com) : 블로그 검색엔진

애스크지브스(www.ask.com) : 검색 엔진. 블로그라인스를 인수했으나 애스크지브스 자체가 IAC로 인수되었다.

애플 아이튠즈(http://www.apple.com/itunes/) : 애플의 온라인 뮤직 스토어인 아이튠즈는 고객이 자신의 마음에 들도록 RSS 공급 내용을 설정할 수 있다.

야후 360(http://360.yahoo.com) : 야후에서 만든 블로그와 소셜 네트워크를 혼합한 서비스

야후 앤서즈(Yahoo Answers, http://answers.yahoo.com) : 네이버 지식인과 비슷한 문답형 커뮤니티

야후 위젯(http://kr.widget.yahoo.com) : 야후가 인수한 콘파뷸레이터를 위젯이라는 이름으로 배포하는 사이트

야후 피플링(http://kr.ring.yahoo.com) : 구독하는 RSS를 테마별로 공유하는 커뮤니티 성격의 사이트

어댑티브패스(www.adaptivepath.com) : 웹 디자인 회사로 Ajax라는 이름을 만든 Jesse James Garrett의 에세이를 볼 수 있다.

업커밍(www.upcoming.org) : 트래킹 서비스 사이트. 야후가 인수했다.

에트시(http://www.etsy.com) : 다양한 기술을 적용한 쇼핑몰. 색깔 별 재질 별로 상품을 볼 수 있고, 상품 색을 바꿔볼 수 있고, RSS로 상품 목록 지원에 꼬리표를 사용한 꼬리표구름 목록까지. 그외 다양한 웹2.0 기술을 사용하는 쇼핑몰.

엑스파이더(www.xpyder.co.kr) : RSS구독기인 엑스파이더 배포 사이트

오데오(http://odeo.com/) : 파드캐스팅 포털 사이트.

오디오블로그닷컴(www.audioblog.com) : 파드캐스팅과 비디오 블로그 서비스 사이트.

오라일리 미디어(www.oreilly.com) : 미국의 미디어기업으로 국내에는 IT전문 출판사로 더 유명하다. 웹2.0 컨퍼런스를 주최하며 웹2.0이라는 낱말을 만들고 전파시켰다.

오버추어(www.overture.com) : 한국에서도 검색광고의 절반 정도를 차지하는 세계 검색광고 시장의 강자. 야후에 인수되었다.

올블로그(www.allblog.net) : 한국의 대표적인 메타사이트로 등록된 블로그 사이트의 RSS를 모아서 보여준다.

워크스팟(www.workspot.com) : 브라우저 상에서 리눅스를 사용할 수 있다. 현재 설치된 것은 Red Hat 8 & Mandrake 9.1 remote desktops.

웨이백머신(www.archive.org) : 인터넷의 과거 정보를 저장하고 검색할 수 있는 사이트로 웹사이트 문서 저장에서 텔레비젼 프로그램 저장까지 다양한 정보를 기록하고 있다.

웹2.0컨퍼런스(www.web2con.com) : 오라일리가 주최해 2004년 10월 5일부터 일주일 동안 미국 샌프란시스코에서 열린 웹2.0 컨퍼런스의 공식 사이트

위키피디아(www.wikipedia.org) : 전세계 네티즌이 참여해 만드는 공용백과사전

윙크(www.wink.com) : 마이클 태니(Michael Tanne)의 태그 기반 검색엔진. 태그랭크(TagRank)을 이용한 필터링을 통해 최고의 검색 결과를 제공하고 검색 결과를 발행하는 기능이 특징이다. 스팸이 없는 깨끗한 검색결과도 특징이다.

이글루스(www.egloos.com) : 한국의 블로그 전문 사이트. '이글루스 가든'이라는 꼬리표를 적용한 새로운 커뮤니티를 선보였다.

잉키보드(http://www.cfcassidy.com/InkyBoard/) : 태블릿PC(Tablet PC)를 위한 칠판(Whiteboard). 인터넷 상에서 칠판 대용으로 사용할 수 있다는 것이 특징이다.

인트라V뉴스(www.intravnews.com) : 아웃룩 플러그인 방식의 구독기 배포 사이트

자쿠바(www.jacuba.com) : 철자 검사 사이트. 브라우저나 사용환경에 상관 없이 동작한다는 점이 특징이다. 윈도 사용 환경이 아닌 경우 유용.

조이엔트(Joyent, www.joyent.com) : 개인의 편지나 일정, 주소록 등을 관리하는 PIMS 서비스로 기존 서비스와 다른 점은 꼬리표를 이용해 분류를 하고, 아작스, 주소록의 구글지도 연동과 같은 시맨틱웹 기술을 이용하는 점이다.

지오뉴스(Geonews, http://www.wereporters.com/geonews.htm) : 구글 뉴스와 구글 맵을 혼합한 서비스로 하우징맵, 지오블로거와 함께 혼합(mash-up) 서비스의 한 종류로 주목받고 있다.

지오블로거(www.geobloggers.com) : 세계 주요 도시에서 찍은 사진들을 구글 지도에 표시해주는 사이트. 네티즌이 플릭커에 올린 해당 도시 사진에 지오블로거를 이용해 도시이름 꼬리표를 붙여주면 구글의 지도를 선택할 경우 관련 사진이 뜨는 서비스다.

짐브라(Zimbra, www.zimbra.com) : 개인일정 서비스로 아작스와 RSS, 스카이프, 구글지도 연동이라는 특징을 가지고 있다.

칼렌다허브(http://www.calendarhub.com) : Ajax로 구현된 일정관리 사이트.

콘파뷸레이터(www.konfabulator.com) : 콘파뷸레이터라는 대시보드 프로그램 개발사. 콘파뷸레이터도 XML과 자바스크립트를 이용하기 때문에 위젯이라는 확장 프로그램을 사용자들이 개발하기 쉽다. 야후에 인수된 후 야후 위젯(http://kr.widget.yahoo.com)으로 다시 태어났다.

클립마크스(www.clipmarks.com) : 신문 잡지의 일부를 찢어서 보관하는 것처럼 웹에서도 일부분을 보관할 수 있도록 하라는 사이트. 웹페이지 전체가 아니라 부분만 찢어서 보관할 수 있도록 해주는 사이트로, 웹 상의 페이지 일부 클립(스크랩)은 물론 소셜클립마크를 지향하고 있는 사이트다.

클립폴리오(klipfolio, www.serence.com) : 작은 크기의 RSS 구독기 프로그램인 클립폴리오 배포 사이트

키코(http://www.kiko.com) : Ajax로 구현된 일정관리 사이트. 드래그 앤 드롭 인터페이스와 찌종이(레이블)를 지원한다.

타이프테스터(http://typetester.maratz.com) : Ajax로 구현한 글꼴(font) 비교하기 사이트

태그클라우드(www.tagcloud.com) : 꼬리표 낱말의 크기가 모두 달라 꼬리표가 구름모양으로 표시된다는 꼬리표구름. 꼬리표 기술을 알아보려면 들러야 할 곳이다.

태터센터(www.tattertools.com) : 블로그 프로그램인 태터툴즈를 만들어 제공하는 곳. 최근 꼬리표 기술을 적용해 커뮤니티 사이트로 변화중이다.

테일랭크(http://www.tailrank.com/) : 수 천 개 블로그 중에서 최고의 알맹이만을 골라서 보여준다는 사이트. 사용자들이 직접 기사를 수정하는 것이 특징이다.

테크노라티(www.technorati.com) : 2천만 개의 블로그가 등록된 꼬리표(tag) 기반의 블로그 전문 검색엔진. 구글보다 빨리 블로그를 검색해준다는 이유로 스타가 되었다.

토크디거(www.talkdigger.com) : 메타링크 검색엔진. 자신이 알고 있는 URL을 입력하면 해당 URL을 인용한 사이트를 찾아준다. 즉 특정 URL을 화제로 삼은 사이트를 찾아주는 검색엔진.

토픽스넷(www.topix.net) : 우편번호를 입력하면 30만 주제의 뉴스를 찾아주는 서비스

트라이루비(http://tryruby.hobix.com/) : 아작스로 구현한 루비 사이트. ruby 인터프리터쉘을 웹에서 사용 할 수가 있다.

파드캐스트(www.podcast.co.kr) : 파드캐스팅을 지원하는 국내 사이트

파인도리(http://www.findory.com/) : 뉴스와 블로그를 결합시켜 뉴스를 읽고 배우고 개인화시키는 서비스. 인공지능형 뉴스 사이트라는 점이 특징이다.

판도(www.pando.com/) : 누구나 무료로 어떤 크기의 파일이나 폴더라도 이메일로 전송하는 응용 프로그램.

패닉닷컴 쇼핑몰(http://panic.com/goods/) : Ajax를 이용한 쇼핑카트의 예를 볼 수 있다.

페이스북(http://facebook.com/) : 미국 대학생들이 많이 사용하는 커뮤니티 사이트

프로토페이지(www.protopage.com) : 개인화된 뉴스, 쪽지(sticky notes), 즐겨 찾기, 그외 각종 웹페이지를 하나의 페이지에서 볼 수 있게 만든 개인화 홈페이지 서비스 중 하나. 아작스(Ajax)를 이용하는 것이 특징이다.

플란조(http://www.planzo.com) : 일정관리 사이트로 다른 사람들과 일정 공유로 커뮤니티 일정 관리 가능. Ajax를 이용하여 드래그 앤 드롭 인터페이스 지원. RSS 공급 지원.

플릭커(www.flickr.com) : 꼬리표 기반의 사진 사이트. 웹2.0을 대표하는 사이트로 각종 상을 휩쓸다가 야후에 인수되었다.

피드데몬(http://www.bradsoft.com/feeddemon) : 가장 대표적인 RSS 구독기 프로그램인 피드데몬 배포 사이트

피드버너(www.feedburner.com) : 개인 블로그의 트래픽 부담을 덜기 위해 RSS 트래픽을 대신 떠안는 서비스.

피드스터(http://feedster.com) : 미국 샌프란시스코에 위치한 검색 엔진과 XML 웹 컨텐트 신디케이션 기업.

피카사(http://picasa.google.com/) : 웹 기반의 사진 관리 편집 사이트. 구글에 인수되었다.

하우징맵(www.housingmaps.com) : 폴 레이드매처(Paul Rademacher)라는 디자이너가 개발한 부동산 서비스로 구글지도에 크레이그리스트(craigslist)의 부동산 정보를 결합했다.

<!-- //포스팅 -->

출처 : [기타] 인터넷 : http://webperse.com

Posted by 1010
98..Etc/Etc...2008. 8. 8. 09:08
반응형

블로그를 보다 zzony님의 포스팅을 찾았다.

 

웹페이지를 하나의 그림이나 파일로 저장해줍니다」라는 글이다.

 

서비스를 제공하는 사이트는 thumbalizr.com인데 네이버로 테스트 해봤다.

 

홈페이지에 접속하여 이미지로 만들 사이트의 주소를 적으면 다음과 같이 간단한 섬네일과 해상도를 표시한다.

 

    

 

해상도를 선택하면 그 해상도에 맞는 페이지를 깔끔하게 이미지로 저장하여 보여준다.

다음은 800 해상도를 선택했을 때의 그림이다.

 

 

 

이 서비스를 사용해보면서 블로그에서의 문제가 되는 스크랩기능을 이렇게 이미지로 제공하면 어떨까 라는 생각을 해본다.

 

컨텐츠의 스크랩에 있어서 문제가 되는 것이 대부분 스크랩을 지원하는 사이트의 경우 스크랩 후에 그 컨텐츠의 내용을 수정할 수 있다는 점이다.

 

즉 양질의 컨텐츠라해도 복사&붙여넣기나 스크랩 버튼 클릭하나로 다른 사람의 것으로 쉽게 보여질 수 있는 것이다.

 

물론 이렇게 이미지로 제공하는 것이 스크린 캡쳐나 내용을 다시 작성하는 것 등의 방법으로 컨텐츠의 불법스크랩을 할 수 있다고 해도 지금처럼의 무분별한 펌질이나 수정을 어느정도 막을 수 있지 않을까 생각한다.

 

그리고 스크랩을 수행할때 이미지를 배경에 저작자와 서비스 제공자의 워터마크를 추가하면 본 저작자의 저작권 보호와 불법 스크랩을 근절한다는 서비스 업체의 이미지에도 도움이 될 것 같다.

Posted by 1010
반응형

<HTML>

       <HEAD>

              <TITLE>TextArea </TITLE>

              <SCRIPT LANGUAGE="JavaScript">

<!--

 

function CheckStrLength()

{

 

 var temp;

 var f = document.form.write_text.value.length;

 var msglen = 256; //최대 길이

 var tmpstr = "";

 var enter = 0;

 var strlen;

 

 // 초기 최대길이를 텍스트 박스에 뿌려준다.

 if(f == 0)

  document.form.remain.value = msglen;

 else

 {

  for(k=0;k<f;k++)

  {

   temp = document.form.write_text.value.charAt(k);

  

   if(temp == '\n')// 입력 라인 제한을 위해 엔터키 횟수 증가

   {

    enter++;

   }

 

   if(escape(temp).length > 4)

    msglen -= 2;

   else

    msglen--;

 

 

   if(msglen < 0)

   {

    alert("총 영문 512자 한글 256자 까지 쓰실 수 있습니다.");

    document.form.write_text.value = tmpstr;

    break;

   }

   else if(enter > 3)

   {

    alert("라인수 4라인을 넘을수 없습니다.");

    enter = 0;

    strlen = tmpstr.length - 1;

    //alert(strlen);

    document.form.write_text.value = tmpstr.substring(0,strlen);

    break;

   }

   else

   {

 

    document.form.remain.value = msglen;

    tmpstr += temp;

   }

  }

 }

}

//-->

              </SCRIPT>

       </HEAD>

       <BODY>

              아는 후배 한테 받은건데 잘써먹고 있어요

              <FORM name="form" METHOD="POST" ACTION="" ID="Form1">

                     <table border="0" cellspacing="0" cellpadding="0" ID="Table1">

                            <tr>

                                   <td width="200" style="FONT-FAMILY: 굴림; FONT-SIZE: 12pt">⊙ 내용입력 남은 글자수 :

                                   </td>

                                   <td align="left" width="50"><input type="text" name="remain" size="3" value="" style="background-color:#ffffff;border:1 solid #33333; FONT-FAMILY: 굴림; FONT-SIZE: 10pt"

                                                 readonly ID="Text1">

                                   </td>

                                   <td align="" valign="bottom" width="360">(4줄까지만 작성 가능합니다.)

                                   </td>

                            </tr>

                            <tr>

                                   <td colspan="3" height="1"></td>

                            </tr>

                            <tr>

                                   <td colspan="3"><img src="http://okjsp.pe.kr/images/okjsp_top.gif" width="1" height="3" border="0"><br>

                                          <textarea name="write_text" cols="75" rows="10" WRAP="SOFT" onChange="CheckStrLength()" onKeyUp="CheckStrLength()"

                                                 ID="Textarea1"></textarea>

                                   </td>

                            </tr>

                     </table>

              </FORM>

       </BODY>

</HTML>

Posted by 1010
반응형

<!--

// 최상위 체크 로직(chars로 넘긴 값이 있다면 true)

    function containsCharsOnly(input,chars) {

        for (var inx = 0; inx < input.value.length; inx++) {

            if (chars.indexOf(input.value.charAt(inx)) == -1)

                return false;

        }

        return true;

    }

 

 

// 최상위 체크 로직(chars로 넘긴 값이 있다면 false)

 function containsChars(input,chars) {

     for (var inx = 0; inx < input.value.length; inx++) {

        if (chars.indexOf(input.value.charAt(inx)) != -1)

            return true;

     }

     return false;

 }

 

 

 

// 숫자 체크

    function isNum(input) {

        var chars = "0123456789";

        return containsCharsOnly(input,chars);

    }

 

 

 

// 이름체크

 function nameCheck(input){

  var chars = '0123456789~!@#$%^&*()_-+=|{}[]<>,./?';

        return containsChars(input,chars);

 }

 

 

 

// 전화 번호 Check

    function isPhoneCheck(input) {

     var chars = "0123456789( ).-,<>{}[]_~";

        return containsCharsOnly(input,chars);

    }

 

 

 

// 영문 판별

    function isPhoneCheck(input) {

     var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

        return containsCharsOnly(input,chars);

    }

 

 

 

// 영숫자 판별

    function isPhoneCheck(input) {

     var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        return containsCharsOnly(input,chars);

    }

 

 

 

 // 입력값이 숫자,대시(-)로 되어있는지 체크

 function isNumDash(input) {

     var chars = "-0123456789";

     return containsCharsOnly(input,chars);

 }

 

 

 

 // 입력값이 숫자,콤마(,)로 되어있는지 체크

 function isNumComma(input) {

     var chars = ",0123456789";

     return containsCharsOnly(input,chars);

 }

 

 

 

 // 입력값이 사용자가 정의한 포맷 형식인지 체크

 // 자세한 format 형식은 자바스크립트의 ''regular expression''을 참조

 function isValidFormat(input,format) {

     if (input.value.search(format) != -1) {

         return true; file://올바른 포맷 형식

     }

     return false;

 }

 

 

 

 /**

  * 입력값이 이메일 형식인지 체크

  * ex) if (!isValidEmail(form.email)) {

  *         alert("올바른 이메일 주소가 아닙니다.");

  *     }

  */

 function isValidEmail(input) {

 //    var format = /^(\S+)@(\S+)\.([A-Za-z]+)$/;

     var format = /^((\w|[\-\.])+)@((\w|[\-\.])+)\.([A-Za-z]+)$/;

     return isValidFormat(input,format);

 }

 

 

 

 /**

  * 입력값이 전화번호 형식(숫자-숫자-숫자)인지 체크

  */

 function isValidPhone(input) {

     var format = /^(\d+)-(\d+)-(\d+)$/;

     return isValidFormat(input,format);

 }

 

 

 

 // 콤마 없애기

 function removeComma(input) {

     return input.value.replace(/,/gi,"");

 }

 

 

 

 // 문자 변환 함수

    function alterString(str,before,after) {

     var returnStr = "";

     for(i = 0; i < str.length; i++) {

      value = str.charAt(i);

      index = before.indexOf(value);

      if(index >= 0) value = after.charAt(index);

      returnStr += value;

     }

     return returnStr;

    }

 

 

 

// --> 대문자 변환 함수

    function ToUpper(arg) {

     var str1 = "abcdefghijklmnopqrstuvwxyz";

     var str2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

     return alterString(arg,str1,str2);

    }

 

 

 

// --> 소문자 변환 함수

    function ToLower(arg){

     var str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

     var str2 = "abcdefghijklmnopqrstuvwxyz";

     return alterString(arg,str1,str2);

    }

 

 

 

// 반각 문자를 전각문자로

    function convert2ByteChar(x_char) {

        var x_2byteChar = ""; //컨버트된 문자

        var c = x_char.charCodeAt(0);

        if(32 <= c && c <= 126) { //전각으로 변환될수 있는 문자의 범위

            if(c == 32) { //스페이스인경우 ascii 코드 32

                x_2byteChar = unescape("%uFFFC");

            } else {

                x_2byteChar = unescape("%u"+gf_DecToHex(c+65248));

            }

        }

        return  x_2byteChar;

    }

 

 

 

// 10진수를 16진수로

    function gf_DecToHex(x_dec) {

        var x_Hex = new Array();

        var x_serial = 0;

        var x_over16 = x_dec;

        var x_tempNum = 0;

        while(x_dec > 15) {

            var x_h = x_dec % 16;          //나머지

            x_dec = parseInt(x_dec/16); //

            x_Hex[x_serial++] = (x_h > 9 ? String.fromCharCode(x_h + 55) : x_h); //16진수코드변환

        }

 

 

 

    //마지막은 몫의 값을 가짐

        x_Hex[x_serial++] = (x_dec > 9 ? String.fromCharCode(x_dec + 55) : x_dec); //16진수코드변환

  

    //,나머지,나머지,.....

        var retValue = "";

        for(var i=x_Hex.length ; i>0 ;i--) {

            retValue += x_Hex[i-1];

        }

        return retValue;

    }

 

 

 

// input box space, &nbsp;등 만으로 넣고 장난 칠때 이들 문자 뺀 길이를 통해 유효성 체크한다...

    function CheckStr(strOriginal, strFind, strChange){

        var position, strOri_Length;

        position = strOriginal.indexOf(strFind); 

        while (position != -1){

            strOriginal = strOriginal.replace(strFind, strChange);

            position = strOriginal.indexOf(strFind);

        }

        strOri_Length = strOriginal.length;

        return strOri_Length;

    }

 

 

 

// 체크 박스에 체크가 되어 있으면 true

 function checkValidator(str) {

  if(str.checked) return true;

  else return false;

 }

 

 

 

 // 비밀번호는 4자 등 최대 최소 길이를 파람으로 주고 처리...

    function checkLength(str,minLng,maxLng){

        var ckstr = str.value.length;

        if (parseInt(ckstr) < parseInt(minLng) || parseInt(ckstr) > parseInt(maxLng)) return false;

        return true;

    }

 

 

 

// 숫자만 받아서 아니면 메세지 보여 주는

    function onlyNumber(objEv) {

        if(!isNum(objEv)){

            alert("숫자만 입력가능합니다.");

            objEv.value = "";

            objEv.focus();

            return;

        }

    }

 

 

 

// 숫자를 체크하다가 6자 등 원하는 만큼 이동후 다음 input 박스로 이동 시키는...

    function goJump(fname, len, goname){

        onlyNumber(fname);

        if (document.all[fname].value.length == len) document.all[goname].focus();

    }

 

 

 

// 주민등록번호 체크 로직

    function check_ResidentNO(str_f_num,str_l_num){ 

        var i3=0

        for (var i=0;i<str_f_num.length;i++){

         var ch1 = str_f_num.substring(i,i+1);

            if (ch1<'0' || ch1>'9') i3=i3+1;

        }

        if ((str_f_num == '') || ( i3 != 0 )) return false;

        var i4=0;

        for (var i=0;i<str_l_num.length;i++){

            var ch1 = str_l_num.substring(i,i+1);

            if (ch1<'0' || ch1>'9') i4=i4+1;

        }

        if ((str_l_num == '') || ( i4 != 0 )) return false;

        if(str_f_num.substring(0,1) < 4) return false;

        if(str_l_num.substring(0,1) > 2) return false;

        if((str_f_num.length > 7) || (str_l_num.length > 8)) return false;

        if ((str_f_num == '72') || ( str_l_num == '18'))  return false;

               

        var f1=str_f_num.substring(0,1)

        var f2=str_f_num.substring(1,2)

        var f3=str_f_num.substring(2,3)

        var f4=str_f_num.substring(3,4)

        var f5=str_f_num.substring(4,5)

        var f6=str_f_num.substring(5,6)

        var hap=f1*2+f2*3+f3*4+f4*5+f5*6+f6*7

        var l1=str_l_num.substring(0,1)

        var l2=str_l_num.substring(1,2)

        var l3=str_l_num.substring(2,3)

        var l4=str_l_num.substring(3,4)

        var l5=str_l_num.substring(4,5)

        var l6=str_l_num.substring(5,6)

        var l7=str_l_num.substring(6,7)

        hap=hap+l1*8+l2*9+l3*2+l4*3+l5*4+l6*5

        hap=hap%11

        hap=11-hap

        hap=hap%10

        if (hap != l7) return false;

        return true;

    }

 

 

 

// 바이트 구하기

    function getByteLen(str){

        return(str.length+(escape(str)+"%u").match(/%u/g).length-1);

    }

 

 

 

 // url 가져오기

    function getUrlAddress(){

        var pageUrl = document.location;

     pageUrl  = new String(pageUrl);

      return pageUrl.substring(0,pageUrl.lastIndexOf("/"));

    }

 

 

 

// 오른마우스 금지, 나중에 해당 주석 풀고 사용

    function rightbutton(e){

        if (navigator.appName == 'Netscape' &&  (e.which == 3 || e.which == 2))

            return false;

        else if (navigator.appName == 'Microsoft Internet Explorer' && (event.button == 2 || event.button == 3))

        {

            alert("죄송합니다!! 정보무단복제를 막기 위하여 오른쪽 마우스 사용을 허용하지 않습니다.");

            return false;

        }

        return true;

    }

 

 

 

//document.onmousedown=rightbutton;

 

// 컨트롤 키 금지, 나중에 해당 주석 풀고 사용

    function checkCtl(){

        if (document.all){

            if(event.keyCode==17) {

                alert("죄송합니다!! 컨트롤키 사용을 허용하지 않습니다.");

                return false;

            }

        }

    }

 

 

 

//document.onkeydown = checkCtl;

 

 function setCookie(name,value) {

     document.cookie = name+"="+escape(value)+";path=/;domain=.kkaok.pe.kr;";

 }

 

 function setCookie(name,value, expires) {

     document.cookie = name + "=" + escape(value) +

     "; path=/; expires=" + expires.toGMTString();

 }

 

 function getCookie(Name) {

     var search = Name + "="

     if (document.cookie.length > 0) { // 쿠키가 설정되어 있다면

         offset = document.cookie.indexOf(search)

         if (offset != -1) { // 쿠키가 존재하면

             offset += search.length

         // set index of beginning of value

             end = document.cookie.indexOf(";", offset)

         // 쿠키 값의 마지막 위치 인덱스 번호 설정

             if (end == -1)

                 end = document.cookie.length

             return unescape(document.cookie.substring(offset, end));

         }

     }

 }

 

 

 

    String.prototype.trim = function(){

        return this.replace(/(^\s*)|(\s*$)/gi, "");

    }

 

//문자 바꾸기, 사용법 var str = 문자열.replaceAll("a", "1"); 

    String.prototype.replaceAll = function(str1, str2) {

        var temp_str = "";

        if (this.trim() != "" && str1 != str2) {

            temp_str = this.trim();

            while (temp_str.indexOf(str1) > -1){

                temp_str = temp_str.replace(str1, str2);

            }

        }

        return temp_str;

    }

 

//-->

 

 

Posted by 1010
반응형
script>

<!--

//---------------------------------------------------------------------------//

//                                StringUtil                                 //

//---------------------------------------------------------------------------//

 

/**----------------------------------------------------------------------------

 함수명 : removeWhiteSpace()

   : 문자열에 포함된 공백, 개행문자 제거

 인자값 : String strTarget - 문자열에 포함된

                             공백, 개행문자를 제거하고자하는 문자열

   : String - 좌우 공백이 제거된 문자열

 사용법 : var strResult = trim('  문 자 열  ');

          return '문자열'

-----------------------------------------------------------------------------*/

function removeWhiteSpace(strTarget)

{

    var strEliminate = /\s+/g;

 

    if(strTarget)

    {

        return strTarget.replace(strEliminate,"");

    }

    else

    {

        return strTarget;

    }

 }

 

 

/**----------------------------------------------------------------------------

 함수명 : trim()

   : 좌우 공백 제거

 인자값 : String strTarget - 좌우 공백을 없애고자하는 문자열

   : String - 좌우 공백이 제거된 문자열

 사용법 : var strResult = trim('  문 자 열  ');

          return '문 자 열'

-----------------------------------------------------------------------------*/

function trim(strTarget)

{

    var strEliminate = /(^\s*)|(\s*$)/gi;

   

    if(strTarget)

    {

        return strTarget.replace(strEliminate,"");

    }

    else

    {

        return strTarget;

    }

 }

 

 

/**----------------------------------------------------------------------------

 함수명 : ltrim()

   : 좌측 공백 제거

 인자값 : String strTarget - 좌측 공백을 없애고자하는 문자열

   : String - 좌측 공백이 제거된 문자열

 사용법 : var strResult = ltrim('  문 자 열  ');

          return '문 자 열 '

-----------------------------------------------------------------------------*/

 

function ltrim(strTarget)

{

    while(strTarget.substring(0,1)==" ")

    {

        strTarget = strTarget.substring(1);

    }

    return strTarget;

 }

 

 

/**----------------------------------------------------------------------------

 함수명 : rtrim()

   : 우측 공백 제거

 인자값 : String strTarget - 우측 공백을 없애고자하는 문자열

   : String - 우측 공백이 제거된 문자열

 사용법 : var strResult = rtrim('  문 자 열  ');

          return ' 문 자 열'

-----------------------------------------------------------------------------*/

function rtrim(strTarget)

{

    var len = strTarget.length;

   

    while(strTarget.substring(len-1,len)==" ")

    {

        strTarget = strTarget.substring(0,len-1);

        len = strTarget.length;

    }

    return strTarget;

 }

 

 

/**----------------------------------------------------------------------------

 함수명 : replaceAll()

   : 소스문자열에 포함된 문자를 원하는 문자로 변환

          공백 또는 '0'을 자리수만큼 채운 문자열

 인자값 : String strSrc - 소스 문자열

          String strOld - 총 자릿수

          String strNew - 숫자인가?             (옵션 default : false)

   : String - 소스 문자열을 포함해 원하는 위치에

                   공백 또는 '0'을 자리수만큼 채운 문자열

 사용법 : var strResult = packValue('1234', 8, true, true);

          return '00001234'

-----------------------------------------------------------------------------*/

function replaceAll(strSrc, strOld, strNew)

{

 

    var retValue = "";

 

    if(strOld == null)

    {

        return strSrc;

    }

    if (strSrc != "" && strOld != strNew)

    {

        retValue = strSrc;

 

        while (retValue.indexOf(strOld) > -1)

        {

            retValue = retValue.replace(strOld, strNew);

        }

    }

    return retValue;

}

 

 

// 문자 변환 함수 (=replaceAll() 함수와 동일)----------------------------------

function alterString(strSrc, strOld, strNew)

{

    var retValue = "";

 

    for(i = 0; i < strSrc.length; i++)

    {

        var value = strSrc.charAt(i);

        var index = strOld.indexOf(value);

 

        if(index >= 0)

        {

            value = strNew.charAt(index);

        }

        retValue += value;

    }

    return retValue;

}

 

 

/**----------------------------------------------------------------------------

 함수명 : formatString()

   : 포멧 문자열 변환

 인자값 : String strSrc    - 변환하고자 하는 문자열

          String strFormat - 포멧형식

          String strDelim  - 포멧 구분자 문자

   : String - 원하고자 하는 포멧으로 변환된 문자열

 사용법 : var strResult = formatString('20050512', '9999/99/99');

          return ' 문 자 열'

-----------------------------------------------------------------------------*/

function formatString(strSrc,strFormat)

{

    var retValue = "";

    var j = 0;

 

    var strSrc = strSrc.replace(/(\$|\^|\*|\(|\)|\+|\.|\?|\\|\{|\}|\||\[|\]|\-|\/|\:)/g, "");

 

    for (var i=0; i< strSrc.length; i++)

    {

        retValue += strSrc.charAt(i);

        j++;

 

        if ( (j < strSrc.length && j < strFormat.length)

              && (strFormat.charAt(j) != "9"

              && strFormat.charAt(j).toLower != "x"

              && strFormat.charAt(j) != "#")  )

        {

            retValue += strFormat.charAt(j++);

        }

    }

    return retValue;

}

 

 

/**----------------------------------------------------------------------------

 함수명 : packValue()

   : 소스 문자열을 포함해 원하는 위치에

          공백 또는 '0'을 자리수만큼 채운 문자열

 인자값 : String strSrc - 소스 문자열

          Int    nSize  - 총 자릿수

          bool   bNum   - 숫자인가?             (옵션 default : false)

          bool   bLeft  - 왼쪽에 위치할 것인지? (옵션 default : true )

   : String - 소스 문자열을 포함해 원하는 위치에

                   공백 또는 '0'을 자리수만큼 채운 문자열

 사용법 : var strResult = packValue('1234', 8, true, true);

          return '00001234'

-----------------------------------------------------------------------------*/

function packValue(strSrc, nSize, bNum, bLeft)

{

    var retValue = "";

    var preValue = "";

    var postValue = "";

    var nLen = 0;

    var i = 0;

 

    if(bNum == null)

    {

        bNum = false;

    }

    if(bLeft == null)

    {

        bLeft = true;

    }

 

    strSrc = "" + strSrc;

    nLen = strSrc.length;

    retValue = strSrc;

 

    if(bNum)

    {

        for(i = nLen; i < nSize; i++)

        {

            if(bLeft)

            {

                preValue += "0";

            }

            else

            {

                postValue += "0";

            }

        }

    }

    else

    {

        for(i = nLen; i < nSize; i++)

        {

            if(bLeft)

            {

                preValue += " ";

            }

            else

            {

                postValue += " ";

            }

        }

 

    }

    retValue = preValue + retValue + postValue;

 

    return retValue;

}

 

 

/**----------------------------------------------------------------------------

 함수명 : getByte()

   : 문자열의 바이트수 구하기

 인자값 : String strSrc - 소스 문자열

   : Int - 문자열 바이트수

 사용법 : var nResult = getByte('가나다1234');

          return 10

-----------------------------------------------------------------------------*/

function getByte(strSrc)

{  

//  var nByte = 0;

//  for(var i=0; i < strSrc.length; i++)

//  {

//      if(!((strSrc.charCodeAt(i) > 0x3130 && strSrc.charCodeAt(i) < 0x318F)

//          || (strSrc.charCodeAt(i) >= 0xAC00 && strSrc.charCodeAt(i) <= 0xD7A3)))

//      {

//          nByte += 1;

//      }

//      else

//      {

//          nByte += 2;

//      }

//  }

//  return nByte;

    return (strSrc.length+(escape(strSrc)+"%u").match(/%u/g).length - 1);

}

 

 

/**----------------------------------------------------------------------------

 함수명 : toUpper()

   : 소문자를 대문자로 변환

 인자값 : String strSrc - 소스 문자열

   : String - 대문자로 변환된 문자열

 사용법 : var strResult = toUpper('abc');

          return 'ABC'

-----------------------------------------------------------------------------*/

function toUpper(strSrc)

{

    var str1 = "abcdefghijklmnopqrstuvwxyz";

    var str2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

 

    return alterString(strSrc, str1, str2);

}

 

 

/**----------------------------------------------------------------------------

 함수명 : toLower()

   : 대문자를 소문자로 변환

 인자값 : String strSrc - 소스 문자열

   : String - 소문자로 변환된 문자열

 사용법 : var strResult = toLower('ABC');

          return 'abc'

-----------------------------------------------------------------------------*/

function toLower(strSrc)

{

    var str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    var str2 = "abcdefghijklmnopqrstuvwxyz";

 

    return alterString(strSrc, str1, str2);

}

 

 

/**----------------------------------------------------------------------------

 함수명 : removeComma()

   : 문자열에 포함된 ','를 제거

 인자값 : String strSrc - 소스 문자열

   : String - ','가 제거된 문자열

 사용법 : var nResult = removeComma('123,456,789');

          return '123456789'

-----------------------------------------------------------------------------*/

function removeComma(strSrc)

{

    return strSrc.replace(/,/gi,"");

}

 

 

/**----------------------------------------------------------------------------

 함수명 : removeFormat()

   : 문자열에 포함된 포멧문자 ", . - / :"를 제거

 인자값 : String strSrc - 소스 문자열

   : String - ", . - / :"가 제거된 문자열

 사용법 : var nResult = removeComma('2005/03/12 12:24:00');

          return '20050312 122400'

-----------------------------------------------------------------------------*/

function removeFormat(strSrc)

{

    return strSrc.replace(/(\,|\.|\-|\/|\:)/g,"");

}

 

 

/**----------------------------------------------------------------------------

 함수명 : addComma()

   : 문자열에 포함된 ','를 제거

 인자값 : String strSrc - 소스 문자열

          bool   bSymbol - '+' 부호일때 보일것인가?

   : String - ','가 제거된 문자열

 사용법 : var nResult = addComma('1234567.12', true);

          return '+1,234,567.12'

-----------------------------------------------------------------------------*/

function addComma(strSrc, bSymbol)

{

    var strSymbol = '';

    var retValue  = '';

    var strTempSymbol = '';

    var strTempDotValue = '';

 

    var nLen      = 0;

 

    try

    {

        if(bSymbol == null)

        {

            bSymbol = false;

        }

 

        strSrc = strSrc.trim();

 

        if(strSrc.indexOf('.') != 0)

        {

            var nIndex = strSrc.indexOf('.');

            strTempDotValue = strSrc.substring(nIndex);

            strSrc = strSrc.substring(0, nIndex);

        }

   

        strTempSymbol = strSrc.substr(0,1);

        if(strTempSymbol == '+')

        {

            strSymbol = '+';

            strSrc = strSrc.substring(1);

        }

        if(strTempSymbol == '-')

        {

            strSymbol = '-';

            strSrc = strSrc.substring(1);

        }

 

        nLen = strSrc.length;

 

        for(var i=1; i <= nLen; i++)

        {

            retValue = strSrc.charAt(nLen - i) + retValue;

 

            if((i % 3 == 0) && ((nLen - i) != 0))

            {

                retValue = "," + retValue;

            }

        }

 

        if(bSymbol)

        {

            if(strSymbol == '')

            {

                strSymbol = '+';

            }

        }

        else

        {

            if(strSymbol == '+')

            {

                strSymbol = '';

            }

        }

        return strSymbol + retValue + strTempDotValue;

    }

    catch(e)

    {

    }

}

 

 

 

/**----------------------------------------------------------------------------

   윗 함수 사용법 : trim('aaa'); -> 변수.trim(); 또는 문자열.trim();

-----------------------------------------------------------------------------*/

String.prototype.removeWhiteSpace = function()

{

    return removeWhiteSpace(this);

}

 

String.prototype.trim = function()

{

    return trim(this);

}

 

String.prototype.ltrim = function()

{

    return ltrim(this);

}

 

String.prototype.rtrim = function()

{

    return rtrim(this);

}

 

String.prototype.replaceAll = function(strOld, strNew)

{

    return replaceAll(this, strOld, strNew);

}

 

String.prototype.formatString = function(strFormat)

{

    return formatString(this, strFormat);

}

 

String.prototype.packValue = function(nSize, bNum, bLeft)

{

    return packValue(this, nSize, bNum, bLeft);

}

 

String.prototype.getByte = function()

{

    return getByte(this);

}

 

String.prototype.toUpper = function()

{

    return toUpper(this);

}

 

String.prototype.toLower = function()

{

    return toLower(this);

}

 

String.prototype.removeComma = function()

{

    return removeComma(this);

}

 

String.prototype.removeFormat = function()

{

    return removeFormat(this);

}

 

String.prototype.addComma = function(bSymbol)

{

    return addComma(this, bSymbol);

}

 

-->

</script>

Posted by 1010
반응형

# 자바스크립트 라이브러리와 PHP함수 라이브러리를 같이 올립니다.
# 일부는 PHP스쿨에서 발췌하여 만든 소스입니다.



<!--

var n4 = (document.layers)?true:false;
var e4 = (document.all)?true:false;

//숫자만입력(onKeypress='return keyCheckdot(event)')
function keyCheck(e) {
if(n4) var keyValue = e.which
else if(e4) var keyValue = event.keyCode
if (((keyValue >= 48) && (keyValue <= 57)) || keyValue==13) return true;
else return false
}

//숫자및돗트입력(onKeypress='return keyCheckdot(event)')
function keyCheckDot(e) {
if(n4) var keyValue = e.which
else if(e4) var keyValue = event.keyCode
if (((keyValue >= 48) && (keyValue <= 57)) || keyValue==13 || keyValue==46) return true;
else return false
}

//공백제거
function Trim(string) {
for(;string.indexOf(" ")!= -1;){
string=string.replace(" ","")
}
return string;
}

//입력검사
function Exists(input,types) {
if(types) if(!Trim(input.value)) return false;
return true;
}

//영문검사+숫자검사(첫글자는 반드시영문)
function EngNum(input,types) {
if(types) if(!Trim(input.value)) return false;
var error_c=0, i, val;
for(i=0;i<Byte(input.value);i++) {
val = input.value.charAt(i);
if(i == 0) if(!((val>='a' && val<='z') || (val>='A' && val<='Z'))) return false;
else if(!((val>=0 && val<=9) || (val>='a' && val<='z') || (val>='A' && val<='Z'))) return false;
}
return true;
}

//영문검사+숫자검사
function EngNumAll(input,types) {
if(types) if(!Trim(input.value)) return false;
var error_c=0, i, val;
for(i=0;i<Byte(input.value);i++) {
val = input.value.charAt(i);
if(!((val>=0 && val<=9) || (val>='a' && val<='z') || (val>='A' && val<='Z'))) return false;
}
return true;
}

//영문검사+숫자검사+'_'
function EngNumAll2(input,types) {
if(types) if(!Trim(input.value)) return false;
var error_c=0, i, val;
for(i=0;i<Byte(input.value);i++) {
val = input.value.charAt(i);
if(!((val>=0 && val<=9) || (val>='a' && val<='z') || (val>='A' && val<='Z') || val=='_')) return false;
}
return true;
}

//영문검사
function Eng(input,types) {
if(types) if(!Trim(input.value)) return false;
var error_c=0, i, val;
for(i=0;i<Byte(input.value);i++) {
val = input.value.charAt(i);
if(!((val>='a' && val<='z') || (val>='A' && val<='Z'))) return false;
}
return true;
}

//숫자만입력
/*
function numberonlyinput() {
var ob = event.srcElement;
ob.value = noSplitAndNumberOnly(ob);
return false;
}
*/

//돈(3단위마다 컴마를 붙인다.)
function checkNumber() {
var ob=event.srcElement;
ob.value = filterNum(ob.value);
ob.value = commaSplitAndNumberOnly(ob);
return false;
}

//한정액(일정금액 이상이 되면 올라기지 않게 한다.)
function chkhando(money) {
var ob=event.srcElement;
ob.value = noSplitAndNumberOnly(ob);
if(ob.value > money) ob.value = money;
return false;
}

//이자율(소수점 사용가능)
function checkNumberDot(llen,rlen) {
if(llen == "") llen = 8;
if(rlen == "") rlen = 2;
var ob=event.srcElement;
ob.value = filterNum(ob.value);

spnumber = ob.value.split('.');
if( spnumber.length >= llen && (spnumber[0].length >llen || spnumber[1].length >llen)) {
ob.value = spnumber[0].substring(0,llen) + "." + spnumber[1].substring(0,rlen);
ob.focus();
return false;
}
else if( spnumber[0].length > llen ) {
ob.value = spnumber[0].substring(0,llen) + ".";
ob.focus();
return false;
}
else if(ob.value && spnumber[0].length == 0) {
ob.value = 0 + "." + spnumber[1].substring(0,rlen);
ob.focus();
return false;
}
ob.value = commaSplitAndAllowDot(ob);
return false;
}

//참조함수
function filterNum(str) {
re = /^\$|,/g;
return str.replace(re, "");
}

//참조함수(컴마불가)
function commaSplitAndNumberOnly(ob) {

var txtNumber = '' + ob.value;
if (isNaN(txtNumber) || txtNumber.indexOf('.') != -1 ) {
ob.value = ob.value.substring(0, ob.value.length-1 );
ob.value = commaSplitAndNumberOnly(ob);
ob.focus();
return ob.value;
}
else {
var rxSplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])');
var arrNumber = txtNumber.split('.');
arrNumber[0] += '.';
do {
arrNumber[0] = arrNumber[0].replace(rxSplit, '$1,$2');
}
while (rxSplit.test(arrNumber[0]));

if (arrNumber.length > 1) {
return arrNumber.join('');
}
else {
return arrNumber[0].split('.')[0];
}
}
}

//참조함수(컴마가능)
function commaSplitAndAllowDot(ob) {

var txtNumber = '' + ob.value;
if (isNaN(txtNumber) ) {
ob.value = ob.value.substring(0, ob.value.length-1 );
ob.focus();
return ob.value;
}
else {
var rxSplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])');
var arrNumber = txtNumber.split('.');
arrNumber[0] += '.';
do {
arrNumber[0] = arrNumber[0].replace(rxSplit, '$1,$2');
}
while (rxSplit.test(arrNumber[0]));

if (arrNumber.length > 1) {
return arrNumber.join('');
}
else {
return arrNumber[0].split('.')[0];
}
}
}

//숫자만가능
function noSplitAndNumberOnly(ob) {
var txtNumber = '' + ob.value;
if (isNaN(txtNumber) || txtNumber.indexOf('.') != -1 ) {
ob.value = ob.value.substring(0, ob.value.length-1 );
ob.focus();
return ob.value;
}
else return ob.value;
}


//바이트검사
function Byte(input) {
var i, j=0;
for(i=0;i<input.length;i++) {
val=escape(input.charAt(i)).length;
if(val== 6) j++;
j++;
}
return j;
}

//팝업메뉴
function popupmenu_show(layername, thislayer, thislayer2) {
thislayerfield.value = thislayer;
thislayerfield2.value = thislayer2;
var obj = document.all[layername];
var _tmpx,_tmpy, marginx, marginy;
_tmpx = event.clientX + parseInt(obj.offsetWidth);
_tmpy = event.clientY + parseInt(obj.offsetHeight);
_marginx = document.body.clientWidth - _tmpx;
_marginy = document.body.clientHeight - _tmpy ;
if(_marginx < 0) _tmpx = event.clientX + document.body.scrollLeft + _marginx ;
else _tmpx = event.clientX + document.body.scrollLeft ;
if(_marginy < 0) _tmpy = event.clientY + document.body.scrollTop + _marginy + 20;
else _tmpy = event.clientY + document.body.scrollTop ;
obj.style.posLeft = _tmpx - 5;
obj.style.posTop = _tmpy;

layer_set_visible(obj, true);
layer_set_pos(obj, event.clientX, event.clientY);
}
function layer_set_visible(obj, flag) {
if (navigator.appName.indexOf('Netscape', 0) != -1) obj.visibility = flag ? 'show' : 'hide';
else obj.style.visibility = flag ? 'visible' : 'hidden';
}
function layer_set_pos(obj, x, y) {
if (navigator.appName.indexOf('Netscape', 0) != -1) {
obj.left = x;
obj.top = y;
} else {
obj.style.pixelLeft = x + document.body.scrollLeft;
obj.style.pixelTop = y + document.body.scrollTop;
}
}


//페이지이동
function move(url) {
location.href = url;
}

//닫기
function toclose() {
self.close();
}

//위치변경
function winsize(w,h,l,t) {
if(window.opener) resizeTo(w,h);
}

//포커스위치
function formfocus(form) {
var len = form.elements.length;
for(i=0;i<len;i++) {
if((form.elements[i].type == "text" || form.elements[i].type == "password") && Trim(form.elements[i].value) == "") {
form.elements[i].value = "";
form.elements[i].focus();
break;
}
}
}

// 날짜,시간 format 함수 = php의 date()
function date(arg_format, arg_date) {
if(!arg_date) arg_date = new Date();

var M = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
var F = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var K = new Array("일","월","화","수","목","금","토");
var k = new Array("日","月","火","水","木","金","土");
var D = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
var l = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
var o = new Array("전","후");
var O = new Array("오전","오후");
var a = new Array("am","pm");
var A = new Array("AM","PM");

var org_year = arg_date.getFullYear();
var org_month = arg_date.getMonth();
var org_date = arg_date.getDate();
var org_wday = arg_date.getDay();
var org_hour = arg_date.getHours();
var org_minute = arg_date.getMinutes();
var org_second = arg_date.getSeconds();
var hour = org_hour % 12; hour = (hour) ? hour : 12;
var ampm = Math.floor(org_hour / 12);

var value = new Array();
value["Y"] = org_year;
value["y"] = String(org_year).substr(2,2);
value["m"] = String(org_month+1).replace(/^([0-9])$/,"0$1");
value["n"] = org_month+1;
value["d"] = String(org_date).replace(/^([0-9])$/,"0$1");
value["j"] = org_date;
value["w"] = org_wday;
value["H"] = String(org_hour).replace(/^([0-9])$/,"0$1");
value["G"] = org_hour;
value["h"] = String(hour).replace(/^([0-9])$/,"0$1");
value["g"] = hour;
value["i"] = String(org_minute).replace(/^([0-9])$/,"0$1");
value["s"] = String(org_second).replace(/^([0-9])$/,"0$1");
value["t"] = (new Date(org_year, org_month+1, 1) - new Date(org_year, org_month, 1)) / 86400000;
value["z"] = (new Date(org_year, org_month, org_date) - new Date(org_year, 0, 1)) / 86400000;
value["L"] = ((new Date(org_year, 2, 1) - new Date(org_year, 1, 1)) / 86400000) - 28;
value["M"] = M[org_month];
value["F"] = F[org_month];
value["K"] = K[org_wday];
value["k"] = k[org_wday];
value["D"] = D[org_wday];
value["l"] = l[org_wday];
value["o"] = o[ampm];
value["O"] = O[ampm];
value["a"] = a[ampm];
value["A"] = A[ampm];

var str = "";
var tag = 0;
for(i=0;i<arg_format.length;i++) {
var chr = arg_format.charAt(i);
switch(chr) {
case "<" : tag++; break;
case ">" : tag--; break;
}
if(tag || value[chr]==null) str += chr; else str += value[chr];
}

return str;
}

// 해상도에 맞는 크기 사용
function screensize() {
self.moveTo(0,0);
self.resizeTo(screen.availWidth,screen.availHeight);
}

// 주민등록번호체크( 입력폼 1개)
function check_jumin(jumin) {
var weight = "234567892345"; // 자리수 weight 지정
var val = jumin.replace("-",""); // "-"(하이픈) 제거
var sum = 0;

if(val.length != 13) { return false; }

for(i=0;i<12;i++) {
sum += parseInt(val.charAt(i)) * parseInt(weight.charAt(i));
}

var result = (11 - (sum % 11)) % 10;
var check_val = parseInt(val.charAt(12));

if(result != check_val) { return false; }
return true;
}

// 주민등록번호체크( 입력폼 2개)
function check_jumin2(input, input2) {
input.value=Trim(input.value);
input2.value=Trim(input2.value);
var left_j=input.value;
var right_j=input2.value;
if(input.value.length != 6) {
alert('주민등록번호를 정확히 입력하세요.');
input.focus();
return true;
}
if(right_j.length != 7) {
alert('주민등록번호를 정확히 입력하세요.');
input2.focus();
return true;
}
var i2=0;
for(var i=0;i<left_j.length;i++) {
var temp=left_j.substring(i,i+1);
if(temp<0 || temp>9) i2++;
}
if((left_j== '') || (i2 != 0)) {
alert('주민등록번호가 잘못 입력되었습니다.');
j_left.focus();
return true;
}
var i3=0;
for(var i=0;i<right_j.length;i++) {
var temp=right_j.substring(i,i+1);
if (temp<0 || temp>9) i3++;
}
if((right_j== '') || (i3 != 0)) {
alert('주민등록번호가 잘못 입력되었습니다.');
input2.focus();
return true;
}
var l1=left_j.substring(0,1);
var l2=left_j.substring(1,2);
var l3=left_j.substring(2,3);
var l4=left_j.substring(3,4);
var l5=left_j.substring(4,5);
var l6=left_j.substring(5,6);
var hap=l1*2+l2*3+l3*4+l4*5+l5*6+l6*7;
var r1=right_j.substring(0,1);
var r2=right_j.substring(1,2);
var r3=right_j.substring(2,3);
var r4=right_j.substring(3,4);
var r5=right_j.substring(4,5);
var r6=right_j.substring(5,6);
var r7=right_j.substring(6,7);
hap=hap+r1*8+r2*9+r3*2+r4*3+r5*4+r6*5;
hap=hap%11;
hap=11-hap;
hap=hap%10;
if(hap != r7) {
alert('주민등록번호가 잘못 입력되었습니다.');
input2.focus();
return true;
}
return false;
}

// 비밀번호 체크
function check_passwd(input, input2, min) {
if(!input.value) {
alert('비밀번호를 입력해 주십시오.');
input.focus();
return false;
}
else if(BYTE(input.value) < min) {
alert('비밀번호의 길이가 너무 짧습니다.');
input.focus();
input.value='';
input2.value='';
return false;
}
else if(!input2.value) {
alert('확인비밀번호를 입력해 주십시오.');
input2.focus();
return false;
}
else if(input.value != input2.value) {
alert('비밀번호가 서로 다르게 입력되었습니다.');
input2.value='';
input2.focus();
return false;
}
else return true;
}

//콤마 넣기(정수만 해당)
function comma(val) {
val = get_number(val);
if(val.length <= 3) return val;

var loop = Math.ceil(val.length / 3);
var offset = val.length % 3;

if(offset==0) offset = 3;
var ret = val.substring(0, offset);

for(i=1;i<loop;i++) {
ret += "," + val.substring(offset, offset+3);
offset += 3;
}
return ret;
}

//문자열에서 숫자만 가져가기
function get_number(str) {
var val = str;
var temp = "";
var num = "";

for(i=0; i<val.length; i++) {
temp = val.charAt(i);
if(temp >= "0" && temp <= "9") num += temp;
}
return num;
}

//주민등록번호를 나이로 변환
function agechange(lno,rno) {
var refArray = new Array(18,19,19,20,20,16,16,17,17,18);
var refyy = rno.substring(0,1);
var refno = lno.substring(0,2);
var biryear = refArray[refyy] * 100 + eval(refno);

var nowDate = new Date();
var nowyear = nowDate.getYear();
return nowyear - biryear + 1;
}

//레디오박스 체크검사
function radio_chk(input, msg) {
var len = input.length;
for(var i=0;i<len;i++) if(input[i].checked == true && input[i].value) return true;
alert(msg);
return false;
}

//셀렉트박스 체크검사
function select_chk(input, msg) {
if(input[0].selected == true) {
alert(msg);
return false;
}
return true;
}

//새창띄우기
function open_window(url, target, w, h, s) {
if(s) s = 'yes';
else s = 'no';
var its = window.open(url,target,'width='+w+',height='+h+',top=0,left=0,scrollbars='+s);
its.focus();
}
//-->





<?
//셀렉트
function optionlist($optionlist, $getvalue="", $keyfield="key", $valuefield="value") {
foreach($optionlist as $key => $value) {
if($getvalue && $getvalue == ${$keyfield}) $chk = "selected";
else $chk = "";
echo "<option value='{${$keyfield}}' {$chk}>{${$valuefield}}</option>";
}
echo "\n";
}

//셀렉티드
function selected($checkkey, $getvalue="") {
echo "value='$checkkey'";
if($getvalue && $checkkey == $getvalue) echo " selected";
}

//체크드
function checked($checkkey, $getvalue="") {
echo "value='$getvalue'";
if($getvalue && $checkkey == $getvalue) echo " checked";
}

//주민번호 검사
function RegiNum($reginum) {
$weight = '234567892345'; // 자리수 weight 지정
$len = strlen($reginum);
$sum = 0;

if ($len <> 13) { return false; }

for ($i = 0; $i < 12; $i++) {
$sum = $sum + (substr($reginum,$i,1) * substr($weight,$i,1));
}

$rst = $sum%11;
$result = 11 - $rst;

if ($result == 10) {$result = 0;}
else if ($result == 11) {$result = 1;}

$jumin = substr($reginum,12,1);

if ($result <> $jumin) {return false;}
return true;
}

//사업자번호 검사
function comRegiNum($reginum) {
$weight = '137137135'; // 자리수 weight 지정
$len = strlen($reginum);
$sum = 0;

if ($len <> 10) { return false; }

for ($i = 0; $i < 9; $i++) {
$sum = $sum + (substr($reginum,$i,1) * substr($weight,$i,1));
}
$sum = $sum + ((substr($reginum,8,1)*5)/10);
$rst = $sum%10;

if ($rst == 0) {$result = 0;}
else {$result = 10 - $rst;}

$saub = substr($reginum,9,1);

if ($result <> $saub) {return false;}
return true;
}


//글자르기
function cut_str($msg,$cut_size,$tail="...") {
if($cut_size <= 0) return $msg;
$msg = strip_tags($msg);
$msg = str_replace("&mp;quot;","\"",$msg);
if(strlen($msg) <= $cut_size) return $msg;

for($i=0;$i<$cut_size;$i++) if(ord($msg[$i])>127) $han++; else $eng++;
if($han%2) $han--;

$cut_size = $han + $eng;

$tmp = substr($msg,0,$cut_size);
$tmp .= $tail;
return $tmp;
}

// 모든한글의 글자를 출력
function hangul_code() {
$count = 0;
for($i = 0x81; $i <= 0xC8; $i++) {
for($j = 0x00; $j <= 0xFE; $j++) {
if(($j >= 0x00 && $j <= 0x40) || ($j >= 0x5B && $j <= 0x60) || ($j >= 0x7B && $j <= 0x80) || ($j >= 0x00 && $j <= 0x40) ||
(($i >= 0xA1 && $i <=0xAF) && ($j >= 0xA1 && $j <= 0xFE)) || ($i == 0xC6 && ($j >= 0x53 && $j <= 0xA0)) ||
($i >= 0xC7 && ($j >= 0x41 && $j <= 0xA0))) continue;
echo chr($i).chr($j)." ";
$count++;
}
}
echo $count;
}

// 한글검사
function is_han($str) {
if(strlen($str) != 2) return false;

$i = ord ($str[0]);
$j = ord ($str[1]);

if($i < 0x81 || $i > 0xC8 || $j > 0xFE || ($j >= 0x00 && $j <= 0x40) || ($j >= 0x5B && $j <= 0x60) || ($j >= 0x7B && $j <= 0x80) ||
($j >= 0x00 && $j <= 0x40) || (($i >= 0xA1 && $i <=0xAF) && ($j >= 0xA1 && $j <= 0xFE)) ||
($i == 0xC6 && ($j >= 0x53 && $j <= 0xA0)) || ($i >= 0xC7 && ($j >= 0x41 && $j <= 0xA0))) return false;
else return true;
}



// 랜덤값 생성
function random_string($length) {
$randomcode = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
'A', 'B', 'C', 'd', 'E', 'F', 'G', 'H', 'x', 'J',
'K', 'b', 'M', 'N', 'y', 'P', 'r', 'R', 'S', 'T',
'u', 'V', 'W', 'X', 'Y', 'Z');
mt_srand((double)microtime()*1000000);
for($i=1;$i<=$length;$i++) $Rstring .= $randomcode[mt_rand(1, 36)];
return $Rstring;
}


// 디렉토리 리스트
function DirList($path="./") {
$path = opendir($path);
while($list = readdir($path)) if($list != "." && $list != "..") $Arraydir[] = $list;
closedir($path);
return $Arraydir;
}

// 15자리의 유일한 숫자값 만들기
function uniquenumber() {
$temparray = explode(" ", microtime());
$temparray2 = substr($temparray[0],2,5);
$number =$temparray[1].$temparray2;
return $number;
}

// 파일이름과 확장자 분리
function ExplodeFile($filename) {
$filename = strtolower($filename);
$elements = explode('.',$filename);
$elemcnt = count($elements)-1;
if(count($elements)==1) $ext = '';
else $ext = $elements[$elemcnt];
unset($elements[$elemcnt]);
$fname = implode($elements,'');

$fileinfo["name"] = $fname;
$fileinfo["ext"] = $ext;
return $fileinfo;
}

// 그림확장자
function ImageType($filename) {
$webimg = explodefile($filename);

$webext = $webimg["ext"];
$defineexp = array("gif","jpg","png");

$count = count($defineexp);

for($i=0;$i<$count;$i++) {
if($defineexp[$i] == $webext) return true;
}
return false;
}

// 유닉스날짜 포맷
function date_format($unixtime,$format="Y.m.d",$empty="&nbsp;") {
if($unixtime) return date($format, $unixtime);
else return $empty;
}

//YYYY-MM-DD 형식을 유닉스 타임으로
function unix_format($times, $operator="-", $type=true) {
if($type == true) {
$times = trim($times);
$arry = explode($operator,$times);
if(count($arry) != 3) return date_format(0);
$mktime = mktime(0,0,0,$arry[1],$arry[2],$arry[0]);
return date("U", $mktime);
} else {
$formats = "Y{$operator}m{$operator}d";
return date($formats, $times);
}
}

// 주민등록번호 포맷
function jumin_format($juminno, $cutno=3, $des="x", $empty="&nbsp;") {
$juminno = str_replace("-","",$juminno);
if(strlen($juminno) != 13) return $empty;
for($i=0;$i<$cutno;$i++) $x .= $des;
$juminno = substr($juminno,0,13-$cutno).$x;
$juminno = substr($juminno,0,6)."-".substr($juminno,6);
return $juminno;
}

// 홈페이지 포맷
function url_format($url, $ltype=false, $title=false, $other="", $htype="http://", $empty="&nbsp;") {
$url = eregi_replace("http://","",trim($url));
if($url) $url = $htype.$url;
else return $empty;

if($title) $turl = $title;
else $turl = $url;

if($ltype) return "<a href='{$url}' {$other}>{$turl}</a>";
else return $url;
}

// 전송값 초기화
function post_format($str, $type) {
switch($type) {
case "url":
$str = trim($str);
$str = eregi_replace("http://","",$str);
break;
case "num":
$str = trim($str);
$str = str_replace(",","",$str);
break;
}
return $str;
}

// 이메일 포맷
function mail_format($email, $ltype=false, $title=false, $empty="&nbsp;") {
$email = trim($email);
$title = trim($title);

if(!$email && !$title) return $empty;
else if(!$email) return $title;

if($title) $temail = $title;
else $temail = $email;

if($ltype) return "<a href='mailto:{$email}'>{$temail}</a>";
else return $email;
}

// 전화번호 포맷
function tel_format($num1, $num2, $num3, $format="-", $empty="&nbsp;") {
$num1 = trim($num1);
$num2 = trim($num2);
$num3 = trim($num3);

if(!$num1) $num1 = "02";

if($num2 && $num3) return $num1.$format.$num2.$format.$num3;
else return $empty;
}

// 문자 포맷
function text_format($str, $empty="&nbsp;") {
$str = trim($str);
if($str) return $str;
else return $empty;
}

// 새창띄우기
function win_format($title, $url, $target, $width, $height, $scrollbars=1, $empty) {
$title = text_format($title, $empty);
return "<a href='#' onclick=\"open_window('{$url}', '{$target}', {$width}, {$height}, {$scrollbars})\">{$title}</a>";
}

// 나이(주민등록번호를 이용)
function AGE_jumin($lno,$rno) {
$refArray = Array(18,19,19,20,20,16,16,17,17,18);
$refyy = substr($rno,0,1);

$biryear = $refArray[$refyy] * 100 + substr($lno,0,2);
$nowyear = date("Y");
return $nowyear - $biryear + 1;
}

// URL 존재확인
function URL_exists($url) {
$url = str_replace("http://", "", $url);
list($domain, $file) = explode("/", $url, 2); // 도메인부분과 주소부분으로 나눕니다.
$fid = fsockopen($domain, 80); // 도메인을 오픈합니다.
fputs($fid, "GET /$file HTTP/1.0\r\nHost: $domain\r\n\r\n"); // 파일 정보를 얻습니다.
$gets = fgets($fid, 128);
fclose($fid);

if(ereg("200 OK", $gets)) return TRUE;
else return FALSE;
}

// 조사 꾸미기
$array = "뵤 벼 뱌 배 베 보 버 바 비 뷰 부 브 뱨 볘 봐 봬 붜 붸 뵈 뷔 븨 뾰 뼈 뺘 빼 뻬 뽀 뻐 빠 삐 쀼 뿌 쁘 뺴 뼤 뽜 뽸 뿨 쀄 뾔 쀠 쁴 죠 져 쟈 재 제 조 저 자 지 쥬 주 즈 쟤 졔 좌 좨 줘 줴 죄 쥐 즤 쬬 쪄 쨔 째 쩨 쪼 쩌 짜 찌 쮸 쭈 쯔 쪠 쪠 쫘 쫴 쭤 쮀 쬐 쮜 쯰 됴 뎌 댜 대 데 도 더 다 디 듀 두 드 댸 뎨 돠 돼 둬 뒈 되 뒤 듸 뚀 뗘 땨 때 떼 또 떠 따 띠 뜌 뚜 뜨 떄 뗴 똬 뙈 뚸 뛔 뙤 뛰 띄 교 겨 갸 개 게 고 거 가 기 규 구 그 걔 계 과 괘 궈 궤 괴 귀 긔 꾜 껴 꺄 깨 께 꼬 꺼 까 끼 뀨 꾸 끄 꺠 꼐 꽈 꽤 꿔 꿰 꾀 뀌 끠 쇼 셔 샤 새 세 소 서 사 시 슈 수 스 섀 셰 솨 쇄 숴 쉐 쇠 쉬 싀 쑈 쎠 쌰 쌔 쎄 쏘 써 싸 씨 쓔 쑤 쓰 썌 쎼 쏴 쐐 쒀 쒜 쐬 쒸 씌 묘 며 먀 매 메 모 머 마 미 뮤 무 므 먜 몌 뫄 뫠 뭐 뭬 뫼 뮈 믜 뇨 녀 냐 내 네 노 너 나 니 뉴 누 느 냬 녜 놔 놰 눠 눼 뇌 뉘 늬 요 여 야 애 에 오 어 아 이 유 우 으 얘 예 와 왜 워 웨 외 위 의 료 려 랴 래 레 로 러 라 리 류 루 르 럐 례 롸 뢔 뤄 뤠 뢰 뤼 릐 효 혀 햐 해 헤 호 허 하 히 휴 후 흐 햬 혜 화 홰 훠 훼 회 휘 희 쿄 켜 캬 캐 케 코 커 카 키 큐 쿠 크 컈 켸 콰 쾌 쿼 퀘 쾨 퀴 킈 툐 텨 탸 태 테 토 터 타 티 튜 투 트 턔 톄 톼 퇘 퉈 퉤 퇴 튀 틔 쵸 쳐 챠 채 체 초 처 차 치 츄 추 츠 챼 쳬 촤 쵀 춰 췌 최 취 츼 표 펴 퍄 패 페 포 퍼 파 피 퓨 푸 프 퍠 폐 퐈 퐤 풔 풰 푀 퓌 픠";
function lastCon($str) {
global $array;
if(ord($str[strlen($str)-1]) < 128) return false;
$str = substr($str, strlen($str)-2);
if(strstr($array, $str)) return false;
return true;
}
function ul_rul($str) {
return $str.(lastCon($str) ? "을" : "를");
}
function gwa_wa($str) {
return $str.(lastCon($str) ? "과" : "와");
}
function un_num($str) {
return $str.(lastCon($str) ? "은" : "는");
}
function i_ga($str) {
return $str.(lastCon($str) ? "이" : "가");
}

// 도메인 또는 문서가 존재하는지 검사
function exists_url($url, $port="80") {
$fp = @fsockopen($url, $port);
if($fp) return true;
else return false;
}

// 숫자를 한글로 바꾸기
function numtokor($num) {
$text ='';
$d_symbol = array('4' => "만", '8' => "억", '12' => "조", '16' => "경", '20' => "해", '24' => "시", '28' => "양", '32' => "구", '36' => "간", '40' => "정", '44' => "재", '48' => "극", '52' => "항하사", '56' => "아승지", '60' => "나유타", '64' => "불가사의", '68' => "무량대수");
$p_symbol = array('0' => "", '1' => "십", '2' => "백", '3' => "천");
$t_symbol = array('0' => "", '1' => "일", '2' => "이", '3' => "삼", '4' => "사", '5' => "오", '6' => "육", '7' => "칠", '8' => "팔", '9' => "구");

if(substr($num,0,1) == '-') {
$num = substr($num ,1);
$text .= '마이너스';
}
$length_of_num = strlen($num);
if($length_of_num > 72) {
$text = "존재할 수 없는 수치 입니다.";
} else {
//실행
for ($k=0; $k< $length_of_num; $k++) {
$striped_value = substr($num, $k, 1);
$text .= $t_symbol[$striped_value];
$power_value = ($length_of_num - $k -1) % 4;
if ($striped_value <> 0) $text .= $p_symbol[$power_value];
if ($power_value == 0) $text .= $d_symbol[$length_of_num - $k -1];
}
}
return $text;
}

//검색쿼리작성
function querystring($query) {
if($query) {
$queryarray = explode("&", $query);
$count = count($queryarray);

foreach($queryarray as $key => $value) {
$array2st = explode("=", $value);
if($array2st[1]) {
if($querystring) $querystring .= "&".$value;
else $querystring = $value;
}
}

return $querystring;
}
else return "";
}

//페이징
function pagelist($tables, $nowpage, $primarykey , $chartline, $chartpage, $wheres="", $findquery="", $others="", $orders="", $urlquery="", $lastopt=true, $allopt=true, $firstbutton="[처음]", $prebutton="[이전]", $nextbutton="[다음]",$lastbutton="[끝]") {

if($wheres) $wheres = " where {$wheres} ";
if($others) $wheres .= " and {$others} ";

if(!$chartline) $chartline = 10;
if(!$chartpage) $chartpage = 10;

if(intval($nowpage) == 0) $nowpage = 1;
if(intval($nowstep) == 0) $nowstep = 1;

##마지막버튼 유무 체크
if($lastopt) {
$query = "select count(*) count from {$tables} {$wheres} {$others} {$findquery}";
$result = mysql_query($query);
$total = mysql_fetch_object($result);
#총카운트 $total->count;
}

##총검색수
if($allopt) {
$query = "select count(*) count from {$tables} {$wheres}";
$result = mysql_query($query);
$all = mysql_fetch_object($result);
#총검색수 $all->count;
}

##설정값계산
$nowstep = ceil($nowpage/$chartpage);
if($lastopt) {
$allstep = ceil($total->count/($chartpage*$chartline));
$allpage = ceil($total->count/$chartline);
}
$startpage = 1 + ($nowstep-1) * $chartpage;
$endpage = $startpage + $chartpage - 1;

if($lastopt && $endpage > $allpage) $endpage = $allpage;

##다음버튼 유무 체크
$nextline = $nowstep * $chartline * $chartpage;
$nextlimitquery = " limit {$nextline}, 1";
$query = "select {$primarykey} from {$tables} {$wheres} {$others} {$findquery} {$nextlimitquery}";
$result = mysql_query($query);
$nextok = mysql_affected_rows();

##처음버튼 및 이전버튼
if($nowstep > 1) {
$fir = " <a href='$PHP_SELF?$urlquery&nowpage=1'>{$firstbutton}</a> ";
$prepage = $startpage - $chartpage;
$pre = " <a href='$PHP_SELF?$urlquery&nowpage=$prepage'>{$prebutton}</a> ";
} else {
$fir = " <font color='#C0C0C0'>{$firstbutton}</font> ";
$pre = " <font color='#C0C0C0'>{$prebutton}</font> ";
}

##NEXT 버튼 활성화
if($nextok) {
$nextpage = $endpage + 1;
$next = " <a href='$PHP_SELF?$urlquery&nowpage=$nextpage'>{$nextbutton}</a> ";
} else {
$next = " <font color='#C0C0C0'>{$nextbutton}</font> ";
}

##중간페이지
for($i=$startpage;$i<=$endpage;$i++) {
if($i == $nowpage) $pagelist .= " <font color='#6600FF'><b>$i</b></font> ";
else $pagelist .= " <a href='$PHP_SELF?$urlquery&nowpage=$i'>$i</a> ";
}

##끝페이지
if($lastopt && $allstep > $nowstep) {
$lastpage = $allpage;
$last = " <a href='$PHP_SELF?$urlquery&nowpage=$nextpage'>{$lastbutton}</a> ";
} else {
$last = " <font color='#C0C0C0'>{$lastbutton}</font> ";
}


$firstlimit = 0 + ($nowpage-1) * $chartline;
$limitquery = " limit {$firstlimit}, {$chartline}";
$query = "select * from {$tables} {$wheres} {$others} {$findquery} {$orders} {$limitquery}";
$result = mysql_query($query);
while($fetch = mysql_fetch_array($result)) $get[] = $fetch;

$get[0]["count"] = count($get);
$get[0]["page"] = $fir.$pre." [ ".$pagelist." ] ".$next.$last;
if($lastopt) $get[0]["total"] = $total->count;
if($allopt) $get[0]["allto"] = $all->count;

return $get;

}

//업로드
function file_upload($upfile,$upfile_name,$upfile_size,$dir,$newfilename) {
if($upfile_size) {

$is_file = is_file("{$dir}/{$newfilename}");
if($is_file) unlink("{$dir}/{$newfilename}");

move_uploaded_file($upfile, "{$dir}/{$newfilename}");
chmod("{$dir}/{$newfilename}", 0644);

return true;

} else return false;
}

//현재디렉토리
function nowdir() {
global $DOCUMENT_ROOT;
global $PHP_SELF;
$getdir = pathinfo($DOCUMENT_ROOT.$PHP_SELF);
return $getdir["dirname"];
}


음..자바스크립트에서 333,333,333 을 333333333으로 만드려고 asp처럼 단순히 replace 하면 333333,333 이런값을 반환한다.

따라서 정규 표현식 사용해야함...

var re = /,/g;
var txt = "333,333,333";

txt = txt.replace(re,"");

요렇게 한후 alert(txt) 찍어보면 333333333 나옴




*)
i(대/소문자를 구분하지 않음)
g(발생할 모든 패턴에 대한 전역 검색)
gi(전역 검색, 대/소문자를 구분하지 않음) 

Posted by 1010
98..Etc/Etc...2008. 8. 7. 15:43
반응형
How to deploy EJB component




자바스터디 네트워크 [www.javastudy.co.kr]

조대협 [bcho_N_O_SPAM@j2eestudy.co.kr]




1. WebLogic Class Loader


EJB와 웹애플리케이션을 디플로이하기 위해서는 효과적인 패키징이 필요하다. 효과적인 패키징을 위해서는 먼저 WAS의 ClassLoader의 구조에 대해서 알필요가 있는데, 먼저 WebLogic의 ClassLoader에 대해서 살펴보도록 하자.

○ Class Loader란?

Class Loader란 자바의 큰장점중의 하나로, Compile Time이 아닌 Run Time에 Class를 로딩할 수 있게 해주는 기술이다. 예를 들어, ClassA = new ClassA(); 라는 코드를 최초로 실행할때, JVM은 ClassA라는 Class를 Class Loader를 통해서, ClassA.class의 바이트 코드를 최초로 메모리에 로드하게 된다. Class Loader는 이처럼, Class의 바이트 코드를 FileSystem이나,Jar와 같은 Archieve또는, network socket(Applet and RMI)를 통해서 동적으로 로딩할 수 있도록 지원해준다.

이 Class Loader는 기술적으로 몇가지 특징을 가지고 있는데 그 내용을 살펴보면 다음과 같다.

   - Hierarchical
     : Class Loader는 Hierarchical 하게 생성이 가능하다. Parent class loader에서, child class loader를 갖는것과 같이 Class Loader간의 계층형 구조를 갖게 되며, 최상위의 Class Loader는 "bootstrap" Class Loader가 위치하게 된다.

   - Delegate load request
     : 위와 같이 Class Loader가 계층형 구조를 가지고 있기 때문에, Class 로딩상에 몇가지 규칙이 필요한데, 일정 시점에 Class Loading 요청을 받았을때, 상위 Class Loader가 Loading한 Class가 그 우선권을 가진다.
     예를 들어 설명하면, Class Loader가 parent부터, CL1-CL2-CL3 순서로 생성되어 있다고 가정하자, 애플리케이션이 Class Loader CL3로 Class를 요청하면, CL3는 그 요청을 CL2로, CL2는 CL1으로 요청을 전달한다. 즉, Class 로딩의 우선 순위는 parent class가 가지고 있고, 만약에 요청받은 Class가 없을 경우에만 아래 레벌 Class Loader가 Class를 로딩하게 된다.

   - Have visibility constraint
     : 상위 Class Loader를 먼저 참조하는것에 이어서, Class Loader는 일종의 scope rule을 제공하는데, Child Class Loader는 Parent Class Loader의 Class를 Delegation load request를 이용하여 찾을 수 있지만, 그 반대로 Parent가 Child가 Loading한 Class를 사용할 수 는 없다. 또한 Parent의 같은 Level의 Child Class Loader는 서로 로딩한 Class를 사용할 수 없게 되어 있다.

   - Cannot unload classes
     : Class Loader에 의해서 Loading된 Class들은, unload될 수 없다.. Class Loader에는 Class Unloading기능이 없다. 그래서 이 unloading 기능을 우회적으로 구현하는 방법은 Class를 로드한 Class Loader 자체를 삭제하고, 새로운 Class Loader를 만들어서 다시Class 를 로드하면, reload되는 것처럼 작동하는것이 된다.

내용이 좀 어려울 수 도 있겠지만, WLS의 뒤에 나올Class Loader의 내용을 읽어보면 이해가 될것이다. Deploy 개념을 이해하는데 중요한 내용이니 이해하도록 하자.

○ WebLogic의 Class Loader

그럼 이제 WebLogic의 Class Loader에 대해서 알아보도록 하자. 이 feature는 단지 WebLogic뿐 아니라, J2EE 표준을 따르는 WAS는 모두 준수하고 있는 내용이다.

일단 WebLogic이 기동되면 JVM Level의 Class Loader가 Loading된 후에, WebLogic의 Application에 따라 각각의 Class Loader가 그 Child로 Loading된다.

JVM Class Loader

먼저 JVM이 가동될때, Loading되는 Class Loader는 parent부터 순서대로, Bootstrap, Extensions, System Class Loader가 올라가게 된다. 그 내용을 살펴보자

   - Bootstrap Class Loader
     : JVM이 실행될때 맨 처음 실행되는 Class Loader로, 가장 기본적인 JAVA실행에 필요한 가장 기본적인 Class들을 (rt.jar, i18n.jar 와 같은 기본적인 Archieve) 로딩한다.

   - Extensions Class Loader
     : BootStrap Loading후, 기본적으로 Loading되는 Class로 $JAVA_HOME/lib/ext에 있는 Class들이 Loading된다. 이 Class들은 별도로 classpath에 잡혀 있지 않아도 Loading된다.

   - System Class Loader
     : 다음으로, CLASSPATH에 정의되거나 JVM option에서 -cp, -classpath에 지정된 Class들이 로딩된다.

기본적으로 WebLogic은 이 JVM Level의 Class Loader에서 작동을 하게 되고, Application을 Deploy할때 마다 별도의 Class Loader를 System Class Loader의 Child로 Invoke하게 된다.

JVM Class Loader

WebLogic에서 Invoke되는 Class Loader는 종류에 따라 EJB-JAR,WAR,EAR 3가지로 구분이 된다. 각자의 Class Loader에 대해서 체크해야할 사항을 짚고 너머가 보자.

   - EJB-JAR
     : 각 EJB-JAR 파일은 디플로이가 되면, JAR파일당 각각의 Class Loader를 생성하게 된다. 그래서, 다른 JAR파일에 있는 Class들은 참조를 할 수 가 없고, 오로지 Parent Class Loader인, JVM Level의 CLASSPATH에 적용된 CLASS들만 참조를 할 수 있다. 그래서, 다른 EJB JAR파일내에 있는 EJB를 사용하기 위해서는 그 EJB의 Client class들(Remote Interface,Home Interace)을 같이 JAR로 묶어주어야 한다.물론 같은 JAR파일내에 있는 EJB나 다른 Class를 사용하는 것은 같은 Class Loader상에 Load된것이기 때문에, 가능하다.

   - WAR
     : Servlet이나 JSP를 패키징하는 WAR파일 역시 EJB-JAR와 같은 특성을 갖는데, 집고 넘어가야할점은 웹로직에서는 WAR에 대해서 우선순위 변경이 가능한데,일반적인 Class Loader의 우선순위를 따르는것 이외에, WEB-INF/classes와, WEB-INF/lib 디렉토리가 우선순위를 갖것이 가능하다. 이 디렉토리안에 class가 있을 경우에는 parent class loader에 load된 Class보다 우선순위를 갖게 설정할 수 있다.이설정은 웹로직 콘솔에서 PreferWebInfClasses 라는 옵션을 true로 설정(default는 false이다.)을 하면 가능하며, 자세한 내용은 (http://e-docs.bea.com/wls/docs61/programming/packaging.html 에Using PreferWebInfClasses in J2EE Applications 부분을 참고하기 바란다.)

   - EAR
     : 위의 EJB-JAR와 WAR는 각각 하나의 Class Loader를 갖는데 반해서, EAR을 두개의 Class Loader를 갖게 된다. EJB-JAR를 위한 Class Loader와 WAR를 위한 Class Loader 두개가 Invoke되고, 그 관계는 EJB-JAR Class Loader가 WAR Class Loader의 Parent관계가 되서, Servet/JSP는 당연히 EJB Class를 참조해서 사용이 가능해지게 되는것이다. (JSP는 WAR Class Loader에 의해 Loading되었기 때문에, 그 Parent인 EJB-WAR Class Loader에 의해 Loading된 EJB Class를 사용할 수 있게 되는것이다.)


<그림 1. WebLogic Class Loader 구조>


그럼 <그림 1>을 보자. 그림 1의 EJB JAR5는 EAR1이나 WAR4, EAR2의 Class Loader와 다른 Class를 사용하기 때문에, 다른 패키지의 Class를 참조할 수 없다.

EAR1의 WAR1은, EAR로 같은 Class Loader상에 있는 EJB JAR1,EJB JAR2,EJB JAR3에 있는 Class를 참조할 수 있다. 그러나 EAR2의 Class는 참조할 수 없다. 그러나 역으로, EJB Class Loader가 WAR Class Loader의 Parent이기 때문에, EJB JAR 1.2.3는 WAR1,2의 Class를 참고할 수 없다.

여기서 한가지 집고 넘어가야할것은 모든 EJB JAR가 참조하는 Class들은 CLASSPATH내에 있는 Class가 우선시 된다. (JVM Class Loader가 모든 WebLogic Class Loader의 parent이기 때문에.) 그래서, EJB의 Client Class나, Common Class들을 CLASSPATH와 JAR양쪽에 넣으면 CLASSPATH내에 있는 CLASS가 참조가 된다. (이런식의 패키징은 권장하지 않는다. 상세한 내용은 다음에 나올 EJB 패키징 부분에서 알아보도록 하자)

※ WLS 8.1에서부터는 개발환경을 위해서 Class Loader의 계층구조를 임의로 지정할 수 있게 되어 있다. 자세한 내용은 (http://e-docs.bea.com/wls/docs81/programming/classloading.html#1083313) 를 참고하기 바란다.

JVM Class Loader

J2EE에서, WAS가 하나의 Class Loader를 이용하지 않고, 각 WAR,EJB-JAR,EAR별로 별도의 Class Loader를 사용하는것은 다음과 같은 이유를 가지고 있다.

   - Isolation
     : 개발그룹 A가 Application app-A에 대해서 개발과 deploy를 할때, 다른 Application에 대해서 신경쓸 필요없이 작업 수행이 가능하게 된다. 만약 모든 Applilcation이 하나의 Class Loader를 사용하게 된다면, 하나의 애플리케이션을 deploy할때마다, Class Loader가 restruct되는등 영향을 받을 수 있다.

   - Singleton
     : 이렇게 Class Loader를 따로 사용하기 때문에, Application 별로, 당연히 Singleton Pattern이 따로 적용된다. 만약 Class Loader가 전역적으로 하나만 사용되었다면, 다른 Application에 의해서, Singleton이 오작동할 수 도 있을것이다. (Singleton은 GoF의 Design Pattern중의 하나이다. 자세한 내용은 Design Patterns-Addison Wesley를 참고하기 바란다.)

   - Namespace
     : Namespace의 확장도 가능하게 되는데, webApp1.war와 webApp2.war 파일에 똑같이 index.jsp 라는 파일이 있을때, WAS는 각 Class의 Name space를 Class Loader + File Name이라는 Namespace를 사용하기 때문에, 다른 Application안의 컴포넌트들을, 어떻게 naming 하느냐는 것은 문제가 되지 않는다.

   - Hotdeploy
     : Hotdeploy는 J2EE의 중요한 feature중의 하나인데, WAS가 가동중에, 컴포넌트를 redeploy할 수 있는 기능을 Hotdeploy라고 한다. 위에서도 설명했듯이, redeploy를 하는 기능은 Class Loader에는 없기 때문에, redeploy를 하기 위해서는 기존의 Class Loader를 unload하는 동시에, 새로운 Class Loader를 Loading하여, Class 를 reloading하게 된다. 이렇게 Class Loader를 나누어 놓음으로써, 효과적이고 빠르게 redeploy가 가능하게 된다.

   - Deploy
     : Application의 배포역시, Application 단위로, Class Loader를 이용하기 때문에, Application 단위로 배포가 가능해진다. Class Loader를 하나만 사용했다면, 일부만 변경이되더라도 Application 전체를 redeploy해야 됐을것이다.

이제까지, 간단하나마, JVM Class Loader와, WebLogic Class Loader의 내용에 대해서 살펴보았다. 그러면 이 특성에 따라서 각각의 애플리케이션과 컴포넌트들을 어떤식으로 패키징하는가에 대해서 알아보도록 하자.


2.Packaging Component


J2EE 패키징을 하는데 있어서 가장 큰 이슈는 EJB의 Client Class(Home Interface,Remote Interface)와, Common Class들일 것이다.. 이 Class들을 Deploy하는 방법이 어떤것이 있는지, 그리고 그 장단점에 대해서 알아보도록 하자.

○ WEB-INF/classes

Servlet,JSP에서 사용하는 EJB Client Class와, Common Class를 classes 디렉토리에 풀어서 배포하는 방법인데, 수정과 삭제가 편하다는 장점은 있으나, Web Application 마다, classes 디렉토리에 배포를 해야하기 때문에, Version 관리 문제나 Sync 문제가 발생할 수 있고, 파일단위로 관리하기때문에, 번거롭다. 소규모가 Application이 아닌경우에는 권장하기 어려운 방법

○ WEB-INF/lib

Servlet,JSP에서 사용하는 EJB Client Class와, Common Class를 jar로 묶어서, lib 디렉토리에 위치시킬 수 있다. Jar단위로 묶어서 패키징하기 때문에, 관리가 간편하다는 장점이 있다. 단점은 WEB-INF/classes에 배포하는것과 같다.

○ Class files within EJB JAR

EJB에서 사용하는 Common Class와, 참고하고 있는 외부 EJB-JAR의 EJB Client Class를 하나의 jar파일에 패키징하는 방법. 이 방법은 EJB-JAR 파일 단위로,독립성이 뛰어나고 핸들링하기 편하다는 장점은 있으나, 각각의 EJB-JAR에 Class들이 직접 패키지되기 때문에, 변경 사항이 있을때마다 다시 패키징을 해야한다.

○ Class files on system CLASSPATH

EJB Client Class와, Common Class들을 아예 System CLASSPATH에 넣어버리는 방법도 있다. 이렇게 할경우에는 CLASS를 사용하는것이 매우 간편해지기는 해지고, common class의 경우에는 중복하여 배포할 염려없이, CLASSPATH내에 있는 것만 바꾸면 되기 때문에, 일관성을 유지하기가 좋다
그러나 그 CLASS들을 바꾸거나 할경우에는 WAS를 restart해야하는 제약 사항이 따르게 되구. Hotdeploy와 같은 기능을 사용하는것은 불가능하게 된다

○ jar on system CLASSPATH

바로 앞의 방법에 Class files을 jar로 묶어서 CLASSPATH에 배포하는 방식으로, 위와 같은 단점을 가지지만, jar 단위로 묶어서 관리를 하기 때문에, 앞의 방법보다는 Class 관리가 편리하다.

○ jar in EAR

가장 일반적인 배포 방법으로client class와 common class을 jar로 묶어서, Application ear 안에 함께 묶어서 배포하는 방식으로, ear단위로 application 관리와 배포가 가능해진다.
그러나 두개 이상의 application이 공통된 common class 파일들을 참조하는 경우에는 각각의 ear에 common class를 넣어서 패키징해야 하기 때문에, 이런 경우에는 일관성의 문제가 발생할 수 도 있다.

○ MANIFEST.MF

JDK1.2의 "extension mechanism" 이라는 이름으로 등장한 기능으로, JAR파일이 다른 JAR파일의 Class들을 참조할 수 있게 해주는 기능이다.일단 사용법부터 살펴보면

/META-INF/MANIFEST.MF 라는 파일로 정의가 되고
Manifest-Version: 1.0
Class-Path: commonclasses.jar ./account/account_ejb_client.jar
./com/bea/

식으로 사용된다.
이렇게 정의되어 패키징된 jar파일내의 Class들은 commonclasses.jar와./account/account_ejb_client.jar 그리고./com/bea/ 에 있는 Class들을 사용할 수 있게 된다.

여기서 꼭 주의해야할 점은 Class-Path의 디렉토리 경로는 상대 경로만 지정이 가능하며, 이 상대경로의 기준 디렉토리는 해당 JAR파일의 Class들이 실행되는 디렉토리 이다. 그런데, 이 실행디렉토리라는 것이, WAS에 디플로이된 jar파일의 경로가 아니다.WLS의 경우 해당 jar가 $WLS_HOME/config/mydomain/applications에 위치하고 있더라도, 그 디렉토리를 기준으로 하지 않는다는 이야기이다. 대부분의 WAS가 실행시에, 그 jar를 컴파일하거나 캐슁해서 사용하는 staging 디렉토리에 그 class들을 위치해놓고 수행을 하기 때문에, staging 디렉토리가 어디가 될지는 WAS의 종류와 환경에 따라서 다르다.

이런 이유로 MANIFEST.MF를 사용하는 경우는 EAR안에 같이 패키징된 JAR파일간의 reference를 결정하는데만 사용해야하며, 그중에서도 deploy order를 정의하는데 사용된다. 즉jar in EAR 의 경우, common class가 그 Class를 사용하는 EJB보다 늦게 deploy가 되면 Class NotFound 상태가 될 수 있기 때문에, common class를 먼저 deploy 시킬때, 그 common class를 사용하는 EJB의 EJB-JAR에 MANIFEST.MF를 이용하여, common class가 먼저 로딩되게하는데 사용을 한다.

꼭 기억해야 할것은 위와 같은 이유로 MANIFEST.MF는 EAR안에서만 사용해야 한다는 것이다.

지금까지 common class와, ejb-client-class들을 패키징하는 몇가지 정책에 대해서 알아보았다. 어떤것이 절대적으로 좋고 나쁘다는 정석은 없다. 개발 상황과, 정책에 따라서 알맞은 패키징 정책을 선택하는 것이 올바른 길일것이다. 단. 패키징 정책을 결정하지 않고, 개발을 진행하다가는 추후에 낭패를 볼 수 있으니, 패키징 전략을 수립한후에, 개발을 진행하도록 하자.

○ APP-INF/lib or APP-INF/classes (WLS 8.1 이상)

WLS 8.1부터 새로 등장한 방법으로, common class들을 APP-INF/classes나, lib 디렉토리에 배치하면, 그 ear안에서 자유롭게 사용할 수 있게 된다

NOTE!

좀더 효율적인 패키징 전략 수립을 위해서는 Component간의 Dependency와 패키징 구조를 파악하는 것이 중요한데, 이는 UML을 이용한 OOAD(Objected Oriented Analysis and Design) 단계에서 Class 간의 Dependency Diagram을 통해서 파악하고, 이를 Deployment Diagram을 통해서 형상화 하면 좀더 논리적이고 체계적으로 패키징 전략을 수립하는것이 가능하다.

※ Call by reference and Call by value.

잘알고 있겠지만, Java의 Call 방식에는 Call by reference와, Call by value 두가지 방법이 있다. 당연히 Call by reference가 속도나 효율면에서는 뛰어나겠지만, EJB와 같은 Remote Call의 경우에는 사용되는 Object나, Call Method의 인자전달을Call by value를 사용한다.
WLS 에서는 같은 EAR안에 패키징을 할경우에는 WLS가 RMI call을 optimize하여, call by reference로 하도록 조정해주고, local interface를 사용할 경우에도, call by refrerence를 사용하도록 한다.
이런 이유로, 같은 EJB를 어떤식으로 Packaging하느냐에 따라서도 Performance차이가 날 수 있다는것을 참고하도록 하자.


3. EJB Packaging Order


지금까지는 Application이 어떻게 패키징 되는지, 패키징 된 Class들이 어떤 방식으로 Loading되는지 알아보았다. 그럼 WebLogic Server에서, 어떤 과정을 거쳐서, EJB를 Packaging 하여 war,jar,ear등을 만들어내는지에 대해서 알아보도록 하자

○ MANIFEST.MF

1) develop ejb component

2) compile ejb component
개발한 EJB를 class로 컴파일 한다.

3) define EJB deployment descriptor
WebLogic에서는 3개의 Deployment descriptor를 필요로한다.
ejb-jar.xml
weblogic-ejb-jar.xml
weblogic-cmp-rdbms-jar.xml (optional, for CMP only)

EJB의 Deployment Descriptor를 만들어야 되는데, 이 부분은 WebLogic에서 어느정도 자동화가 가능하다.
EJB class가 있는 디렉토리에서 다음 명령어를 이용하면, Deployment Descriptor (ejb-jar.xml weblogic-xxx.xml) 파일을 자동으로 생성해준다.

WLS6.1
(EJB 1.1) java weblogic.ant.taskdefs.ejb.DDInit [dir]
(EJB 2.0) java weblogic.ant.taskdefs.ejb20.DDInit [dir]
(Web App) java weblogic.ant.taskdefs.war.DDInit [dir]
(App) java weblogic.ant.taskdefs.ear.DDInit [dir]

WLS 7.0
(EJB) java weblogic.marathon.ddinit.EJBInit [dir]
(App) java weblogic.marathon.ddinit.EarInit [dir]
(Web App) java weblogic.marathon.ddinit.WebInit [dir]

이를 통해서 생성된 EJB DD들은 완전한것이 아니기 때문에, 직접 에디터를 통해서 수정하도록 하자.

아래 그림은 각각의 EJB deployment descriptor가 어떻게 시스템과 맵핑이 되는지를 나타내주는 그림이다.



4) packaging EJB to jar file
이렇게 개발된 EJB class파일들과, deployment descriptor를 jar 유틸리티를 이용해서 jar파일로 패키징 한다.

5) generate EJB stub (* important !!)
4)단계까지는 대부분의 사용자가 잘 진행을 하지만, 시중의 많은 서적이나, 초보 가이드 문서에 빠져있는 부분이 EJB stub을 만드는 부분이다.



우리가 코딩하는 EJB 부분은 EJB의 로직부분이다. EJB는 분산객체이기 때문에, 아랫단에서 네트워크 환경을 위한 RMI 등의 통신 메커니즘을 제공하는데, 이 통신 메커니즘에 해당하는 부분이 EJB의 stub class들이다. 요즘의 WAS들은 이 stub Class들을 EJB deploy과정에서 자동으로 생성해주는 경우가 많은데, 이 과정은 server에 upload되는 순간에, EJB의 내용을 분석하여, stub의 java source 파일을 생성하고, javac 컴파일러를 invoke하여, stub class를 generation 하게 된다. 이 기능은 개발시에 매우 편리하니, 개발과정에서 사용하도록 하자.

그러나 운영시에는 deploy하는 과정에 많은 EJB stub을 만들고 컴파일하는데 많은 resource가 소요된다. 결과적으로, 한꺼번에 많은 EJB를 deploy할때는 이 stub을 생성하는 과정에서 동시에 많은 resource가 사용되서 시스템이 느려지거나, boot up 시간에 영향을 주는 경우가 많다.

이런 이유로, ejb를 서버에 deploy하기 위해서, ejb stub을 미리 생성해서 패키징하여 deploy하는것이 좋다. 다음과 같은 방법으로, ejb stub을 포함한 jar파일을 생성할 수 있다.

% java weblogic.ejbc [ejb-jar-file-name] [result-file-name]

example)

% java weblogic.ejbc account_manager.jar account_manager_stub.jar

여기까지 진행하면, deploy를 하기 위한 하나의 완벽한 ejb-jar 파일이 작성된것이다.

6) packaing EJBs into ear files

앞에서 작성한 ejb-jar파일과 war파일들을 적정한 디렉토리에 배치하고, META-INF/application.xml 파일을 작성한후 jar 유틸리티를 이용하여 ear로 생성하면 최종 deploy를 위한 준비가 끝난것이다.

○ Specifying ejb-client.jar
EJB를 클라이언트에서 사용하려면 위에서 설명하였듯이, ejb client class들이 필요하다.

EJB Client class들은 EJB Home Interface,Remote Interface,Primary Class Interface나, 기타 인자가 되는 Class들로 구성이 되는데, 이 Class들만 묶어서, 해당 EJB를 사용하기 위한 jar파일로 구성하게 된다.

(※ 이때, EJB Implementation Class들과, stub Class들을 같이 묶는 경우가 있는데, 이는 deploy 방법이나 CLASSPATH 설정등에 따라서 심각한 문제를 발생시킬 수 있으니, 절대로 같이 패키징하지 말자.)

이 파일들을 일일이 골라내서 패키징하는것도 여간 번거로운 작업이 아닐 수 없다. 이것을 좀 더 편리하게 하기 위해서, J2EE spec에서는 자동으로 ejb-client.jar Class를 생성해주는 기능을 제공하는데, 간단하게 ejb-jar.xml을 수정하고, java weblogic.ejbc xxx를 실행해주면된다.

구체적인 순서는 다음과 같다.

   - ejb-jar.xml에 ejb-client-class.jar 라는 엘리먼트를 추가한다.
   - ejb-jar 파일을 java weblogic.ejbc [ejb-jar-file-name] [result-file-name] 를 실행하면, 해당 디렉토리에 ejb-client-class.jar라는 파일 이름으로, client Class만 추출되어진 jar파일이 생성된다.

이렇게 생성된 jar파일들은, Servlet/JSP에서 사용할 경우 WEB-INF/lib 에 위치하거나, Client Application의 classpath내에 적용되어 사용된다.

○ Deploying Pinned EJB

특히 Cluster에 EJB를 Deploy할때는 특별한 주의가 필요한데, Cluster의 경우에는 EJB를 하나의 서버에만 deploy하고, targeting을 통하여, Cluster내의 다른 서버에, EJB를 배포할 수 있다.
이경우, ejbc를 거치지 않은 EJB의 경우에는 upload한 서버의 경우에는 자동으로 ejbc를 실행하여, stub을 생성하지만, targeting에 의해 ejb가 복제된 다른 서버의 경우에는 stub이 없는 파일이 복제 되기 때문에, client에서 그 EJB를 호출할 경우, RMI Layer에서 Assertion error가 발생하게 된다.

○ Ant utility

지금까지 EJB를 배포하기 위한 패키지를 생성하는 순서에 대해서 살펴보았다. 과정이 길고 복잡하기 때문에, 개발도중 매번 일일이 실행하기에는 매우 복잡하기 때문에, J2EE에서는 예전 Unix시절의 make와 같은 유틸리티를 제공한다. Ant라는 이름의 유틸리티로, build.xml이라는 스크립트를 만들어서 위의 과정을 자동화할 수 있다. 거의 EJB 개발에서는 표준으로 사용하고 있는 유틸리티이니 한번 체크해놓도록 하자.
좀더 자세한 정보는http://ant.apache.org/ 를 참고하시 바란다.


4. EJB deploy in WebLogic Server


이렇게 만들어진 Archieve file들(war,ear,jar)을 WebLogic에서 EJB를 Deploy하는 방법은 크게 3가지 방법이 있다.

   - Console deploy
   - Command line deploy
   - Auto deploy

○ Console deploy

WebLogic 콘솔을 이용하여, 웹브라우져에서 디플로이 하는 방법이다. 간단한 방법이므로 본 문서에서는 따로 설명하지 않는다. http://edocs.bea.com 의 WLS deploy 문서를 참고하기 바란다.

○ Command line deploy

웹브라우져를 사용할 수 없는 command line 환경에서 사용할 수 있는 방법이다.

%java weblogic.deploy ?port port_number ?host host_name deploy password name source

example)
%java weblogic.deploy ?port 7001 ?host localhost deploy weblogicpassword CMP_example c:\weblogic\CMP_example\
%java weblogic.deploy ?port 7001 ?host localhost deploy weblogicpassword bean_jar c:\weblogic\bean.jar

source 부분에는 EJB Beans의 jar 파일의 Full 경로가 들어가거나 또는 Directory 명이 들어간다.

○ Auto deploy

WebLogic의 $WL_HOME/config/$DOMAIN_NAME/applications (WLS6.1 기준) 디렉토리에 jar 파일이나, EJB 디렉토리를 복사해놓으면, WebLogic이 Boot up시에, 자동으로 디플로이되거나 또는 그 EJB의 내용이 변경되었을때, 자동으로 redeploy를 한다.
Boot up시에 deploy되는 기능은 언제나 사용이 가능하지만, WebLogic 기동중에, ejb-jar 파일을 바꿔서 redeploy하는 기능은, WebLogic을 Development Mode로 부팅했을때만 가능하다. Development Mode로 WebLogic을 부팅하는 방법은 startWebLogic.sh 에서 java 옵션에, -Dweblogic.ProductiobModeEnabled=false 로 해주면 Development로 부팅이 된다.

○ Partial upgrade (only WLS 8.1 이상)

WLS8.1에서는 Class Loader모델이 변경되어, 좀더 향상된 deploy가 가능하다. EJB는 Interface를 통해서 호출이 되기때문에, Interface가 변경되지 않은 상태에서, implemtation class 하나만 변경하여 redeploy하는 기능이 추가되었다.

이는 예전버전에서는 각각의 application 단위로, EJB Class를 Loading하였다. (JAR 파일의 경우, 하나의 Application Class Loader가, JAR안의 모든 EJB를 Loadinig했고, EAR의 경우에도, 하나의 Application Class Loader가 모든 EJB Class를 Loading했었다.) 그러나, 8.1 에서부터는 아래 그림과 같이 각각의 Application Class Loader아래에, 각각의 EJB Implemetation Class마다 별도의 Class Loader가 가동되게 됨으로써 가능해진 기능이다.

각각의 EJB Implementation Class를 redeploy하기 위해서는

java weblogic.Deployer ?adminurl url ?user user ?password password ?name myapp ?redeploy myejb/foo.class

을 해주게 되면, myapp application의 myejb jar 패키지에서 foo.class라는 EJB implementation file만 redeploy를 해준다.



여러개의 파일들을 한꺼번에 업데이트 할 수 도 있는데, 이는, redeploy 옵션뒤에, 다음과 같이 파일명들을 정의해주면 된다.

java weblogic.Deployer ?adminurl url ?user user ?password password ?name myapp ?redeploy myejb/foo.class mywar anotherejb

위의 명령의 경우에는 myapp의 myejb jar의 foo.class, 그리고 mywar.war 웹애플리케이션과, anotherejb EJB 패키지를 redeploy를 해준다. 이때, 이 3개의 파일로 인해서 redeploy를 해줘야하는 dependency 관계가 있는 다른 컴포넌트들도 자동으로 redeploy를 해주게 된다.


5. Programming Tip


이번 기사를 정리하는 기분으로, 한가지 Class Loader의 팁을 소개한다.

해당 Class가 어느 Class Loader를 통해서 Loading 됐는지를 쉽게알 수가 있다.

해당 CLASS에 다음과 같은 코드를 삽입하면 된다.

   ClassLoader loader = null;
   loader = this.getClass().getClassLoader();
   System.out.println("This class is :"+this.getClass().getName());
   while(loader != null){
      System.out.println(loader.getClass().getName());
      loader = loader.getParent();
   }//while

(EJB Class 안에 넣고 이 코드를 수행했을때 수행결과는 다음과 같다. WLS6.1 기준.)

   This class is :com.bea.examples.simpleEJB.AccountManagerEJB_fsrjh9_Impl
   weblogic.utils.classloaders.GenericClassLoader
   sun.misc.Launcher$AppClassLoader
   sun.misc.Launcher$ExtClassLoader


[참고 자료]

http://java.sun.com/docs/books/tutorial/ext/basics/load.html
http://e-docs.bea.com/wls/docs61/ejb/EJB_deployover.html#1011066
http://e-docs.bea.com/wls/docs81/programming/classloading.html#1083313
http://dev2dev.bea.com/articles/musser.jsp

Posted by 1010
반응형

입력상자의 한글 영문모드 미리 결정하기

Input Method Editor (IME) for user text entry fields


회원가입 입력폼등에서 한글을 입력받아야 할 경우와 영문만 입력 받고 싶은 경우

input type에 style로 지정하여 정해진 한글/영문을 입력받을 수 있다

확인은 안한 사항은 IE 5.5 이상에서만 된다고 함.


<input type="text" name="id" style="ime-mode : disabled" size=12>


style="ime-mode:disabled" /* 영문만을 선택할수 있는 모드 */
 style="ime-mode:auto"    /* 한/영중 선택된 모드 */
 style="ime-mode:active"    /* Default로 한글모드 */
 style="ime-mode:inactive" /* Default로 영문모드 */

자바 스크립트 제어시에..

<html>
<head>
 <title>Untitled</title>
</head>
<script language="JavaScript" type="text/javascript">
function test(){
 alert(document.testForm.xxx.style);
 alert(document.testForm.xxx.style.imeMode);
}
</script>
<body onload="test()">

<form name="testForm">
<input type="text" name="xxx" style="ime-mode : disabled">
</form>

</body>
</html>

ime-mode가 아니라 imeMode이다.

Posted by 1010
반응형

=================================================================
키 | 코드(숫자)
=================================================================
0 = 48
1 = 49
~
9 = 57

A = 65
~
Z = 90

a = 97

~
z = 122

INSERT = 45
DELETE = 46

윈도우(왼쪽) = 91
윈도우(오른쪽) = 92
기능키 = 93

0(오른쪽) = 96
~
9(오른쪽) = 105

.(오른쪽) = 110
/(오른쪽) = 111
*(오른쪽) = 106
+(오른쪽) = 107
-(오른쪽) = 109

F1 = 112
~
F12 = 123

NUMLOCK = 144
SCROLLLOCK = 145
=(중간) = 187
-(중간) = 189
`(왼쪽콤마) = 192
\(중간) = 220
←(백스패이스) = 8
TAB = 9
ENTER = 13
SHIFT = 16
CTRL = 17
ALT = 18
PAUSEBREAK = 19
CAPSLOOK = 20
한/영 = 21
한자 = 25
ESC = 27

스패이스 = 32
PAGEUP = 33
PAGEDN = 34
END = 35
HOME =36
←(중간) = 37
↑(중간) = 38
→(중간) = 39
↓(중간) = 40
=================================================================
키 | 코드(숫자)
=================================================================

<html>
<head>
<script>
function key_check(){
alert("키번호는 [" +event.keyCode+ "] 입니다.");
}
</script>
</head>
<body onKeyDown='key_check();'>
</body>
</html>

Posted by 1010
반응형
[JS]parseInt()와 Number() 사용시 주의사항

var i = "01";


document.write(parseInt(i)) ---> 출력결과 : 0
document.write(Number(i))   ---> 출력결과 : 1


주의해서 사용하세요.^^

 
 

 
     
  • 음. 저도 비슷한 경험이 있습니다. 지금은 어떤지 모르겠지만 제작년 겨울 작업하다가 보니 parseInt() 시 07,08,09 정도에서 전부 값을 0으로 던지는 바람에 그부분을 Number()로 다 바꾸었던 기억이 나는군요. 그게 01에서도 같은 현상이 발생하지는 않았던거 같은데.. 음 그때는 IE 5.5로 테스트 했었지요. 지금도 비슷한 경우가 있다면 거참. 언제 고쳐질런지... ㅡㅡ;
  • 지나가다
  • 2003-07-10 16:57:48
  • x
  • 자바스크립트에서
    0으로 시작하는 스트링을 parseInt 하면 8진법 파싱합니다.
    그러나 8, 9 이런 글자가 포함되어 있으면 무조건 결과가 0입니다. (예외상황도 없이...)

    parseInt("01") 은 8진법 파싱 규칙에 따라 정확하게 1 이 나옵니다.
  • 자바클루
  • 2003-07-14 17:48:19
  • x
  • 아~하~ 그러쿠나~아~하~그러쿠나~
    감사요.
  • 붕냥붕
  • 2003-07-15 11:58:41
  • x
  • 저두 비슷한 경험이 있긴하는데 해결은...
    parseInt(i, 10);
    이렇게 하면 10진법으로 파싱하는데여..
  • 찡어
  • 2003-07-22 09:30:21
  • x
  • 정말 감사합니다...
    덕분에 오류원인을 알았습니다..(_ _)
  • gtman
  • 2003-07-31 11:43:00
  • x
  • 아.....
    0로 시작하니까...8진법...
    그렇구나....
  • ZZaN
  • 2003-08-11 21:32:45
  • x
  • number() 는 널값도 0으로 잘 되요~~
    parseInt()는 ㅡㅡ; NaN인가..이걸로 나오지요~
  • 하얀빛
  • 2003-09-19 15:18:12
  • x



내장 함수 …………………………………………………


내장함수란 자바스크립트 언어 자체에서 지원하는 함수로 자주 사용할 것으로 예상되는 것들을 함수로 만들어 둔 것을 얘기한다.
다음은 사용자 입력값을 가지고 계산을 할 때 꼭 필요한 함수들이다.!!!

■ eval()


eval("50")+50 또는

inta="50"
eval(inta)+50
숫자 형태를 가진 문자열이나 표현식을
숫자로 바꿔준다.

* 사용자 입력값을 계산을 위해 사용한다면 꼭 필요한 조치이다.
<script language="javascript">

document.write("50"+50) // 계산이 안되고 문자열 결합이 됨, 5050
document.write(eval("50")+50) // 100으로 계산됨

</script>



■ parseInt() / parseFloat()


paresInt("10.5")+50 또는

inta="10.5"
parseInt (inta)+50
숫자 형태를 가진 문자열이나 표현식을
정수나 실수로 바꿔준다.

* 사용자 입력값을 계산을 위해 사용한다면 꼭 필요한 조치이다.
<script language="javascript">

document.write("10.5"+50) // 계산이 안되고 문자열 결합이 됨
document.write(parseInt("10.5")+50) // 60으로 계산됨
document.write(parseFloat("10.5")+50) // 60.5으로 계산됨

</script>



■ isNaN()


isNaN("10.5") 또는

inta="10.5"
isNaN(inta)


// NaN : Not a Number
표현식이나 값이 숫자가 아닌지를 true/false 로 리턴함.

* 숫자가 아니면 true를 !!! (주의)

* 사용자 입력값이 숫자가 아닌지/인지를
판단하고자 할 때!!!
<script language="javascript">

document.write(isNaN("0050")) // false
document.write(isNaN("홍길동")) // true
document.write(isNaN(50)) // false (숫자일 경우 fasle!!!)

</script>



■ escape() / unescape()


escape("가") 또는

stra="가"
escape(stra)
unescape("%uAC00") 또는

inta="%uAC00"
unescape(inta)

알파벳과 숫자 및 *, @, -, _ , + , ., / 를 제외한 문자를 모두 16진수 문자로 바꾸어 준다

왼쪽과 반대로
<script language="javascript">

document.write(escape("가"))
document.write(unescape("%uAC00")) // "가"

</script>

parseInt()와 Number() 사용시 주의사항



Posted by 1010
05.JSP2008. 8. 7. 15:32
반응형
1. 숫자를 문자열로 바꾸기
   int i = 639;
   String str = String.valueOf ( i );
   String str = Integer.toString ( i );
   String str = i.toString ( );

2. 문자열을 숫자로 바꾸기
   String str = "639";
   int i = Integer.valueOf ( str ).intValue ( );
   int i = Integer.parseInt ( str );
   long i = Long.parseLong ( str )
   double j = Double.valueOf ( str ).doubleValue ( );

  
3. 기타 형변환
   Float를 Integer로 바꾸기
   float f = 3.25;
   int i = ( int ) f;
   double d = ( double ) i; // float 형
  
   Object를 int 타입으로 형변환 하기 ... 바로 안되므로 String으로 바꾼후 int로 형변환 한다.
   Integer.parseInt ( vector.elementAt ( 0 ).toString () );
 
 
 
 
}
 
 

VIP석 120,000원 / R석 100,000원 / S석 60,000원 / A석 40,000원




</body>




   //입주기관, 및 검색조건에 따른 검색결과
    public Vector search() throws Exception {
        StringBuffer sbQuery = new StringBuffer();
        //쿼리생성
        String query = super.xml.getQuery(QUERY_URL, "syslog_02", "02");
        sbQuery.append(query);
        //파라미터들 가져오기
        String Start_Date = requestbox.get("Start_Date"); //시작일
        String End_Date = requestbox.get("End_Date"); //마지막일
        String biz_time= requestbox.get("biz_time");//업무시간
        String start_time = requestbox.get("start_time"); //업무시간
        String end_time= requestbox.get("end_time");//업무시간
        String select_custcomp= requestbox.get("select_custcomp");//입주기관
        String ip_hostname= requestbox.get("ip_hostname");//장비명
 String message= requestbox.get("message");//검색 메시지
        String select_Facility= requestbox.get("select_Facility");//Facility명
        String select_priority= requestbox.get("select_priority");//Priority
       //기본으로 날짜검색 파라미터

        logger.debug("시작시간: [" + Start_Date + "]");
        logger.debug("종료시간: [" + End_Date + "]");
        logger.debug("비즈타임: [" + biz_time + "]");
  logger.debug("select_Facility: [" + select_Facility + "]");
  logger.debug("select_priority: [" + select_priority + "]");

        Vector vecResultData = new Vector();
        String query_st1 = new String(sbQuery);
        sbQuery = new StringBuffer(query_st1);

// 메시지검색
  String LOG_MESSAGE = "    and A.LOG_MESSAGE like '%" + message + "%'";

// 입주기관
        String CUSTCOMP = "";
        if (select_custcomp.equals("")||select_custcomp.equals("all")){
            CUSTCOMP = "";
        } else {
            CUSTCOMP = "   and d.custcomp_name = '" + select_custcomp +"'";
        }
// Facility
        String Facility_param = "";
        if (select_Facility.equals("")||select_Facility.equals("all")){
            Facility_param = "";
        } else {
            Facility_param = "   and c.code_name = '" + select_Facility +"'";
        }
// Priority
       String Priority_param = "";
       if (select_priority.equals("")||select_priority.equals("all")){
           Priority_param = "";
       } else {
          Priority_param = "   and b.code_name = '" + select_priority +"'";
       }
// 장비명
        String HOSTNAME = "";
        if (ip_hostname.equals("")||ip_hostname.equals("all")){
            HOSTNAME = "";
        } else {
            HOSTNAME = "    and t.ip_hostname = '" + ip_hostname +"'";
        }

        String STARTDATE = "   and to_date(a.yyyymmdd,'YYYYMMDD') >= to_date(substr('" + Start_Date + "',0,8), 'YYYYMMDD')";
        String ENDDATE = "    and to_date(a.yyyymmdd,'YYYYMMDD') <= to_date(substr('" + End_Date + "',0,8), 'YYYYMMDD')";
        String STARTTIME = "";
        String ENDTIME = "";
        if (biz_time.equals("biz_time")){
            STARTTIME = "    and substr(a.hhminss,0,2) >= " + start_time ;
            ENDTIME = "    and substr(a.hhminss,0,2) <= " + end_time;
        } else {
            STARTTIME = "";
            ENDTIME = "";
        }
        String query_st2 = new String(sbQuery);
        sbQuery = new StringBuffer(query_st2);
        sbQuery.append(STARTDATE).append("\n");
        sbQuery.append(ENDDATE).append("\n");
        sbQuery.append(STARTTIME).append("\n");
        sbQuery.append(ENDTIME).append("\n");
 sbQuery.append(LOG_MESSAGE).append("\n");
        sbQuery.append(CUSTCOMP).append("\n");
        sbQuery.append(HOSTNAME).append("\n");
        sbQuery.append(Priority_param).append("\n");
        sbQuery.append(Facility_param).append("\n");
        logger.debug("검색쿼리 --> " + sbQuery);
        String param[] = null;

        vecResultData = queryIf.preparedExecuteQuery(UNMSDB2, sbQuery.toString(), param);
        logger.debug("====" + vecResultData.size() + "결과사이즈");
        return vecResultData;

Posted by 1010
반응형
 
  • HTML에 JavaScript 삽입
    <script language="javascript">
    JavaScript Statements
    </script>


  • HTML에 JavaScript 코드 파일 삽입
    <script language="javascipt" src="src.js">
    </script>


  • 변수의 대소문자 구분

  • 변수에 포함된 데이터의 형을 지정하지 않고, JavaScript 인터프리터가 변수에 포함된 데이터 형을 추적하고 변환.

  • JavaScript 데이터 형
    • 숫 자 형 : 정수와 부동 소수
    • BOOLEAN : true, false
    • STRING : 작은 따옴표나 큰 따옴표에 들어가 있는 값으로, 특수문자 포맷 사용시에는 '\'와 함께 사용.
    • null : 아무런 값도 없는 것으로, 변수를 초기화 시키거나 어떤 값이나 이벤트를 지울 때 사용됨
    • undefined : 변수만 만들고, 값을 할당하지 않은 상태

  • 유형간의 변환
    • 스트링 피연산자가 비스트링 연산자와 사용된 경우 다른 연산자를 모두 스트링으로 변환
    • BOOLEAN값은 1과 0으로 변환되어 수치 연산을 지원
    • null값은 스트링 연산에 대해서는 "null", 논리 연산에서는 false, 그리고 수치 연산에서는 0으로 각각 변환
    • 변환 함수
      • eval() : 스트링 표현식을 수치값으로 변환하고, 파라미터가 수치형태가 아닌 스트링 값이면 에러 발생
      • parseInt() : 스트링에 포함된 첫번째 정수를 리턴하고, 스트링이 정수로 시작되지 않으면 0을 리턴
      • parseFloat() : 스트링에 포함된 첫번째 부동 소수를 리턴하거나 스트링이 적절한 부동 소수로 시작되지 않으면 0을 리턴

  • 배열 : 값의 시퀀스를 정렬할 수 있는 객체로, JavaScript의 특수형으로 배열 사용 전엔 반드시 선언해야 한다.
    • 배열 선언 예
      arrayName = new Array(arrayLength)
      arrayName = new Array()
      arrayName = new Array(value0,value1, ..., valuen)

  • JavaScript만의 특수 연산자
    • comma(,) 연산자 : 두 표현식을 계산하고, 두 번째 표현식의 값 리턴
    • delete 연산자 : 객체의 프로퍼티나 배열 인덱스의 요소 삭제하고, 항상 undefined 값 리턴
    • new 연산자 : 객체 형의 인스턴스를 만들기 위해 사용
    • typeof 연산자 : 연산자의 형을 식별하는 스트링 값을 리턴
    • void 연산자 : 값을 리턴하지 않는다

  • 지역 변수와 전역 변수 : 함수 안에서만 사용되는 것을 지역 변수라 하고, 프로그램 내에서 사용되는 변수를 전역 변수라 하는 데, 지역 변수 사용시 반드시 var 키워드와 함께 선언해야 함

이벤트 처리!!

  • 이벤트 정의와 사용
    • 이벤트 : 사용자가 웹페이지나 기타 다른 브라우저에 수행한 작업으로 인한 결과
    • 이벤트 처리 : 이벤트로 인해 수행되는 프로세스
    • 이벤트 핸들러 : 프로세스를 수행하는 코드
    • 사용 예 : 사용자가 링크 위로 마우스를 갖다 대면 다이얼로그 박스를 표시한다거나, 폼에 입력한 데이터를 검증한다거나, 버튼을 클릭할 때 애니메이션을 나타내거나, Java 애플릿과 브라우저 플러그인이 상호작용을 하도록 한다.

  • JavaScript가 정의한 이벤트
    HTML 태그 JavaScript 이벤트 설명
    다양 mouseMove 마우스 이동
    <A>..</A> Click 마우스로 링크를 클릭
    dbClick 마우스를 링크위에서 더블클릭
    mouseDown 마우스 버튼을 누름
    mouseUp 마우스 버튼을 놓음
    mouseOver 마우스를 링크위로 이동
    mouseOut 링크 위에 있던 마우스를 링크 밖으로 이동
    keyDown 사용자가 키를 누름
    keyUp 사용자가 키를 놓음
    keyPress 사용자가 키를 눌렀다가 놓음
    <IMG> abort 사용자 액션으로 인해 이미지 로딩 작업을 중단함
    error 이미지 로딩하는 동안 에러 발생
    load 이미지가 로드되고 화면에 나타남
    keyDown 사용자가 키를 누름
    keyUp 사용자가 키를 놓음
    keyPress 사용자가 키를 눌렀다가 놓음
    <AREA> mouseOver 마우스가 클라이언트측 이미지맵의 한 영역으로 이동함
    mouseOut 마우스가 이미지맵 영역 밖으로 이동
    dbClick 사용자가 이미지맵의 한 영역을 더블클릭함
    <BODY>..</BODY> Click 사용자가 문서의 본문을 클릭
    dbClick 문서의 본문을 더블 클릭함
    keyDown 키를 누름
    keyUp 키를 놓음
    keyPress 키를 눌렀다가 놓음
    mouseDown 마우스 버튼을 누름
    mouseUp 마우스 버튼을 놓음
    <BODY>..</BODY>
    <FRAMESET>..</FRAMESET>
    <FRAME>..</FRAME>
    blur 윈도우에서 현재 입력 포커스가 사라짐
    error 윈도우가 로드되는 동안 에러 발생
    focus 입력 포커스가 현재 윈도우로 이동
    load 윈도우 로딩이 완료됨
    unload 윈도우를 종료함
    move 윈도우가 이동됨
    resize 윈도우의 크기가 바뀜
    dragDrop 윈도우에 객체를 드롭
    <FORM>..</FORM> submit 사용자가 폼을 제출
    reset 사용자가 폼을 재설정
    <INPUT TYPE="text"> blur 현재 입력 포커스가 텍스트 필드에서 사라짐
    focus 현재 입력 포커스가 텍스트 필드로 이동
    change 텍스트 필드가 변경되어 현재 입력 포커스가 사라짐
    select 텍스트 필드에 있는 텍스트가 선택됨
    <INPUT TYPE="password"> blur 패스워드 필드에서 입력 포커스가 사라짐
    focus 패스워드 필드에 입력 포커스 생김
    <TEXTAREA>..</TEXTAREA> blur 텍스트 영역이 현재 입력 포커스가 사람짐
    focus 텍스트 영역에 입력 포커스 생김
    change 텍스트 영역이 변경되어 입력 포커스가 사라짐
    select 텍스트 영역에서 텍스트가 선택됨
    keyDown 키를 누름
    keyUp 키를 놓음
    keyPress 키를 눌렀다 놓음
    <INPUT TYPE="button"> Click 버튼이 클릭됨
    blur 입력할 수 없도록 버튼이 흐려짐
    focus 입력할 수 있도록 포커스 생김
    mouseDown 버튼 위에서 왼쪽 마우스 버튼 누름
    mouseUp 버튼 위에서 왼쪽 마우스 버튼 놓음
    <INPUT TYPE="submit"> Click 제출 버튼이 클릭됨
    blur 제출 버튼에서 입력 포커스가 사라짐
    focus 제출 버튼에 입력 포커스 생김
    <INPUT TYPE="reset"> Click 리셋 버튼이 클릭됨
    blur 리셋 버튼에서 포커스가 사라짐
    focus 리셋 버튼에서 포터스가 놓임
    <INPUT TYPE="radio"> Click 라디오 버튼이 클릭
    blur 라디오 버튼에서 입력 포커스가 사라짐
    focus 라디오 버튼에 입력 포커스 생김
    <INPUT TYPE="checkbox"> Click 체크 박스가 클릭
    blur 체크 박스에서 입력 포커스가 사라짐
    focus 체크 박스에 입력 포커스 놓임
    <INPUT TYPE="file"> blur 파일 업로드 폼 요소에서 입력 포커스 사라짐
    change 사용자가 업로드될 파일을 선택
    focus 파일 업로드 폼 요소에 입력 포커스 놓임
    <SELECT>..</SELECT> blur 선택 요소가 현재 입력 포커스 잃음
    change 선택 요소가 변경되어 입력 포커스가 사라짐
    focus 선택 요소에 현재 입력 포커스가 놓임

  • 이벤트 처리 속성
    이벤트핸들링속성 실행되는 상황
    onAbort 이미지를 로딩하는 작업이 사용자의 한 행동으로 인해 취소되었음
    onBlur 문서나 윈도우, 프레임세트, 폼 요소에서 현재 입력 포커스가 사라짐
    onChange 텍스트 필드나 텍스트 영역, 파일 업로드 필드, 선택 항목이 변경되어 현재 입력 포커스가 사라짐
    onClick 링크나 클라이언트측 이미지맵 영역, 폼 요소가 클릭됨
    onDbClick 링크나 클라이언트측 이미지맵 영역, 문서가 더블 클릭됨
    onDragDrop 드래그된 객체가 윈도우나 프레임에 드롭됨
    onError 이미지나 윈도우, 프레임을 로딩하는 동안 에러가 발생함
    onFocus 문서나 윈도우, 프레임 세트, 폼 요소에 입력 포커스 놓임
    onKeyDown 키를 누름
    onKeyPress 키를 눌렀다 놓음
    onKeyUp 키를 놓음
    onLoad 이미지나 문서, 프레임이 로드됨
    onMouseDown 마우스 버튼 누름
    onMouseMove 마우스를 이동함
    onMouseOut 링크나 클라이언트측 이미지맵에서 마우스를 옮김
    onMouseOver 마우스를 링크나 클라이언트측 이미지맵으로 옮김
    onMouseUp 마우스 버튼을 놓음
    onMove 사용자가 윈도우나 프레임을 이동함
    onReset 폼의 리셋 버튼을 클릭하여 폼을 리셋시킴
    onResize 사용자가 윈도우나 프레임의 크기를 조절
    onSelect 텍스트는 텍스트 필드나 영역에서 선택됨
    onSubmit 폼이 제출됨
    onUnload 사용자가 문서나 프레임 세트를 종료함


객체 정의하기

  • 객체 유형 정의
    • 프로퍼티 : 객체에 들어 있는 데이터 값에 액세스할 때 사용.
    • 메소드 : 객체에 어떤 작업을 할 때 사용하는 함수.
  • 객체 유형 만들기
    사용자가 직접 객체 유형을 정의하고 특정 객체 인스턴스를 만들 수 있 는데 이렇게 만들려면 객체 유형의 특정 인스턴스를 만들 때 사용되는 함수를 정의하기만 하면 된다. 본래 이러한 생성자 함수는 다음과 같은 일을 한다.
    • 객체 유형의 프로퍼티에 값을 할당한다.
    • 객체 유형의 메소드로 사용할 수 있는 다른 함수를 지정한다.
  • 객체 사용 예
    1. table 객체의 정의 (table.js)
      function table_getValue(row,col){
        return this.data[row* this.columns+col ];
      }
      function table_setValue(row,col,value){
        this.data[row* this.columns+col ]=value;
      }
      function table_set(contents){
        var n=contents.length;
        for(var j=0;jthis.data[j]=contents[j];
      }
      function table_isHeader(row,col){
        return this.header[row* this.columns+col ];
      }
      function table_makeHeader(row,col){   this.header[row* this.columns+col ]=true;
      }
      function table_makeNormal(row,col){   this.header[row* this.columns+col ]=false;
      }
      function table_makeHeaderRow(row){   for(var j=0;j< this.columns+j)
          this.header[row* this.columns+col ]=true;
      }
      function table_makeHeaderColumn(col){   for(var i=0;i< this.rows;++i)
          this.header[i* this.columns+col ]=true;
      }
      function table_write(doc){
        doc.write("<TABLE BORDER="+ this.border+">");
        for(var i=0;i< this.rows;++i) {
          doc.write("<TR>");
          for(var j=0;j< this.columns;++j) {
            if( this.header[i* this.columns+j ]) {
              doc.write("<TH>");
              doc.write( this.data[i* this.columns+j ]);
              doc.write("</TH>");
            }
            else {
              doc.write("<TD>");
              doc.write( this.data[i* this.columns+j ]);
              doc.write("</TD>");
            }
          }
          doc.writeln("</TR>");
        }
        doc.writeln("</TABLE>");
      }
      funtion table(rows,columns) {
        this.rows=rows
        this.columns=columns
        this.border=0
        this.data=new Array(rows*columns)
        this.header=new Array(rows*columns)
        this.getValue=table_getValue
        this.setValue=table_setValue
        this.set=table_set
        this.isHeader=table_isHeader
        this.makeHeader=table_makeHeader
        this.makeNormal=table_makeNormal
        this.makeHeaderRow=table_makeHeaderRow
        this.makeHeaderColumn=table_makeHeaderColumn
        this.write=table_write
       
      }

    2. table 객체 사용하기
      <HTML>
      <HEAD>
      <TITLE>Defining Object Types</TITLE
      <SCRIPT LANGUAGE="JavaScript" SRC="table.js"><!-
      //-></SCRIPT>
      </HEAD>
      <BODY>
      <H1>Defining Object Types</H1>
      <SCRIPT LANGUAGE="JavaScript"><!-
      t=new table(3,4)
      contents=new
      Array("This","is","a","test","of","the","table","object.","Let's","see","it","work")
      t.set(contents)
      t.border=4
      t.makeHeaderColumn(0)
      t.write(document)
      //-></SCRIPT>
      </BODY>
      </HTML>

    3. 객체 유형에 프로퍼티와 메소드 추가
      : prototype 프로퍼티를 통해서 인스턴스화할 수 있는 미리 정의된 객체 유형에 프로퍼티와 메소드 추가
      사용 예
      <HTML>
      <HEAD>
      <TITLE>Updating Object Types </TITLE>
      <SCRIPT LANGUAGE="JavaScript" SRC="table.js"><!-
      //-></SCRIPT>
      </HEAD>
      <BODY>
      <H1>Updating Object Types</H1>
      <SCRIPT LANGUAGE="JavaScript"><!-
      function table_colorWrite(doc){
        ........
        함수 정의
        ........
        ........
      }
      t=new table(3,4)
      table.prototype.bgColor="Cyan"
      table.prototype.colorWrite=table_colorWrite
      .............
      .............
      t.colorWrite(document)
      //-></SCRIPT>
      </BODY>
      </HTML>

    4. 프로퍼티와 메소드 삭제
      delete objectName.propertyName
      delete objectName.methodName


브라우저 객체

객 체 용 도
window 객체 브라우저 윈도우나 윈도우 안에 있는 프레임에 액세스할 때 사용한다. 프로퍼티와 메소드를 참조할 때, window 객체가 존재하는 경우에는 "window."접두사를 붙일 필요가 없다
document 객체 현재 윈도우에 로드되어 있는 문서에 액세스할 때 사용한다. document 객체는 컨텐트를 제공하는 HTML 문서, 즉 HEAD와 BODY 태그가 있는 문서를 의미한다.
location 객체 URL을 나타낼 때 사용한다. 이 객체는 URL객체를 만들거나 URL의 일부분에 액세스하거나 기존의 URL을 수정할 때 사용할 수 있다.
history 객체 한 윈도우 안에서 액세스된 URL의 히스토리를 유지할 때 사용
frame 객체, frames 배열 HTML 프레임에 액세스할 때 사용
frames 배열은 윈도우안에 있는 모든 프레임에 액세스할 때 사용
link 객체, links 배열 하이퍼텍스트 링크의 텍스트 기반이나 이미지 기반 소스 앵커(anchor)에 액세스할 때 사용
links배열은 문서 안에 있는 모든 link 객체에 액세스할 때 사용한다. I.E.는 link 객체의 anchor객체를 결합한다.
anchor 객체, anchors 배열 하이퍼텍스트 링크의 타켓에 액세스할 때 사용
anchors 배열은 문서 안에 있는 모든 anchor 객체에 액세스할 때 사용
image객체, images 배열 HTML 문서에 삽입되어 있는 이미지에 액세스할 때 사용
images 배열은 문서 안에 있는 모든 image 객체에 액세스할 때 사용
area 객체 클라이언트측 이미지맵 안에 있는 영역에 액세스할 때 사용
applet 객체, applets 배열 Java 애플릿에 액세스할 때 사용
애플릿 배열은 문서 안에 있는 모든 애플릿에 액세스할 때 사용
event 객체, Event 객체 이벤트 발생에 대한 정보에 액세스할 때 사용
event 객체는 특정 이벤트에 대한 정보 제공
Event 객체는 이벤트를 식별하는 데 사용하는 상수 제공
form 객체, forms 배열 HTML 폼에 액세스시 사용
forms 배열은 문서 안에 있는 모든 폼에 액세스시 사용
element 객체 폼 안에 들어있는 모든 폼 요소에 액세스시 사용
text 객체 폼의 텍스트 필드에 액세스시 사용
textarea 객체 폼의 텍스트 영역 필드에 액세스시 사용
radio 객체 폼의 라디오 버튼 세트에 액세스하거나 세트 안에 있는 각각의 버튼에 액세스할 때 사용
checkbox 객체 폼의 체크 박스에 액세스할 때 사용
button 객체 Submit나 Reset 버튼이 아닌 폼 버튼에 액세스시 사용
reset 객체 폼의 Reset 버튼에 액세스시 사용
selet 객체 폼의 선택 리스트에 액세스시 사용
option 객체 option 객체는 선택 리스트의 요소에 액세스시 사용
password 객체 폼의 패스워드 필드에 액세스시 사용
hidden 객체 폼의 숨겨진 필드에 액세스시 사용
FileUpload 객체 폼의 파일 업로드 요소에 액세스시 사용
navigator 객체 스크립트를 실행하고 있는 브라우저에 대한 정보에 액세스시 사용
screen 객체 사용자의 화면의 색상 깊이와 크기에 대한 정보에 액세스시 사용
embed 객체, embeds 배열 삽입된 객체에 액세스시 사용
embeds 배열은 문서 안에 삽입된 모든 객체에 대한 액세스 제공
mimeType 객체, mimeTypes 배열 브라우저가 제공하는 특징 MIME 유형에 대한 정보에 액세스시 사용
mimeTypes 배열은 제공하는 모든 mimeType 객체의 배열
I.E.는 빈 배열을 리턴하면서 mimeTypes에 대해서 임시적으로 지원
plugin 객체, plugins 배열 특정 브라우저 플러그인에 대한 정보에 액세스시 사용
plugins 배열은 브라우저가 지원하는 모든 플러그인의 배열
I.E.는 빈 배열을 리턴하면서 plugins에 대해서 임시적으로 지원


window 객체

  • 모든 브라우저 스크립트의 기본적인 것으로, 브라우저가 자동으로 정의하는 최상위 레벨의 객체이다. 현재 열려 있는 각 윈도우에 대해 별도의 window 객체가 정의된다.

window 객체의 프로퍼티
프로퍼티 설 명
closed 윈도우가 닫혀 있는지 식별
defaultStatus 브라우저 윈도우의 하단의 상태바에 나타나는 디폴트 상대 메시지를 지정
document 윈도우에 표시되어 있는 현재 문서를 지정하는 객체
frames 윈도우 객체에 들어 있는 모든 프레임 객체로 구성된 배열
history 마지막으로 윈도우로 로드된 URL의 리스트를 포함하는 윈도우의 히스토리 객체
length window에 들어 있는 프레임의 수 식별
location window 객체와 관련된 URL을 지정하는 객체
name 윈도우의 이름 지정
offscreenBuffering 윈도우 정보의 오프스크린 버퍼링이 사용될 것인지를 지정하는 부울값
오프스크린 버퍼링은 윈도우를 나타내기 전에 윈도우의 모든 요소를 로드할 때 사용
opener 윈도우를 만들거나 열 수 있도록 해주는 window 객체 지정
parent 특정 윈도우를 포함하는 윈도우를 지정하는 시너님
self 참조될 현재 윈도우를 지정하는 시너님
status 브라우저 윈도의 하단의 상태 표시줄에 나타날 임시 메시지를 지정
top 중첩된 일련의 윈도우에서 맨 위에 있는 브라우저 윈도우를 의미하는 시너님
window 참조될 현재 윈도우를 식별하는 시너님

window 객체의 메소드
메 소 드 설 명
alert(text) 경고 다이얼로그 박스를 표시
blur() 포커스를 윈도우에서 옮긴다
setInterval(expression,milliseconds) 지정된 타임아웃 인터벌이 지난 이후에 표현식을 반복해서 평가하거나 함수를 불러온다.
clearInterval(interval) 이전에 설정된 인터벌 타이머를 클리어
setTimeout(expression,milliseconds) 타임아웃 기간이 지난 이후에 표현식을 평가하거나 함수를 호출한다.
clearTimeout(timer) 이전에 설정된 타임아웃을 클리어
close() 지정된 윈도우를 닫는다.
confirm(text) 확인 다이얼로그 박스를 나타낸다.
focus() 윈도우로 포커스를 가져간다.
open(url,name,[options]) 새로운 윈도우를 열고 새로운 window 객체를 만듬
prompt(text,defaultInput) 프롬프트 다이얼로그 박스를 나타낸다.
scroll(x,y) 윈도우를 특정 위치까지 스크롤한다.

open() 메소드의 옵션
옵 션 설 명
toolbar yes no 윈도우에 툴바 제공
location yes no 윈도우에 위치 필드 제공
directories yes no 디렉토리 버튼 제공
status yes no 상태 표시줄 제공
menubar yes no 메뉴바 제공
scrollbars yes no 스크롤 바 제공
resizable yes no 윈도우 크기 조절 가능
width 정수 윈도우의 폭(픽셀)
height 정수 윈도우의 높이(픽셀)


frame 객체

  • 프레임은 윈도우를 독립된 표시 영역들로 분할한 후, 이 영역들에 표시되는 정보들을 강력하게 컨트롤 할 수 있게 해준다.
  • 프레임 객체의 프로퍼티와 메소드는 window 객체와 같지만, close() 메소드는 지원하지 않는다.


document 객체

  • JavaScript 에서 아주 중요한 객체로, 이 객체를 사용하면 로드될 문서를 업데이트하고 로드된 문서 안에 있는 HTML 요소에 액세스할 수 있다.

프로퍼티 설 명
alinkColor <BODY> 태그의 alink 속성의 값 지정
anchor 문서에 들어 있는 배열을 참조하는 객체
anchors 문서에 들어 있는 모든 앵커의 배열
applet 문서에 들어 있는 애플릿을 참조하는 객체
applets 문서에 들어 있는 모든 애플릿의 배열
area 문서 안의 이미지맵 영역을 참조하는 객체
bgColor <BODY> 태그의 bgColor 속성의 값 식별
cookie 쿠키의 값 식별
domain 문서가 로드되는 서버의 도메인 이름 식별
embeds 문서안의 모든 플러그인의 배열
fgColor <BODY> 태그의 text 속성값 지정
form 문서 안의 폼을 참조하는 객체
Forms[] 문서 안의 모든 폼의 배열
image 문서 안의 이미지를 참조하는 객체
Images[] 문서 안의 모든 이미지의 배열
lastModified 문서가 마지막으로 수정된 날짜
link 문서 안의 링크를 참조하는 객체
links 문서 안의 모든 링크의 배열
linkColor <BODY> 태그의 link 속성의 값 식별
plugin 문서 안의 플러그인을 참조하는 객체
plugins[] 브라우저가 지원하는 플러그인을 나타내는 객체의 배열
referrer 문서에 대한 링크를 제공하는 문서의 URL
title 문서의 타이틀
URL 문서의 URL
vlinkColor <BODY> 태그의 vlink 속성의 값 식별

document 객체의 메소드
메 소 드 설 명
close() 문서의 객체를 만드는 데 사용된 스트림
open([mimeType][,"replace"]) 선택적인 MIME 유형으로 문서 객체를 만들 때 사용되는 흐름을 개시한다. "replace" 파라미터는 text/html MIME 유형과 함께 사용되어 히스토리 리스트에 있는 현재 문서를 대체
write(expr1[,expr2...,exprN]) 문서에 표현식의 값을 기록
write(expr1[,expr2...,exprN]) 개행 문자가 다음에 따라오는 문서에 표현식의 값 기록


navigator 객체

  • navigator 객체는 window 객체와 마찬가지로 브라우저 객체 모델에서 최상위 레벨의 객체이며, 스크립트를 실행할 때 사용되는 브라우저의 종류와 버전에 대한 정보 제공한다.

navigator 객체의 프로퍼티
프로퍼티 브라우저 지원 설 명
appCodeName N2, I.E3 브라우저 색상 이름
AppMinorVersion I.E4 브라우저 버전 번호
appName N2, I.E3 브라우저 이름
appVersion N2, I.E3 브라우저의 버전
browserLanguage I.E4 브라우저에 설정되어 있는 언어
connectionSpeed I.E4 브라우저가 네트워크에 연결되는 속도
cookieEnabled I.E4 브라우저가 쿠키를 허용하도록 설정되어 있는지의 여부
cpuClass I.E4 브라우저 실행시 사용되는 마이크로프로세서의 유형
onLine I.E4 브라우저가 현재 온라인 연결을 가지고 있는지 여부
Language N4, I.E4 브라우저에 설정되어 있는 언어
mimeTypes N3, I.E4 현재 브라우저가 지원하는 모든 MIME 유형의 배열
platform N4, I.E4 브라우저가 실행되는 운영체제 플랫폼
plugins N3, I.E4 현재 브라우저에 설치된 모든 플러그인의 배열
systemLanguage I.E4 운영체제의 디폴트 언어
userAgent N2, I.E3 브라우저에서 서버로 전송된 HTTP 프로토콜의 사용자 에이전트 헤더
userLanguage I.E4 사용자가 사용하는 언어
userProfile I.E4 사용자 프로파일 정보에 대한 액세스를 제공하는 객체

navigator 객체의 메소드
메 소 드 설 명
javaEnabled() 사용자가 브라우저의 Java 기능을 켜두었는지의 여부를 나타내는 부울값 리턴
taintEnabled() 사용자가 data tainting(보안 메커니즘)을 활성화했는지 여부를 나타내는 부울값 리턴
preference 서명이 되지 않은 스크립트가 보안 관련 프로퍼티를 얻고 설정할 때 사용


event 객체

event 객체의 프로퍼티
프로퍼티 브라우저 설 명
data N DragDrop 이벤트로 인해 드롭된 객체의 URL이 들어있는 스트링 배열
height, width N 윈도우나 프레인의 길이와 너비(픽셀표시)
pageX, pageY N 픽셀로 나타낸 커서의 수평/수직 위치(페이지에서의 상대적위치)
screenX, screenY N, I.E 픽셀로 나타낸 커서의 수평/수직 위치(화면에서의 상대적 위치)
layerX, layerY N 픽셀로 나타낸 커서의 수평/수직 위치, 이벤트가 발생한 레이어에 대한 상대적 위치. Resize 이벤트와 함께 사용하면 layerX와 layerY가 이벤트가 타겟으로 하는 객체의 길이와 너비 지정
clientX와 clientY I.E 픽셀로 나타낸 커서의 수평/수직 위치, 이벤트가 발생한 웹페이지에서의 상대적 위치
offsetX, offsetY I.E 픽셀로 나타낸 커서의 수평/수직 위치, 이벤트가 발생한 컨테이너에 대한 상대적 위치
X, Y I.E 픽셀로 나타낸 커서의 수평/수직 위치, 이벤트가 발생한 문서에 대한 상대적 위치
target N 이벤트가 전송된 원래 객체
srcElement I.E 이벤트가 전송된 원래 객체
type N, I.E 발생한 이벤트 유형
which N 눌려진 마우스 버튼(왼:1, 가:2, 오:3)이나 눌려진 키의 ASCII값
keyCode I.E 키 누름과 연관된 Unicode 키 코드를 식별
button I.E 이벤트가 발생했을 때 눌려진 마우스 버튼 식별(0:눌려진버튼없음, 1:왼, 2:오, 4:가)
modifiers N 마우스나 키 이벤트와 연관된 수정자 키(ALT_MASK,CONTROL_MASK,SHIFT_MASK,META_MASK)를 식별
altkey,ctrlkey,shiftkey I.E true나 false로 설정하여 이벤트가 발생했을 때 Alt키와 Control키, Shift 키 중에 어떤 것이 눌려졌는지 알려준다.
cancelBubble I.E true나 false로 설정하여 이벤트 버블링을 취소하거나 활성화한다.
fromElement, toElement I.E 이동 중인 HTML 요소 지정
reason I.E 데이터 소스 객체에 대한 데이터 전송 상태를 나타내는데 사용
returnValue I.E true나 false로 설정하여 이벤트 핸들러의 리턴값을 나타낸다. 이벤트 핸들러에서 true나 false를 리턴하는 것과 같다.
srcFilter I.E onfilterchange 이벤트를 시작하는 filter객체 지정

screen 객체

  • screen 객체의 프로퍼티
    • height : 사용자의 화면의 현재 높이(픽셀)
    • width : 사용자의 화면의 현재 너비(픽셀)
    • colorDepth : 사용자의 화면/비디오 카드에서 현재 지원하는 색상당 바이트 수


    form 객체

    • document 객체의 프로퍼티로 액세스되고, form 객체는 문서 안의 폼에 액세스할 수 있도록 해주고, 폼 관련 이벤트에 응답을 할 수 있도록 해주기 때문에 중요하다.
    form 객체의 프로퍼티
    프로퍼티 설 명
    action <FORM> 태그의 HTML action 속성에 대한 액세스 제공
    button GUI 컨트롤 버튼을 나타내는 객체
    checkbox 체크 박스 필드를 나타내는 객체
    elements 폼 안에 포함되어 있는 모든 필드와 GUI 컨트롤을 포함하는 배열
    encoding <FORM> 태그의 HTML enctype 속성에 대한 액세스 제공
    FileUpload 파일 업로드 폼 필드를 나타내는 객체
    hidden 숨겨진 폼 필드를 나타내는 객체
    length elements 배열의 길이에 대한 액세스 제공
    method <FORM> 태그의 HTML method 속성에 대한 액세스 제공
    name 폼의 이름 식별
    password 패스워드 필드를 나타내는 객체
    radio 라디오 버튼 필드를 나타내는 객체
    reset reset 버튼을 나타내는 객체
    select 선택 항목 리스트를 나타내는 객체
    submit submit 버튼을 나타내는 객체
    target <FORM> 태그의 HTML target 속성에 대한 액세스 제공
    text 텍스트 필드를 나타내는 객체
    textarea 텍스트 영역 필드를 나타내는 객체

    form 객체의 메소드
    메 소 드 설 명
    handleEvent() 지정된 이벤트에 대한 폼의 이벤트 핸들러를 호출할 때 사용
    submit() 폼을 제출시 사용
    reset 폼의 엔트리를 디폴트 값으로 재설정시 사용

    form 요소 객체의 프로퍼티
    객 체 프로퍼티 설 명
    button name 버튼의 name 속성에 대한 액세스 제공
    type 객체의 유형 지정
    value 객체의 값 지정
    checkbox checked 체크박스가 현재 체크되어 있는지를 식별
    defaultChecked 체크박스가 디폴트로 체크되어 있는지 식별
    name 체크박스의 HTML name 속성에 대한 액세스 제공
    type 객체의 유형 식별
    value 객체의 값 식별
    FileUpload name 객체의 name 속성에 대한 액세스 제공
    type 객체의 type 속성에 대한 액세스 제공
    value 객체의 값 식별
    hidden name 객체의 name 속성에 대한 액세스 제공
    type 객체의 유형 식별
    value 객체의 값 식별
    password defaultChecked 객체의 디폴트 값 식별
    name 객체의 name 속성에 대한 액세스 제공
    type 객체의 유형 식별
    value 객체의 값 식별
    radio checked 라디오 버튼이 체크되어 있는지 식별
    defaultChecked 라디오 버튼이 디폴트로 체크되어 있는지 식별
    name 객체의 name 속성에 대한 액세스 제공
    type 객체의 유형 식별
    value 객체의 값 식별
    reset name 객체의 name 속성에 대한 액세스 제공
    type 객체의 유형 식별
    value 객체의 값 식별
    select length 선택 리스트의 길이 식별
    name 객체의 name 속성에 대한 액세스 제공
    option 선택 리스트가 제공하는 옵션 식별하는 배열
    selectedIndex 선택 리스트 안에서 처음 선택된 옵션 식별
    type 객체의 유형 식별
    submit name 객체의 name 속서에 대한 액세스 제공
    type 객체의 유형 식별
    value 객체의 값 식별
    text defaultValue 텍스트 필드에 나타나는 디폴트 텍스트를 식별
    name 객체의 name 속성에 대한 액세스 제공
    type 객체의 유형 식별
    value 객체의 값 식별
    textarea defaultValue 텍스트 영역 필드에 나타나게 되는 디폴트 텍스트 식별
    name 객체의 name 속성에 대한 액세스 제공
    type 객체의 유형 식별
    value 객체의 값 식별

    form 요소 객체의 메소드
    객 체 메 소 드 설 명
    button Click() 클릭된 버튼 시뮬레이트
    blur() 포커스 잃음
    focus() 포커스 맞춤
    checkbox Click() 클릭된 체크 박스 시뮬레이트
    blur() 포커스 잃음
    focus() 포커스 맞춤
    FileUpload blur() 포커스 잃음
    focus() 포커스 맞춤
    select() 입력 영역을 선택
    hidden 없음
    password blur() 포커스 잃음
    focus() 포커스 맞춤
    select() 패스워드 필드에 나타나는 텍스트를 하이라이트
    radio Click() 라디오 버튼 클릭 시뮬레이트
    blur() 포커스 잃음
    focus() 포커스 맞춤
    reset Click() 리셋 버튼 클릭 시뮬레이트
    blur() 포커스 잃음
    focus() 포커스 맞춤
    select blur() 포커스 잃음
    focus() 포커스 맞춤
    submit Click() 제출 버튼 클릭 시뮬레이트
    blur() 포커스 잃음
    focus() 포커스 맞춤
    text blur() 포커스 잃음
    focus() 포커스 맞춤
    select() 텍스트 필드에 있는 텍스트 하이라이트
    textarea blur() 포커스 잃음
    focus() 포커스 맞춤
    select() 텍스트 영역에 있는 텍스트 하이라이트


    location 객체

    • 윈도우에 로드되어 있는 현재 문서의 URL에 액세스하거나 새로운 문서를 로드할 때 사용

    location 객체의 프로퍼티
    프로퍼티 설 명
    hash URL의 앵커 부분(존재하는 경우)
    host URL의 hostname:port 부분
    hostname URL의 host부분
    href 전체 URL
    pathname URL의 경로명 부분
    port URL의 포트 부분
    protocol URL의 프로토콜 부분
    search URL의 쿼리 스트링 부분

    location 객체의 메소드
    • reload() : 윈도우의 현재 문서를 브라우저의 Reload 버튼에서 사용하는 정책에 따라 다시 로드
      • Every time : 문서는 매번 서버에서 다시 로드
      • Once per session : 서버의 문서의 날짜가 캐시에 저장되어 있는 문서보다 더 최신 날짜라는 것을 나타내면 문서는 세션당 한 번씩 서버에서 다시 로드된다. 문서가 캐시에 없는 경우에는 서버에서 로드
      • Never : 문서는 가능하면 캐시에서 다시 로드, 그렇지 않으면 서버에서 로드
    • replace() : URL을 파라미터로 취하여, 현재 문서 히스토리 목록에 있는 현재 문서위로 그 URL의 문서를 로드, 그러면 브라우저의 Back버튼을 클릭하여 이전 문서로 돌아갈 수 없음


    link 객체

    • link 객체는 document 객체의 프로퍼티로, 문서에 들어있는 텍스트나 이미지 링크를 캡슐화
    • links 배열은 문서에 들어있는 모든 링크의 배열
    • link 객체의 메소드
      handleEvent() : event 객체를 인자로 취하며 그 이벤트에 대해 적당한 이벤트 핸들러 호출

    link 객체의 프로퍼티
    프로퍼티 설 명
    hash URL의 앵커 부분(존재하는 경우)
    host URL의 hostname:port 부분
    hostname URL의 host부분
    href 전체 URL
    pathname URL의 경로명 부분
    port URL의 포트 부분
    protocol URL의 프로토콜 부분
    search URL의 쿼리 스트링 부분
    target 링크의 HTML, target 속성


    anchor 객체

    • HTML 문서 안에서 이름이 지정된 오프셋으로 사용되는 앵커 의미
    • anchors 배열에는 문서의 모든 앵커가 들어있음
    • 프로퍼티나 메소드 또는 이벤트를 전혀 가지고 있지 않음
    • HTML 문서와 관련하여 정의된 이름이 지정된 오프셋을 추적할 때 사용
    • anchor 객체는 HREF 속성을 포함하는 경우에 link 객체가 된다.


    history 객체

    • history 객체의 프로퍼티
      • current : 윈도우에 나타나는 현재 문서의 URL
      • length : History 리스트의 길이
      • next : History 리스트에서의 다음 URL
      • previous : History 리스트에서의 이전 URL
    • history 객체의 메소드
      • back() : History 리스트에 이전 문서를 로드. 브라우저의 Back 버튼을 클릭하는 것과 같은 효과
      • forward() : History 리스트에 다음 문서를 로드. 브라우저의 Forward 버튼을 클릭하는 것과 같은 효과
      • go() : History 리스트에 있는 특정 문서로 감
        • go(n) : n>0인 경우, 이 메소드는 History 리스트에서 n개의 엔트리가 앞에 있는 문서를 로드, n=0인 경우에는 현재 문서가 다시 로드되고, n<0인 경우엔 History 리스트에서 n개의 엔트리 뒤에 있는 문서를 로드
        • go(string) : go()는 이 스트링을 서브스트링으로 갖고 있는 URL의 History 리스트에서 가장 가까운 문서를 로드


    image 객체

    • document 객체의 프로퍼티
    • 문서와 함께 로드된 이미지에 대한 액세스 제공
    • images 배열은 문서 안에 지정되어 있는 각각의 <IMG>태그에 대한 엔트리가 들어있음
    • image 객체 유형을 사용하면 키워드와 생성자로 새로운 image 객체를 명시적으로 만들 수 있다. Image() 생성자는 웹페이지의 일부로서 처음에 나타나지 않는 이미지를 만들고 미리 로드할 때 사용한다. 이러한 image 객체는 브라우저의 캐시에 저장되면 이미 나타난 이미지를 대체할 때 사용
      * Image() 생성자를 사용하여 캐시된 이미지 만드는 예 cachedImage=new Image()
      cachedImage.src="myImage.gif"
      = > 첫번째 문장은 새로운 image 객체를 만들고 그것을 cachedImage 변수에 대입하고, 두번째 문장은 image 객체의 src프로퍼티를 myImage.gif 이미지 파일로 설정한다. 이 경우 myImage.gif는 브라우저 캐시로 로드된다. 그러면 로드된 이미지는 cachedImage 변수를 사용하여 참조 가능하다.

      image 객체의 프로퍼티
      프로퍼티 설 명
      border <:IMG> 태그의 BORDER 속성의 값
      complete 이미지가 완전히 로드되었는지 식별
      height <:IMG> 태그의 HEIGHT 속성의 값
      hspace <IMG> 태그의 HSPACE 속성의 값
      lowsrc <IMG> 태그의 LOWSRC 속성의 값
      name <IMG> 태그의 NAME 속성의 값
      prototype image 객체에 사용자 지정 프로퍼티를 추가할 때 사용
      src <IMG> 태그의 SRC 속성의 값
      vspace <IMG> 태그의 VSPACE 속성의 값
      width <IMG> 태그의 WIDTH 속성의 값


    area 객체

    • 이미지맵은 여러 가지 다른 영역으로 나누어져 있는 이미지로서 각각의 영역은 자체 URL과 관련되어 있다. 그리고 이러한 영역과 관련된 사용자 처리 방식으로 area 객체를 제공

    area 객체의 프로퍼티
    프로퍼티 설 명
    hash area 객체의 HREF 속성의 파일 오프셋 부분
    host area 객체의 HREF 속성의 호스트 이름 부분
    hostname area 객체의 HREF 속성의 host:port 부분
    href area 객체의 완전한 HREF 속성
    pathname area 객체의 HREF 속성의 경로명 부분
    port area 객체의 HREF 속성의 포트 부분
    protocol area 객체의 HREF 속성의 프로토콜 부분
    search area 객체의 HREF 속성의 쿼리 스트링 부분
    target area 객체의 TARGET 속성


    Array 객체

    • Array 객체를 사용하면 배열을 객체처럼 액세스 가능
    • Array 객체의 프로퍼티
      • length : 배열의 길이 식별
      • prototype : 모든 객체 유형이 지원하는 프로퍼티로 객체 유형에 대해 추가적인 프로퍼티 및 메소드 정의 가능
    • Array 객체의 메소드
      • toString() : 배열의 스트링 버전 리턴, 배열 요소는 컴마로 구분
      • join(separator) : 배열의 스트링 버전 리턴, 배열 요소는 seperator 스트링으로 구분, 분리자가 없으면 컴마로 구분
      • reverse() : 배열의 요소를 역순으로 바꿈
      • sort(comparisionFunction) : 비교 연산에 따라 배열의 요소 정렬. 비교 함수가 지정되면, 배열 요소는 사전순서로 정렬. 비교 연산이 지정되면 두개의 파라미터 p1,p2를 취하고, p1이 p2보다 작은 경우에는 음의 정수를 리턴하고, 같으면 0을 리턴하고, p1이 p2보다 크면 양의 정수 리턴


    Boolean 객체

    • Boolean 객체를 사용하면 부울값은 객체로서 액세스 가능
    • Boolean 객체는 생성자에 대한 인자로서 값을 식별하여 만들어짐 myBoolean=new Boolean(false)
      yourBoolean=new Boolean(true)
    • Boolean 객체의 프로퍼티
      • prototype : 모든 객체 유형이 지원하는 프로퍼티로 객체 유형에 대해 추가적인 프로퍼티 및 메소드 정의 가능
    • Boolean 객체의 메소드
      • toString() : 부울값에 해당하는 스트링 리턴
      • valueOf() : 객체의 값에 따라 true나 false로 리턴


    Date 객체

    Date 객체의 메소드
    메 소 드 설 명
    getDate()
    getUTCDate()
    setDate()
    setUTCDate()
    Date 객체의 날짜를 설정하거나 리턴
    getDay()
    getUTCDay()
    Date 객체의 한 주의 날짜를 설정하거나 리턴
    getHours()
    getUTCHours()
    setHours()
    setUTCHours()
    Date 객체의 시간를 설정하거나 리턴
    getMilliseconds()
    getUTCMilliseconds()
    setMilliseconds()
    setUTCMilliseconds()
    Date 객체의 밀리초 값을 설정하거나 리턴
    getMinutes()
    getUTCMinutes()
    setMinutes()
    setUTCMinutes()
    Date 객체의 분을 설정하거나 리턴
    getMonth()
    getUTCMonth()
    setMonth()
    setUTCMonth()
    Date 객체의 달을 설정하거나 리턴
    getSeconds()
    getUTCSeconds()
    setSeconds()
    setUTCSeconds()
    Date 객체의 초를 설정하거나 리턴
    getTime()
    getUTCTime()
    Date 객체의 시간을 설정하거나 리턴
    getTimeZoneOffset() Date 객체의 시간대 오프셋(분)을 리턴
    getYear()
    getFullYear()
    getUTCFullYear()
    setYear()
    setFullYear()
    setUTCFullYear()
    Date 객체의 연도를 리턴하거나 설정한다. 완전한 연도를 나타내는 방법으로 4자리 연도 값을 사용한다.
    toGMTString() 날짜를 Internet GMT(Greenwich Mean Time) 포맷의 스트링으로 변환
    toLocaleString() 날짜를 로케일(locale)포맷의 스트링으로 변환. 로케일 포맷이란 사용자가 위치해 있는 지형적 위치에서 일반적으로 사용하는 포맷 의미
    toString() Date 객체의 스트링 값을 리턴
    valueOf() 1970년 1월 1일 자정 이후의 밀리초 값 리턴
    toUTCString() UTC에서 시간을 나타내는 스트링 값을 리턴

    Date 생성자
    생 성 자 설 명
    Date() 현재 날짜와 시간으로 Date 인스턴스 만듬
    Date(dateString) dateString 파라미터에 지정되어 있는 날짜로, Date 인스턴스를 만든다. dateString의 포맷은 "월,일,연도,시:분:초"
    Date(milliseconds) 1970년 1월 1일 자정 이후 지정된 밀리초 값으로 Date 인스턴스를 만든다.
    Date(year,month,
    day,hours,minutes,
    seconds,milliseconds)
    년,월,일,시,분,초,밀리초 정수에 따라 지정된 날짜로 Date 인스턴스를 만든다. 연도와 월 파라미터는 제공되어야 하고 다른 나머지 파라미터가 포함되면 앞에 오는 모든 파라미터가 제공되어야 한다.


    Function 객체

    • 함수를 객체처럼 액세스 가능하고, 이 객체는 스크립트를 실행하는 동안에 함수를 동적으로 만들고 호출할 때 사용
    • Function 객체는 함수의 파라미터와 본문을 Function() 생성자에 제공하면 된다.
      variable=new Function("p1","p2", ... ,"pn","body")
    • Function 객체 프로퍼티
      • length : 함수에 대해 정의된 파라미터의 숫자 식별
      • prototype : 모든 객체 유형이 지원하는 프로퍼티로 객체 유형에 대해 추가적인 프로퍼티 및 메소드 정의 가능
      • arguments : 호출시 함수에 전달되는 인자를 가리키는 배열
      • caller : 특정 함수를 호출한 함수를 가리킴
    • Function 객체의 메소드
      • toString() : 함수의 스트링 형태 리턴
      • valueOf() : 함수 자체 리턴


    Global 객체

    • new Global() 을 통해서 명시적으로 만들거나, 참조할 수 없다. 대신 해당 프로퍼티와 메소드가 전역 변수와 함수로 직접 참조됨
    • Global 객체의 프로퍼티
      • Nan : 숫자가 아니라는 의미
      • Infinity : 양수 무한대 값 의미
    • Global 객체의 메소드
      • escape(string) : string을 새로운 스트링으로 변환
      • eval(x) : 표현식 x의 값을 계산하고 리턴
      • inFinite(number) : number가 유한하면 true를 리턴하고, 무한하면 false를 리턴
      • inNaN(number) : number가 숫자가 아니면 true를 리턴하고, 숫자이면 false를 리턴
      • parseFloat(string) : string을 부동 소수 값으로 파싱
      • parseInt(string,radix) : string을 밑이 radix인 정수로 파싱
      • unescape(string) : escape()에 들어 있는 스트링을 원래의 값으로 되돌린다.


    Math 객체

    • 수학적 상수와 함수의 표준 라이브러리 제공
    • Math의 특수 인스턴스는 Math가 내장 객체이고 객체 유형이 아니기 때문에 만들어지지 않는다.

    Math 프로퍼티
    프로퍼티 설 명
    E Euler의 상수. 이것은 계산을 하는 어디에서나 발견할 수 있으며 자연대수의 기초
    LN2 2의 자연대수. 이것은 자연대수와 밑이 2인 대수 사이의 전환에 사용되는 간단한 상수
    LN10 10의 자연대수. LN2와 마찬가지로 대수 변환에 사용
    LOG2E 밑이 2인 E의 대수. 이것은 밑이 10인 대수를 밑이 E인 대수로 변환시 사용
    PI 원의 원주 대 지름의 비율
    SQRT1_2 1/2의 제곱근은 많은 삼각법 계산에서 사용
    SQRT2 2의 제곱근은 대수식에서 흔히 사용

    Math 메소드
    메 소 드 설 명
    abs(x) x의 절대값 리턴
    acos(x) x의 아크 코사인값 라디안으로 리턴
    asin(x) x의 아크 사인값 라디안으로 리턴
    atan(x) x의 아크 탄젠트 값을 라디안으로 리턴
    atan2(x,y) (x,y)에 해당하는 극좌표의 각도를 리턴
    ceil(x) x보다 크거나 작은 최소 정수값 리턴
    cos(x) x의 코사인 값 리턴
    exp(x) eX를 리턴
    floor(x) x보다 작거나 같은 최대 정수값 리턴
    log(x) x의 자연대수 리턴
    max(x,y) x, y 중 큰 값 리턴
    min(x,y) x, y 중 작은 값 리턴
    pow(x,y) xy를 리턴
    random() 0과 1사이의 임의의 숫자 리턴
    round(x) x의 가장 가까운 정수로 반올림되는 값 리턴
    sin(x) x의 사인값 리턴
    sqrt(x) x의 제곱근 리턴
    tan(x) x의 탄젠트 값 리턴


    Number 객체

    • Number 객체 유형을 사용하면 숫자를 객체로 다룰 수 있다.
    • Number 객체의 프로퍼티
      • MAX_VALUE : 숫자는 가능한 최대 수치값
      • MIN_VALUE : 숫자는 가능한 최소 수치값
      • NaN : 숫자가 아니다
      • NEGATIVE_INFINITY : 숫자가 음수 무한대 값
      • POSITIVE_INFINITY : 숫자가 양수 무한대 값
      • prototype : 모든 객체 유형이 지원
    • Number 객체의 메소드
      • toString(radix) : 밑이 radix인 숫자를 나타내는 스트링 리턴
      • valueOf() : Number 객체의 수치값 리턴


    Object 객체

    • Object 객체는 다른 모든 객체들이 파생되어 나가는 기반 객체로 이것의 프로퍼티와 메소드는 다른 객체 유형들에서 사용 가능
    • Object 객체의 프로퍼티
      • prototype : 모든 객체 유형이 지원
      • constructor : 객체 생성자의 이름 식별
    • Object 객체의 메소드
      • toString() : 객체를 스트링 표현으로 바꾸는 역할
      • valueOf() : 객체와 관련된 경우의 원시값(숫자,스트링,부울값)을 리턴하고, 그렇지 않은 경우에는 객체 자체를 리턴


    String 객체

    • 스트링을 객체로 액세스 가능
    • String 객체의 프로퍼티
      • length : 문자에서 스트링의 길이 알아내는 역할
      • prototype : 모든 객체 유형이 지원
    String 메소드
    메 소 드 설 명
    charAt(index) 메소드가 적용되는 스트링의 지정된 인덱스에 있는 문자로 구성된 스트링을 리턴
    charCodeAt(index) 지정된 인덱스의 문자의 Unicode 인코딩 리턴
    fromCharCode(codes) 문자 코드의 컴마로 구분된 시퀀스에서 스트링 만듬
    indexOf(pattern) 스트링안에 들어있는 pattern 파라미터가 지정한 첫 번째 스트링의 인덱스 리턴, 패턴이 스트링 안에 들어있지 않으면 -1 리턴
    indexOf(pattern,startIndex) startIndex가 지정한 위치에서 검색을 시작하는 것을 제외하면 indexOf(pattern) 메소드와 같다.
    lastIndexOf(pattern) 스트링에 들어 있는 pattern 파라미터가 지정한 마지막 스트링의 인덱스 리턴, 패턴이 스트링 안에 들어있지 않으면 -1 리턴
    lastIndexOf(pattern,startIndex) startIndex가 지정한 위치에서 검색을 시작하는 것을 제외하면 lastIndexOf(pattern)과 같다.
    splitSeparator() 하나의 스트링을 분리자를 기반으로 하여 서브스트링의 배열로 분리
    substring(startIndex) startIndex에서 시작하는 스트링의 서브스트링을 리턴
    substring(startIndex,endIndex) startIndex에서 시작하고, endIndex에서 끝나는 스트링의 서브스트링을 리턴
    toLowerCase() 소문자로 변환된 스트링의 복사본 리턴
    toString() 객체의 스트링 값을 리턴
    toUpperCase() 대문자로 변환된 스트링의 복사본 리턴
    valueOf() 객체의 스트링 값을 리턴

  • Posted by 1010
    반응형

    Window 객체 속성

    • status 브라우저 상태바에 하단에 나타날 문자열
    • defaultStatus status에 지정된 문자열이 없을 때 나타날 문자열
    • self 자기 자신 객체
    • parent window 객체 간에 계층구조가 생길 때 상위 객체
    • top window 객체 간에 계층구조가 생길 때 최상위 객체
    • frames window 객체 안에 들어간 프레임들
    • opener open() 메소드로 윈도우를 연 문서가 있는 윈도우parent랑 비슷
    • pageXOffset 윈도우에 현재 나타나는 페이지의 x 위치
    • pageYOffset 윈도우에 현재 나타나는 페이지의 y 위치
    • locationbar 윈도우의 Locationbar를 보여줄지의 여부 지정
    • menubar 윈도우의 메뉴를 보여줄지의 여부 지정
    • personalbar 윈도우의 Personalbar(넷스케이프)를 보여줄지의 여부 지정
    • scrollbars 윈도우의 스크롤바를 보여줄지의 여부 지정
    • statusbar 윈도우의 상태선을 보여줄지의 여부 지정
    • toolbar 윈도우의 툴바를 보여줄지의 여부지정
    • tags HTML 문서에 사용된 모든 태그들
    • classes HTML 문서에 정의된 모든 스타일 시트 클래스들
    • innerHeight 윈도우에서 내용이 나타나는 영역의 높이 (NE only)
      IE는 clientHeight
      문법 : window.innerHeight
      문법 : document.body.clientHeight
    • innerWidth 윈도우에서 내용이 나타나는 영역의 너비 (NE only)
    • outerHeight 윈도우 바깥 테두리의 높이 (IE only)
    • outerWidth 윈도우 바깥 테두리의 너비 (IE only)

    Window 객체 메소드

    • alert() 경고창을 보여줍니다.
    • clearInterval() setInterval()메소드에의해 수행되고 있는 함수를 중지
    • clearTimeout() setTimeout()메소드에의해 수행되고 있는 함수를 중지
    • close() 창을 닫습니다
    • comfirm() 확인버튼이 있는 창 confirm dialog box를 띄운다
    • focus() 지정한 창에 focus를 맞춘다.
    • blur() 창에서 cursor가 벗어나서 focus를 읽은 상태(focus를 제거)
    • moveBy() 상대적 좌표로 창을 이동
    • moveTo() 절대위치로 창을 이동
    • open() 새로운 창을 열어줍니다
    • print() 화면의 내용을 인쇄
    • prompt() 입력란이 있는 대화상자 Prompt dialog box를 띄운다.
    • resizeBy() 상대크기로 창 크기를 변경
    • resizeTo() 절대크기로 창 크기를 변경
    • scroll() 창을 스크롤
    • scrollBy() 상대적 좌표로 창을 스크롤
    • scrollTo() 절대적 좌표로 창을 스크롤
    • setInterval() 실행할 수식을 지정한 시간 마다 반복 실행
    • setTimeout() 실행할 수식을 지정한 시간 후에 한 번 실행

    Window 창의 속성

    창 속성 옵션 의미

    • menubar yes/no, 1/0 메뉴바를 보여주거나 숨깁니다
    • toolbar yes/no, 1/0 도구막대를 보여주거나 숨깁니다
    • directories yes/no, 1/0 디렉토리바를 보여주거나 숨깁니다
    • scrollbars yes/no, 1/0 스크롤바를 보여주거나 숨깁니다
    • status yes/no, 1/0 상태표시줄을 보여주거나 숨깁니다
    • location yes/no, 1/0 주소표시줄을 보여주거나 숨깁니다
    • width 픽셀 팝업 윈도우의 가로크기를 지정합니다
    • height 픽셀 팝업 윈도우의 높이를 지정합니다
    • left 픽셀 팝업 윈도우의 x축 위치를 지정합니다
    • top 픽셀 팝업 윈도우의 y축 위치를 지정합니다
    • resizable yes/no 1/0 팝업윈도우의 크기를 사용자가 임의로 수정할 수 있는지 여부를 지정합니다
    • fullscreen 전체화면 모드로 열어줍니다
    Posted by 1010
    반응형
     

    하얀별님의 블로그의 내용을 바탕으로 나름 Test 해본것입니다.


    ajax_dbTest.htm


    <html><head>


    <script language=javascript>
      var xmlhttp = null;
      var tm; //ajax.html 화면에 찍는 시간
      var time;//ajax_dbTest.jsp에 넘기기위한 시간


    function getHttprequest() {


       /* 브라우져 셋팅*/

      if(window.XMLHttpRequest) {

       //파어이 폭스는 아래값으로 셋팅됨.
       xmlhttp = new XMLHttpRequest();
      } else {
       //인터넷 익스플로어는 아래값으로 셋팅됨.
       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } //브라우져 셋팅 끝.


      //data.php를 호출한다.data.php에 값이 리로드 되는것을 확인하기 위해

      //일부러 시간값(time변수)을 2초마다 넘겨서 찍음.
      xmlhttp.open('get',"ajax_dbTest.jsp?time="+time+"",true);


      xmlhttp.onreadystatechange = function(){
        if(xmlhttp.readyState == '4'){ //readyState 4는 로딩된후, 값을 모두 받았음을 의미함.
          if(xmlhttp.status == 200) {

            //data.php에서 불러온 값이 data라는 변수에 담기게 된다.

            //실제로 window.alert(data)로 찍어봐도 확인 가능.

            //이 값을 ajax.html 화면에 찍기 위해 innerHTML 사용
            var data=xmlhttp.responseText;
            document.getElementById("test").innerHTML = data;

            //utf 설정 헤더를 넣을때 아래 추가
            //xmlhttp.setRequestHeader("Content-type", "application/x-www-urlencoded; charset=UTF-8");
          } //End of 200
        } //End of 4
      }

     xmlhttp.send(null);
        time=date(); //시간값을 호출하는 페이지 data.php에 넘겨보기 위해서 return
        setTimeout("getHttprequest()", 2000); //2초 마다 서버와 통신함
        return false; //setTimeout이 제대로 호출된다면 여기로는 넘어오지 않음
    }


    //현재 시간을 찍는 자바스크립트 함수
    function date(){
     
      var tm;
      var a=new Date();
      var b=a.getYear();
      var c=a.getMonth()+1;
      var d=a.getDate();
      var e=a.getHours();
      var f=a.getMinutes();
      var g=a.getSeconds();

      tm=b+"-"+c+"-"+d+" "+e+":"+f+":"+g+"";
      document.getElementById("tim").innerHTML = tm;
      return tm;
    }


    /*  리플레쉬 할때 setTimeout 대신 아래 함수 setInterval을 써도 됨.

    단, setInterval을 호출할때는 서버에 부하가 가므로, script밖에 호출할것.

    function refresh()
    {
    setInterval("getHttprequest()", 2000);
    }
    */


    </script>
    </head>


    <body onload="getHttprequest()">

    <!-- 시간찍는 테이블 -->
    <table border=1>
    <tr><td id='tim'>
    time:
    </td></tr>
    </table>


    <!-- 처음 로딩시 시간 자바스크립트 호출 -->
    <script>
    date();
    </script>


    <!-- data.php에서 찍는 db값이 이곳으로 들어옴 -->
    <table border=1>
    <tr>
     <td id='test'>start</td>
    </tr>
    </table>

    </body>
    </html>


     




    ajax_dbTest.jsp


    <%@ page import="
      java.util.*,
      java.sql.*,
      com.rsm.angel.sys.*
    "%>


    <%
      ResultSetHelper rsHelper;
      StringBuffer sql = new StringBuffer();
         JDBCHelper jdbc = new JDBCHelper();
      

      String poolName = "acrDS";
      sql = new StringBuffer();
     
       
      sql.append(" SELECT A.REC_FILENAME DATA1, A.APCUSTOMER_ID DATA2   ");
      sql.append("  FROM acr_v2.200701t_rec_data A        ");  
      sql.append("  WHERE  date_format(A.REC_START_DATE,'%Y%m%d') = '20070105' ");  
      sql.append("  ORDER BY A.REC_FILENAME DESC         ");
      sql.append("  LIMIT 10              ");

     
     
      System.out.println(sql.toString());
          
            try {
                jdbc.initPreparedStatement(sql , poolName) ;          
       jdbc.execStaticSQL() ;  
       rsHelper = ResultSetHelper.getResultSet(jdbc.getResultSet()) ;  
       
      } catch (Exception e) {
       
       throw e;
      }

       

     int iTotalRecord = 0;
     if (rsHelper != null) iTotalRecord = rsHelper.size();
    %>
    <HTML>
    <HEAD>
        <META HTTP-EQUIV="content-type" CONTENT="text/html; charset=euc-kr">
        <TITLE>DBCONNECTION TEST PAGE &nbsp; </TITLE>
        <LINK REL="stylesheet" HREF="./../css/smcc.css" TYPE="text/css">
        <SCRIPT LANGUAGE="JavaScript">
     <!--
      
        document.forms[0].submit();
     
     -->
     </SCRIPT>
    </HEAD>
    <BODY>
    <b><%=poolName%></b>
    <form action="_dbTest2.jsp" method="post">
    <input type="hidden" name="pageName" value="thisPage">
    <table border=1>
    <%
       for(int i = 0; i < iTotalRecord ; i++){
      rsHelper.next();
        %>
        <tr>  
            <td><%=rsHelper.getString("DATA1")%></td> 
        </tR>
        <%
           
        }
    %>
    </table>
    </BODY>
    </HTML>



    http://eticket.qubi.com/tn/index.jsp?radJoFlg=N&radJobId=1&txtGoStart=%BC%AD%B4%EB%C0%FC&txtGoStartCode=0001&txtGoEnd=%BF%B5%B5%EE%C6%F7&txtGoEndCode=0020&txtAbrdDt=&selGoYear=2007&selGoMonth=01&selGoDay=19&txtGoYoil=%B1%DD&txtGoHour=131100&selGoHour=13&selGoTrain=05&selGoRoom1=1&selGoSeat=15&pIndex=601&txtGoPage=1&txtGoAbrdDt=20070119&selGoRoom=1&useSeatFlg=&useServiceFlg=&checkStnNm=Y&SeandYo=&cp_no=tn&type_no=5&txtPnrNo=&hidRsvChgNo=&hidStlFlg=&hidRsvTpCd=




    '======================================================================================
    ' Refresh 설정 - initpage(), cmbTime_Onchange()
    '======================================================================================
    SUB star_Refresh()
       
            If chkRefresh.checked  = true then
             window.clearInterval  mstrInterval
       mstrInterval = window.setInterval("imgRetriview_OnClick()", cmbTime.value * 1000)
         END IF
      
    End Sub



    Window.routeEvent(), Event.TYPE, 15장 Window.clearInterval() ― 주기적으로 실행되는 코드를 중지시킨다 사용 가능한 버전 클라이언트측 자바스크립트...


    setInterval 함수는 특정한 간격대로 함수를 실행되도록 하고..clearInterval() 이 불러질때까지 계속 실행된다는거..아니면 윈도우가 닫히던가..할때까지 계속 실행됩니다.


    clearInterval 함수는 setInterval 함수로 정해진 것을 취소하는 함수입니다.

     

    아래 예제 역시 w3school에서 제공해주는 예제입니다.

    <html>
    <body>
    <input type="text" id="clock" size="35" />
    <script language=javascript>
    var int=self.setInterval("clock()",50)
    function clock()
      {
      var t=new Date()
      document.getElementById("clock").value=t
      }
    </script>
    </form>
    <button onclick="int=window.clearInterval(int)">
    Stop interval</button>
    </body>
    </html>
     
    window
     
    ps -ef|grep resin
    ps -ef|grep resin
    ps -ef|grep resin
    ps -ef|grep resin
    ps -ef|grep resin
    Starting Resin on Fri, 19 Jan 2007 14:02:57 +0900 (KST)
    [14:03:01.971] Proxy Cache disk-size=1024M memory-size=8M
    [14:03:02.382] Server[] starting
    [14:03:02.382]
    [14:03:02.383] HP-UX B.11.11 PA_RISC2.0
    [14:03:02.383] Java 1.5.0.01 jinteg:06.06.05-04:39 PA2.0 (aCC_AP), 32, mixed mode, KSC5601, ko, Hewlett-Packard Company
    [14:03:02.384] resin.home = /UNMS/resin-pro-3.0.21
    [14:03:02.384] server.root = /UNMS/resin-pro-3.0.21
    [14:03:02.385]
    [14:03:02.406] Socket JNI library is not available.
    [14:03:02.406] Resin will still run but performance will be slower.
    [14:03:02.406] To compile the Socket JNI library on Unix, use ./configure; make; make install.
    [14:03:02.431] http listening to *:80
    [14:03:02.436] hmux listening to localhost:6802
    [14:03:02.758] Host[210.207.153.100] starting
    [14:03:07.798] WebApp[http://210.207.153.100] starting
    [14:03:07.930] Resin started in 7420ms
     
    refresh_time
    Posted by 1010
    반응형
    /** * * 세션 끈기지 않게 하고 싶으면 자바스크립트 주석과 밑에 있는 *

    window.setInterval(실행구문, 밀리초) 메서드에 대하여

    setInterval메서드는 window 객체의 메서드로 특정 실행구문을  밀리초마다 반복실행합니다.


    실행구문은  문자열로 입력하여야 합니다.

    아래의 소스는 5초후에 newWin 객체에 close()메서드를 실행하여 창을 닫는 기능을 구현했습니다.


    <html>
    <head>
     <SCRIPT LANGUAGE="JavaScript">
     <!--
      var setTime = 5 // 종료하고자하는 시간
      function openWin(){
       var newWin = window.open('팝업url','popup','top=100,left=100,width=350,height=490')
       newWin.setInterval("self.close()", setTime*1000)
       
      }
     //-->
     </SCRIPT>
    </head>
    <body>
    <center>
    <a href="java-script:openWin()">
    내용
    </a>
    </center>
    </body>

    Posted by 1010
    05.JSP2008. 8. 7. 15:26
    반응형

    JSP 요청 ->  해당 페이지의 서블릿이 잇냐? -n> 메모리에 로드됫냐? -n> 메모리로드 -> 응답생성


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

    1.선언부 : 선언하고자 할때

    <%! 

    // 변수 , 메소드  %>


    2.표현부 : 어떤 값을 출력하고자 할때 쓰는것

    <%=

    // 변수표현,메소드표현,특정객체,수식 %>


    예제

    <%!

    String s ="this is a test";

    int i =1000;

    Point2D.Double mypoint = new Point2D.Double(5.0,10.0);     // x,y 좌표 점객체생성

    %>

    <%= s %> <%= i %> <%= myPoint %>   // myPoint.toString의 효과임


    ===> 실행하면

    "this is a test"     "1000"   "myPoint.tiString의 값이 출력"


    2.스크립트릿 : 선언부와 표현식을 제외한 모든 자바코드

    <%

    //

    %>

    예제

    <%

    int i = 0;

    for(i=9;i<5;i++)

    {

    %>

    // 반복되는 내용

    <%

    }

    %>


    예제


    <%@ page import="java.awt.geom.Point2D" %>
    <%
    Point2D.Double p1 = new Point2D.Double(100.0, 100.0);
    Point2D.Double p2 = new Point2D.Double(150.0,100.0);
    double distance = p1.distance(p2);
    %>
    <html>
    <head></head>
    <body>
    <%= p1 %> 과 <%= p2 %> 사이의 거리 : <%= distance %>
    </body>
    </html>

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


    주석


    <!-- 내용주석 -->  : JSP가 생성하는 문서(클라이언트에 출력하는 문서)에 표현하는 주석

                                 소스보기를 통해 보임


    <%-- JSP 주석 -->  : 출력되는 문서에 표현 안함

                                   소스보기해서 안보임 : 이걸해야겟네

    <%

    //스크립터 언어 주석   : 서블릿으로 변환된 *.java 내부에 보여지는 언어주석

    /*

    */

    %>





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

    디렉티브란

    =>해당 JSP페이지와 관련된 정보를 나타낼때 쓰는 태그

    <%@ 디렉티브 속성1="값1" 속성2="값2" ... %>


    디렉티브 종류

    page - 해당페이지의 전체적인 특성을 나타냄

    include - 다른페이지를 포함하고자 할때 사용

    taglib - 기능확장을 위해 사용할 커스텀 태그의 경로를 지정할때 사용. 사용자태그를 만들어 놓고 그걸 불러와서 사용하고자 할때 사용..


    [page 디렉티브]

    language : 스크립트의 언어이름 : 기본값 java

    contextType : MIME타입,문자셋, : 기본값 "text/html"

    info : 문자열 : 별의미없다.

    import : 클래스, 패키지 이름

    session : boolean값 : 기본값 true

    *session이란 어떤 사이트에 로그인하면 그 사용자 정보가 서버에 보내져서 사용자 세션 객체가 생성된다. 그 이후 그 사이트의 어떤 페이지로 이동을 하든 사용자정보에 대한 세션이 계속 유지되는 상태이므로 접근이 가능하게 하는것..기본값은 true이다

    buffer :  버퍼의 크기 또는 false : 기본값 8KB

    autoflush : 버퍼가 꽉 차면 자동으로 flush해주냐  기본값 : ture

    isThreadSafe : 해당 페이지가 쓰레드에 안전하냐 안하냐? 기본값 :true (안전하게 하겟다는 의미)

    errorPage : 로컬 URL을 넣어줌 : 자신페이지에 에러가나면 어떤 페이지로 이동해서 에러를 보여주냐를 나타냄.

    iserrorPage : errorPage에서 에러가 난 URL은 iserrorPage가 true가 됨

    extends : 클래스 이름이 들어감 : 지금 작성하는 페이지가 어떤 클래스에서 상속을 받느냐..자동으로 JSP가 해줌.신경쓸필요없다.

    pageEncoding: ISO-8859-1 기본값  euc-kr 한국어 ecu-jp 일본어

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

    [include 디렉티브]

    다른페이지의 내용을 포함하고자 할때

    <%@ include file =" 포함할 페이지의 로컬 ㅕ끼" %>

    *액션태크의 인클루드는 인클루드 쪽서블릿으로 제어권이 넘어가서 다시 페이지로..제어권이 넘어와서 사용

    *디렉티브의 인클루드는 페이지 소스를 불러와서 서블릿으로 통채로 변환해서..사용


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

    [taglib 디렉티브]

    jsp페이지에서 사용할 태크 라이브러러리를 지정할때 사용

    사용자 정의 태그: xml...

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

    [기본객체]

    1.request.response,out  기본객체(컨테이너가 제공하는 객체:즉 바로 사용할수 있는개첵)


    *종류

    1.request : javax.servlet.SevletRequest 파라미터를 포함한 요청 데이터

    즉, A페이지에서 B페이지로 제어권이 넘어갈때 같이 따라가는 객체

    2.response : 요청ㅇ르 했으면 요청에 대한 응답을 생성해서 주는 객체


    3.out : 출력 스트림에 내용을 출력하는 객체


    4.page : 페이지 자기 자신에 대한 객체


    5 config 객체 : jsp 페이지의 servletconfig 객체



    6.session 객체: 사용자가 웹사이트에 접속했을때 그 사용자가 다른페이지로 이동해서 가지고 다니는 것이 세션객체

    기본값 : true


    7.application 객체: 전체 사이트에 관여된 객체. 서블릿 config객체로부터 구할수 있는 서블릿 컨텍스터(ex: 카운터 같은거)


    8.pageContext 객채: 현재 jsp 페이지의 페이지 컨텍스터


    9. exception 객체 : 에러페이지에서 사용되는 예외 객체


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

    [기본객체가 사용하는 메소드]

    void setAttribute(key,value) 키값이 key인 객체 value를 저장한다.

    Object getAttribute(key) 키값이 key인 객체를 읽어들인다.

    void removeAttribute(key) 키값이 Key인 객체를 삭제한다.

    Enumeration getAttributeNames() 관련된 모든 속성의 이름을 읽어들인다. (배열형태로 통채로 반환됨..이거를 enum으로 받아들인다는것)


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

    [request 기본객체]

    한번의 요청에 대해서 유효한 객체

    자신의 페이지로의 요청에 대한 url,헤더,쿠키 요청과 관련된 파라미터의 정보에 접근할수 있는 메소드 제공


    getParameterNames() 모든 파라미터의 이름을 구한다.

    getParameter(String name) 지정한 이름을 가진 파라미터중 첫번째ㅔ 파라미터의 값을 구한다.

    getParametetValues(String name) 지정한 파라미터의 모든값을 String[]으로 구한다.

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

    [요청헤더와 기타 유용한 정보를 얻을수 있는 메소드제공]

    getMethod() 요청방식이 get인지 post인지 구한다

    getRequestURI() 요청한 URI를 구한다.

    getProtocol() 요청한 프로토콜ㅇ르 구한다.

    getServletPath() 요청한 서블릿 경로를 구한다.

    getQueryString() 쿼리 스트링을 구한다. (브라우저 주소줄 뒤에 ?하고 변수값 =..이런식으로붙는거)

    getSErverName() 서버이름

    GetServerPort 서버포트

    getRemoteAddr 서버 주소

    getAthType 인증스키마

    getLocale 로커일

    getHeader(name) 헤더중에 nameㅇ속성값ㅇ르 구한다.



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

    response 기본객체

    jsp 페이지를 처리한 결과를 사용자에게 보낼때 사용되는 응답객체

    헤더,쿠키,응답과 관련된 정보를 설정할수 있는 메소드를 제공

    (쿠키가 사용자 컴터에 남아있으면 로그인안해도 서버에 그정보를 가지고 접속하면 찾아가므로..사용자에게 보여질수 있다.)

    응답을 통해서 전송된느 내용의 형식을 지정하는 메소드를 제공


    addCookie(Cookie) 사용자의 컴퓨터에 심을 쿠기정보를 저장하는 메소드

    setHeader(name.value) 이름이 anme인 헤더를 value값으로 지정

    addHeader(name.value) name 헤더를 value로 추가

    setContentType(String) MIME 타입을 지정하며, 추가로 인코딩 타입 지정

    getCharacterEncoding() 응답하는 내용의 캐릭터 인코딩을 구함

    encodeRedirectURL(url) sendRedirect() 메소드에서 사용할 URL을 인코딩

    encodeURL(name) 링크에서 사용할 URL을 인코딩

    sendRedirect(url) 지정한 URLㅇ르 사용하여 리다이렉트 응답을 보냄ㄴ

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

    out 기본객체

    요청받은 jsp 페이지가 브라우저에 결과를 보낼때 출력을 담당하는 객체

    javax.servlet.jsp.JspWriter 클래스의 인스턴스


    newLine() 줄구분자를 출력

    print(데이터 유형) 해당 데이터 유형의 문자열 형식을 출력

    println(데이터 유형) 해당 데이터 유형의 문자열 출력,줄구분자 출력

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

    page 기본객체

    해당 jsp페이지가 변환된 서블릿 그 자체를 나타내는 객체

    페이지의 정보를 나타내는 getServletInfo()메소드를 제공

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

    config 기본객체

    jsp페이지를 초기화 할때 사용되는 초기화 파라메털르 저장

    서블릿ㅇ르 변환할때 저장하는 서블릿의 이름은 jsp임

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

    session 기본객체

    java.servlet.http.HttpSession 인터페이스의 인스턴스

    getId() 클라이언트마다 주어지는 고유한 세션 ID, 서버측에서 고유한 세션ID를 클라이언트에게 부여.그걸 알고자할때 쓰는것 getId()

    getCreatingTime() 세션 생성시간을 long형으로 구한다. 세션이 접속해서 세션이 생성된 시간.세션의 기간을 정해줄때 필요함.

    getLastAccessedTime() 마지막 요청받은 시간을 초 단위로 구한다.

    getMaxInactiveInterval() 두 요청간의 세션 유지 최대시간 초단위로 구한다.

    setMaxInactiveInterval() 두 요청간의 세션유지 최대시간을 초단위로 설정한다.

    isNew() 세션ID를 생성해서 리턴한다.

    invalidate() 세션을 버리고 속성에 저장된 객체를 모두 풀어준다.

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

    application 기본객체

    해당 application 전체에 사용할수 있는 정보를 저장하는 객체

    해당 어플리케이션전체라는 의미는 하나의 사이트를 말함.  ex: 카운터

    서블릿 컨텍스트와 같은 개념이고 전체 사이트의 정보를 저장함.

    서블릿 컨텍스트를 하나의 사이트를 나타내는 이름정도로 이해하면 된다.

    javax.servlet.ServletContext의 인터페이스의 인스턴스

    getServerInfo()

    getMajorVersion()

    getMinorVersion(()

    거의 사용안함.

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

    pageContext 기본객체

    현재 jsp페이지의 콘텍스트를 나타냄(페이지를 대표하는 이름)

    다른 기본객체에 접근할수 있는 메소드를 제공

    <%

    HttpSession httpSession = pageContext.getSession();

    %>

    제어를 이동하거나 포함할수있는 메소드를 제공한다.

    forward(path)    include(path)

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

    exception 기본객체

    jsp 에서 발생하는 예외를 나타냄

    디렉티브의 isErrorPage 속성이 true인 페이지에서 접근가능

    <#@ page isErrorPage="true" %>

    java.lang.Throwable 클래스를 상송받은 클래스의 인스턴스

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


    @@ JSP 액션태크


    <jsp:useBean> <jsp:setProperty> <jsp:getProperty>

    <jsp:include> <jsp:forward> <jsp:plugin>


    1.빈관련 태그

    jsp에서 빈을 사용할수있도록 jsp는 tag를 제공함.이걸 이용해라

    <jsp:useBean> jsp 페이지에서 자바의 빈ㅇ르 사용하고자 할때 사용

    <jsp:setProperty> 사용할려는 빈의 변수값 메소드값(프로퍼티) 설정할때 사용

    <jsp:getProperty> 빈에 정의된 프라퍼티의 값을 불러올때 사용

    <jsp:include>  다른 문서의 출력결과를 현재 페이지에 포함하고자 할때 사용(디렉티브와 차이: 제어권이 넘어감)

    ex: <jsp:include page ="로컬 url" flush="true|false" />

    include 디렉티브와는 달리 포함되는 페이지도 또하나의 페이지로 해석되어 존재

    포함하는 페이지와 포함되는 페이지는 서로다른 pageContext객체를 가짐, 따로따로 서블릿이 생성이 되니까..당연한 소리지..

    두페이지는 서로다른 request객체를 가지지만 서로 같은값을 가짐

    <jsp:forward>

    ex <jsp:forward page="로컬url' />

    현재 페이지에서 다른 페이지로 제어권을 이동하고자 할때 사용

    서로 다른 pageContext 객체를 사용

    서로 다른 request를 기본객체를 할당받지만 같은 값을 가짐

    <jsp:param> 태그를 사용하여 새로운 파라미터를 넘겨줄수 있음

    제어권이 이동할때 이동되는 페이지로 넘겨줄수 있음.

    <jsp:plugin> 자바플러그인을 사용하여 자바 애플릿을 실행하고자 할때 사용

    필요한 속성은

    type

    code

    codebase

    height

    width

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

    자바빈

    jsp에서 class의 메소드를 사용하고 싶을때

    이 class를 <jsp:useBean id="  "  의 id로 등록하고

    jsp문서내에서 이 id."클래스의 메소드" 로 사용한다.

    이때 메소드도 일일이 다 등록해야하는데.jsp문서내에서 이때 사용하는게

    <jsp:setProperty

    가져오는게 <jsp:getProperty 이다.


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


    @빈의 정의
    특정 기능을 수행하도록 미리 정의되어진 클래스
    @빈의 특징
    모듈화되어 있고 재사용 가능
    내부의 데이터와 로직이 캡슐화 되어있음
    사용법에 대한 인터페이스만 알면 누구나 사용가능
    프로그램 개발시 표준화된 인터페이스를 통해 접근하므로 현저한 시간 단축
    @프라퍼티
    정의-빈이 가지고 있는 데이터의 값을 설정하거나 읽어 들이는 기능을 수행한느 자바빈의 속성
    종류-Setter: 빈의 속성값ㅇ르 설정하기 위한 메소드
    Getter : 빈의 속성값을 읽어들이기위 한 메소드
    @규약: 시작은 소문자, 단어가 바뀔때마다 대문자
    외부에서 접근가능해야하느모 접근속성은 public
    get또는 set다음에 데이터 멤버의 일므이 와야함(클래스가 가지고있는 변수)
    특정 객체를 프로퍼티의인수로전달가능
    ====================================
    빈관련 jsp태그
    <jsp:useBean> 페이지내에서 자바비ㅏㄴ을 사용할수있도록 설정
    사용가능한 속성 : id 자바식별자(객체명)
    scope : 만들어진 객체를 어디에서 사용할꺼냐..page / request. seesion / application

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

    <jsp:setProperty> 태그

    <jsp:setProperty name="beanName" property="propertyName" value="propertyValue" />

    ex:setX 메소드라면 여기서 X라는 이름을 위의 property에 적어주면 되는거다.

    해당 속성값에 대한setProperty메소드를 호출한다.

    propertyValue값을 해당 속성에 설정한다.

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

    <jsp:getProperty>

    <jsp:getProperty name="beanName" property="propertyName" />

    해당 속성값에 대한 getProperyt메소드를 호출한다.

    해당 속성값을 호출한다. 즉 변수의 값을 리턴하는 return문이 들어있겟다.

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

    자바에서는 엔터프라이즈빈이라는걸 제공해주니 이걸 사용법만 알면 가져다 쓸수있다..함 찾아봐보장..

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

    [빈 컴포넌트 사용하기]

    빈 컴포넌트의 영역

    스크립트와 빈태그의 혼합

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

    빈 컴포넌트의 영역

    -page 영역: 페이지의 요청과 동시에 생성.소멸과 동시에 빈 객체도 소멸

     scope영역을 생략할경우에도 이값으로 설정

    -request 영역

    브라우저의 한번 요청이 완료될때가지 존재

    하나의 jsp페이지로 구성된 경우 page영역과 request영역은 동일한 효과를 지님

    포함되는 페이지에서 빈 객체를 사용하기 위해서는 반드시 빈객체가 먼저 생성되어 있어야 함

    -sesssion영역

    세션이 살아있는한 빈 컴포넌트도 살아있다는 소리

    사용자의 중요한 정보는 DB또는 다른 저장장치를 이용해서 하는것이 일반적. DB에 사용자정보가 있다가 빈객체에 이 정보넣고. 세션이 살아있는동안 사용하다가..세션이 죽으면 빈객체도 없어지므로 사용자 정보도 DB에만남게 되는것임

    -application영역(하나의 사이트를 말함)

    jsp 컴테이너를 종료하기 전까지는 서버에 존재함(톰캣.레진..)

    서버의 모든 사용자에게 공통적으로 사용되므로 사용자 개인 정보는 sessioh영역에 저장하는것이 일반적

    application영역에는 conter 같은것을 넣어라

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

    스크립트와 빈태그의 혼합

    1.빈캐그만을 이용한 경우

    <jsp:useBean id="test" class="passday.bean.TestBean" />

    <jsp:getProperty name="test" property="testPrpperty" />

    2.스크립트를 이용한 경우

    <jsp:useBean id="test" class="passday.bean.TestBean" />

    <%= test.gettestProperty() %>



    Posted by 1010
    05.JSP2008. 8. 7. 15:24
    반응형

    1. 주석달기

        <!-- -->

        <%-- --%>


    2. 선언태그

        <%! %>


    3. 표현식

        <%= %>


    4. 지시어

        <%@ include file=“파일의 위치(URL)" %>

        page 지시어

        <%@ page [language="java"]

                [extends="pagckage.class"]                   (java.util.Data)

                [import="{package.class | package.*},..."]     (java.util.*)

                [session="true | false"]

                [buffer = "none|8kb|sizekb"]

                [autoFlush="true|fase]

                [isThreadSafe="true|false]

                [info="text"]

                [errorPage="relativeURL"]

                [contentType="mimeType[;charset=characterset]"|

                                       "text/html;charset=euc-kr"]

                [isErrorPage="true|false"]

        %>


    5.Taglib 지시어

        <%@ taglib uri="URIToTagLibary" prefix="tagPrefix" %>


    6. Request 객체의 메소드

        javax.servlet.http.HttpServletRequest

    getAttribute(String name)

    속성값 반환

    getAttributeNames()

    request 객체에 있는 모든 속성값의 배열을 반환

    getCharacterEncoding()

    post 형식으로 전송된 자료의 문자인코딩방식을 반환

    getContentType()

    request의 mime타임의 밧을 문자열로 반환

    getInputStream()

    Post형식으로 전송된 자료의 inputStream으로 반환

    getLocale()

    request의 우선적 지역정보를 반환

    getLocales()

    접속할수 있는 모든 클라이너트 지역정보를 배열로반환

    getParameter(String name)

    html문서의 폼으로 넘어온 정보의 값을 반환

    public String getParameter(String name)

    getParameterNames()

    html문서의 폼으로 넘어온 정보로부터 폼들의 이름을 배열로 반환

    public Enumeration getParameterNames()

    getContentLength()

    전송된 자료의 길이를 반환

    getParameterValues(String name)

    html문서의 폼으로 넘어온 모든 정보의 값을 반환

    public String[] getParamterValues(String name)

    getProtocol()

    사용되는 프로토콜의 종류를 문자열로 반환

    getReader()

    post 형식으로 전송된 자료를 읽을 Reader를 반환

    getRemoteAdd()

    접속한 클라이언트의 ip 어드레스값을 문자열로 반환

    getRemoteHost()

    접속한 클라이언트의 도메인이름을 문자열로 반환

    getServerName()

    request를 처리하는 서버의 이름을 문자열로 반환

    getServerPort()

    request를 처리하는 소버의 포트번호를 정수형으로 반환

    isSecure()

    보안모드가 적용되는 클라이언트와 접속되어있는지 여부를 논리값반환

    getAuthType()

    인증형에 대한 값을 문자열로 반환

    getContextPath()

    어플리케이션 디렉토리의 url을 문자열로 반환

    getCookies()

    클라이언트부터 전송된 쿠키에 대한 정보를 반환

    getMethod()

    get,post인지를 문자열로 반환

    public String getMethod()

    getQueryString()

    request의 QueryString값을 문자열로 반환

    public String getQueryString()

    getRequestedSession()

    세션아이디의 값을 문자열로 반환

    getProtocol()

    사용되는 프로토콜의 종류를 문자열로 반환

    getSession()

    현재 세션 객체를 반환

    public HttpSession getSession()



    7. Response 객체의 메소드

    javax.servlet.http.HttpServletResponse

    flushBuffer()

    버퍼에 저장되는 있는 내용을 클라이언트에 전송

    getBufferSize()

    출력 버퍼의 크기를 정수 자료형으로 반환

    getCharacterEncoding()

    Response시 사용하는 문자 인코딩 방법으로 문자열 자료형으로 반환

    getLocale()

    지역정보를 java.util.Local 클래스의 객체형으로 반환

    getOutputStream()

    클라이언트에 자료를 전송하는 출력 스트립의 객체를 반환

    isCommitted()

    클라이언트에 어떤 내용으로 버퍼로부터 전송했으면 true로 반환

    setBufferSize(int size)

    출력 버퍼의 크기를 설정

    setContentType(String type)

    응답시 사용할 Content Type을 설정

    setLocale(Locale locale)

    지역정보를 임의로 설정함

    addCookie(Cookie cookie)

    쿨라이언트에게 새로운 쿠키정보를 전송함

    sendError(int sc)

    상태 코드에 따른 Http 에러 페이지를 클라이언트에게 전송함

    sendRedirect(String location)

    현재 페이지에서 문서를 다른 페이지로 이동시킴


    8. Session 객체의 메소드


    javax.servlet.http.HttpSession

    getAttribute(String name)

    Session에 저장된있는 속성값중 name에 해당값을

    Object의 객체형으로 반환

    getAttributeName()

    Session객체에 값을 저장하고 있는 각각의 속성의 이름 모두를

    Enumeration객체형으로 반환

    getCreatonTime()

    클라이언트가 접속하여 생성된 Session의 생성 시간을 long형으로 반환

    public long getCreationTime()

    getId()

    클라이언트에 할당된 Session의 ID값을 문자열 형으로 반환

    public String getId()

    getLastAccessedTime()

    현재의 세션이 jsp 페이지에 접근한 최근 접속시간을 long형으로 반환

    public long getLastAccessedTime()

    getMaxInactiveInterval()

    사용자가 세션을 부여받은후 아무것도 하지 않을 경우 자동적으로 세션을

    종료하도록 설정된 시간의 값을 정수형으로 반환

    public int getMaxInactiveInterval()

    invalidate()

    현재 실행중인 세션을 무효화(종료)

    public void invalidate()

    isNew()

    현재 실행중인 세션이 새로운것인지를 대한 여부를 논리값을 반환

    public boolean isNew()

    removeAttribute(String name)

    현재 세션이 저장되어있는 속성값들중 지정한 속성의 값을 지움

    setAttribute(String name,Object value)

    현재 세션이 새로운 이름의 속성을 만들고 그 속성에 값을 할당함

    setMaxInactiveInterval(int seconds)

    세션을 할당받고 아무런 액션이 없을 경우 세션이 자동으로 종료하는

    시간을 설정함

    public void setMaxInactiveInterval(int seconds)

    9. Out 객체


    javax.servlet.jsp.JspWriter


    10.  Application객체

    javax.servlet.ServletContext

    getAttribute(String name)

    Application 속성값중에 name에 해당하는 값을 Object의 객체형으로 반환

    getAttributeNames()

    Application 저장되어 있는 속성명들을 열거 자료형으로 반환

    getInitParameter(String name)

    Application이 초기화될때 설정된 파라미터 값을 가져옴

    getInitParameterNames()

    Application이 초기화될때 설정된 파라미터의 이름을 열거 자료형으로 반환

    getMimeType(String url)

    지정한 위치에있는 파일의 MimeType을  문자열형으로 반환함

    getServerInfo()

    서버의 정보를 문자열형으로 반환

    public String getServerInfo()

    removeAttribute()

    Application의 속성을 제거함

    setAttribute(String name,Object value)

    Application의 속성을 설정함



    11. PageContext 객체

    javax.servlet.jsp.PageContext

    findAttribute()

    모든 Scope내에서 속성을 찾아옴

    getException()

    예외처리 객체를 가져옴

    public abstract Exception getException()

    getOut()

    Out객체를 가져옴

    public abstract JspWriter getOut()

    getPage()

    Page 객체를 가져옴

    public abstract Object getPage()

    getRequest()

    Request 객체를 가져옴

    public abstract ServletRequest getRequest()

    getResponse()

    Response 객체를 가져옴

    public abstract ServletResponse getResponse()

    getServletConfig()

    Config 객체를 가져옴

    public abstract ServletConfig getServletConfig()

    getServletContext()

    Application 객체를 가져옴

    public abstract ServletContext getServletContext()

    getSession()

    Session 개게를 가져옴

    public abstract HttpSession getSession()


    12. 예외처리


    1)페이지 예외처리

       

    <%@ page errorPage="error.jsp" %>

    <%@ page isErrorPage="true" %>

    <%=exception.toString() %>

    try {}catch(Exception e){}finally{}


    13. 기타


    FileReader클래스 

    <%@ page import="java.io.*" errorPage="error.jsp" contentType="text/html;charset=euc-kr" %>

    read()

    문자열을 하나씩 읽어옴/끝에 도달 -1반환

    read(char[] cbuf,int off, int len)

    문자를 지정한 위치에서 지정한 길이만큼 읽어옴

    read(char[] cbuf)

    문자를 한꺼번에 지정한 버펀의 크기만큼 읽어옴


    FileWriter클래스 

    write(int c)

    Ascii코드형식으로 되어있는 문자하나를 파일에 써 넣음

    write(char[] cbuf,int off,int len)

    버퍼에 저장되어 있는 문자 자료를 지정한 위치에 지정한 길이 만큼씀

    write(char[] cbuf)

    버퍼에 저장되어있는 자료를 한꺼번에 파일에 씀

    write(String str)

    String의 객체에 저장되어있는 자료를 파일에 씀

    write(String str,int off,int len)

    String의 객체에 저장되어있는 자료를 지정한 위치에 지정한 길이만큼 씀

    FileWriter testWrite = new FileWriter();

    testWriter.close() //닫아 주어야 함


    ▶문자열->숫자형

    int num;

    num = Integer.parseInt("12345",진수);

    ▶숫자형->문자열

    String num;

    num = Integer.toString(12345);


    14. Driver정보

    getDriver

    시스템에 설치된 드라이브정보를 열거형으로 반환



    15. Driver로딩

    Class.forName("드라이브 이름“)

    ODBC -Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

    MSsql -Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

    Mysql - Class.forName("org.gjt.mm.mysql.Driver")

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

    16. 데이터베이스 연결명령어 작성

    ODBC - "jdbc:odbc:database_name"

    MSsql - "jdbc:microsoft:sqlserver://ip_address:1433;DataBaseName=pubs";

    Mysql - "jdbc:mysql://ip_address:3306/database_name"

    Oracle - "jdbc:oracle:thin:@ip_address:1521:ORCL"


    getConnection(String url,String user,String password)

    데이터베이스 연결하고 그 연결객체를 반환

    getConnection(String url)

    데이터베이스를 연결하고 그 연결객체를 반환


    17. Jsp의 Action 태그

    ▶<jsp:useBean>

    <jsp:userBean id="beanInstanceName" scope="page | requst | session | application"

    {

       class="package.class" |

       type="package.class" |

       class="package.class" type="package.class" |

       beanName="{package.class | <%=expression %>}"

       type="package.class"

    }

       { /> | >other elements </jsp:useBean>}

    ▶<jsp:setProperty>

    <jsp:setProperty name="beanInstanceName"

       {

         property="*" |

         property="propertyName"[param="parameterName"]|

         property="propertyName" value="{string | <%=expression %>}"

       }

      />

    ▶<jsp:getProperty>

    <jsp:getProperty name="beanInstanceName" property="propertyName" />


    ▶<jsp:include>

    <jsp:include page="{relativeURL | <%=expression%>}" flush="true" />

    or

    <jsp:include page="{relativeURL | <%=expression%>}" flush="true">

      <jsp:param name="parameterName" value="{parameterValue | <%=expression%>}" />

    </jsp:include>

    ▶<jsp:forward>

    <jsp:forward page={"relativeURL" | "<%=expression %>"} />

    or

    <jsp:forward page={"relativeURL" | "<%=expression %>"}>

    <jsp:param name="parameterName" value="{parameterValue | <%=expression %>}" />

    </jsp:forward>

    response.sendRedirect("/test/test.jsp?usrname=jssdd");

    ▶<jsp:plugin>

    <jsp:plugin

         type="bean | applet"

          code="classFileName"

          codebase="classFileDirectoryName"

          [name="instanceName"]

          [archive="URIToArchive,..."]

          [align="bottom | top | middle | left | right "]

          [height="displayPixels"]

          [width="displayPixels"]

          [hspace="leftRightPixels"]

          [vspace="topBottomPixels"]

          [jreversion="JREVersionNumber | 1.1"]

          [nspluginurl="URLToPlugin"]

          [iepluginurl="URLToPlugin"]

          [<jsp:params>

             [<jsp:param name="parameterName" value="{parameterValue | <%=expression %>}" /> ]+

          </jsp:params> ]

          [<jsp:fallback>text message for user </jsp:fallback>]

    </jsp:plugin>



    18. Cookie의 클래스에서 사용할수 있는 메소드


    Cookie(String name,String value)

    Cookie 클래스의 생성자 매개변수 name,value를 이용해 해당하는

    이름과 값을 가진 쿠키를 생성

    getDomain()

    쿠키의 도메인을 반환

    public String getDomain()

    setDomain(String _domain)

    쿠키의 도메인을 설정

    public void setDomain(String domain)

    getMaxAge()

    쿠키의 수명을 반환

    public int getMaxAge()

    setMaxAge(int _expir)

    쿠키의 수명을 설정

    public void setMaxAge(int seconds)

    getName

    쿠키의 이름을 반환

    public String getName()

    getPath()

    쿠키의 유효한 URL의 일부를 반환

    public String getPath()

    setPath(String _path)

    쿠키의 경로를 설정함

    public void setPath(String path)

    getSecure()

    쿠키의 보안 채널을 통해 전달되는지의 여부를 반환

    public boolean getSecure()

    setSecure(boolean _flag)

    쿠키를 보안 채널을 통해 전달할 것인지의 여부를 반환

    public void setSecure(boolean b)

    getValue()

    쿠키의 값을 반환

    public String getValue()

    setValue(String value)

    쿠키의 값을 설정함

    public void setValue(String value)

    getVersion()

    쿠키의 버전을 반환, 기본값 0

    public int getVersion()

    setVersion(int ver)

    쿠키의 버전을 설정, 0 이나 1 설정

    public void setVersion(int version)

    Cookie myCookie = new Cookie("userName", "박선영“);
    myCookie.setMaxAge(60*60*24); //하루


    19. Exception 객체

    getMessage()

    에러 메시지 리턴

    public String getMessage()

    printStackTrace()

    에러 출력 스트림으로 스택 틀레이스 정보 출력

    public void printStackTrace()

    printStackTrace(PrintWriter out)

    스택 트레이스 정보를 파라미터로 지정 객체 out으로 출력

    public void printStackTrace(PrintWriter out)

    printStackTrace(PrintStream out)

    스택 트레이스 정보를 파라미터로 지정 객체 out으로 출력

    public void printStackTrace(PrintStream out)

    [출처] jsp 함수 |작성자 제로스엘

    Posted by 1010
    98..Etc/Etc...2008. 8. 7. 15:20
    반응형

    <ul>, <li> 를 사용해서 좌측메뉴 만들기


    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="Statz">
    <META NAME="Keywords" CONTENT="CSS연습,웹표준2.0,기본메뉴 만들기">
    <META NAME="Description" CONTENT="">
    <style type="text/css">
    #menu{
     list-style: none;
     padding-left: 10px;
     margin: 0;
     font-size: 12px;
     /* background-color: #EFEFEF */
    }
    #menu li{
     background: url(./images/arrow_01.gif) no-repeat 0 50%;
     padding-left: 17px; /* 아이콘만큼 떼고 글자위치*/
    }
    </style>
    </HEAD>

    <BODY>
    <ul id="menu">
    <li>회사소개</li>
    <li>연혁/조직도</li>
    <li>인증현황</li>
    <li>찾아오시는 길</li>
    </ul>
    </BODY>
    </HTML>

    Posted by 1010
    02.Oracle/DataBase2008. 8. 7. 15:16
    반응형

    All_all_tables      : user가 access할수있는 모든 Table
    All_catalog        : user가 access할수있는 모든 Table, Views, synonyms, sequence
    All_clusters        : user가 access할수있는 모든 clusters
    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 : 블록점유에 대한 통계. 통계가 사용가능한 시간에만 갱신된다.

     

    출처 : http://www.oracleclub.com

    Posted by 1010
    98..Etc/Etc...2008. 8. 7. 15:15
    반응형

    JSP Tips http://www.okjsp.pe.kr/seq/77154


    웹표준 준수사항 몇가지

    조건 :  HTML 4.01 Transitional

    1) 자바스크립트 지시자나 스타일시트 지시자에 타입정보가 꼭 필요하다.
    <script language="JavaScript" type="text/javascript">
    <style type="text/css">

    2) img,  map 태그등에 모두 alt 속성이 필요하다.

    3) td는 background 속성을 지원하지 않으므로 스타일 시트형태로 표현한다.
    <td style="background-image:url('/img/img.gif');"></td>

    4) table은 height 속성을 지원하지 않는다.
    <table height="100%"> <-- 에러

    5) tr은 colspan, height 속성을 지원하지 않는다.
    <tr height="30" colspan="2"> <-- 에러

    6) body태그는 2개이상있으면 안된다.
    body에 onLoad때문이라면 body태그대신
    <script language="JavaScript" type="text/javascript">
    window.onload = funcName(arg1,arg2);
    </script>
    형식으로 한다.

    7) 스타일시트 font-family 에 한글 parsing이 안되는 문제가 있다
    font-family:돋움 의경우 font-family:Dotum 으로 변경한다.

    8) 스타일시트 선언은 <head> 안에서 해줘야한다. <body> 안에서 선언하면 에러 -_-
    <head>
    <link href="./style.css" rel=stylesheet type='text/css'>
    </head>

    9) html 안에 bgcolor나 width,height값을 %단위로 속성 삽입시 코텐션빠지면 에러
    <td height="1" colspan="2" bgcolor="#ffffff"></td>
    <table width="100%">
    위와같이 "" 또는 '' 로 감싸줘야한다.

    10) form 태그가 table 안에 있으면 에러 table을 감싸고 있어야한다. table 안에 있으면 에러
    <form>
    <table><tr><td></td></tr></table>
    </form>
    또한 form태그안에는 name속성과 action 속성이 모두 존재해야한다.
    <map 태그역시 table 바깥에 위치해야함

    11) 이미지서브밋에 width, height, border 속성을 쓰면 에러.
    <input type="image" src="images/button_search.gif" align="bottom">
    위와같이 align 속성은 쓸수 있음

    13) url 쿼리스트링의 경우 & 기호는 다음과같이 인코드해주어야한다.
    & + amp; (html 에디터에서는 안보이네요 -_-)

    & a m p ; (띄어쓰기 붙혀서..)
    <a href="/dir/file.php?id=111& a m p ;pwd=222">xxxxxxxx</a>

    14) img태그나 기타 태그 속성중에 align="absmiddle" 는 비표준 middle 로 수정

    15) 스타일을 표현할때 width, height 값에 px 안붙이면 에러, 색상코드에 # 안붙이면 에러
    style="width:10px;height:20px;#FFFFFF;"

    16) hidden 태그경우 <table 안에 들어있으면 에러.. 즉 form 안에 table 밖에 위치
    즉 form태그 안에 table태그 밖에 위치해야함

    17) body태그에 leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" 부분 있으면 에러
    style="margin:0px;" 형태로 바꿔준다.

    18) 자바스크립트 변수에 html 닫힘태그 쓸때는 escape문자로 표현한다.
    <a href='url'>url<\/a>

    19) 플래쉬 삽입
    <object type="application/x-shockwave-flash" data="<?=$IndexImg?>/index_main.swf" width="260" height="487">
        <param name="movie" value="<?=$IndexImg?>/index_main.swf">
        <param name="quality" value="high">
    </object>
    플래쉬 태그에 classid나 codebase를 쓰면 에러. 다만 js형태로 밖으로 빼놓으면 에러 못찾음 -_-;;

    20) 주석에 + 기호달면 에러
    <!-- ----------- + ---------------- -->
    위의 형태 에러남..

    21) DocType를 페이지 맨상단(html태그 밖)에 정의해야함
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

    22) TEXT-DECORATION 의 스타일 표현형태
    TEXT-DECORATION: none
    TEXT-DECORATION: yes(x) -> TEXT-DECORATION: underline

    Posted by 1010
    98..Etc/Etc...2008. 8. 7. 15:14
    반응형

    1. window.status

    window.status 코드가 인터넷 영역에서 실행되지 않습니다

    function test() {

        window.status = 'Hi!';

    }

    단 로컬에서는 됩니다 즉 로컬에 저장된 html을 실행하면 window.status가 먹지만

    인터넷에 있는 window.status는 실행되지 않네요

    개인적으로 js 디버깅시 자주 사용하곤 했는데 아쉬운 부분입니다 ㅠ.ㅠ



    2. <base>태그

    HTML3.2 스펙에 따라 <base>태그는 반드시 <head></head>에 위치해야 합니다

    그렇지 않으면 인식하지 않는다네요

    예전엔 base태그를 간간히 썼지만 요즘은 frame 을 잘 사용하지 않아서인지 거의 사용하진 않죠



    3. window.close()

    window.close()시 나타나는 프롬프트를 회피하기 위해 window.opener 를 사용했었는데

    더이상 아래 코드는 먹지 않고 창을 닫겠냐는 프롬프트가 뜨게 됩니다


    window.opener=top;

    window.close();

    or

    self.opener = self;
    window.close();



    4. _search

    _search를 통해 검색창을 더이상 열지 못합니다

    <a href="">Test Sidebar</a>




    5. window.prompt()

    디폴트로 block 됩니다


     



    6. 제한되는 메쏘드들


    execCommand

    clipboardData.getData()

    clipboardData.setData()

    clipboardData.clearData()

    클립보드 저장, 및 클립보드 데이터 가져오기등의 메쏘드들이 제한됩니다

    해보니 보안경고창이 뜨더군요

    MS에서는 clipboardData 객체 사용을 권고하지 않습니다



    7. Modal 및 Modeless Dialog 크기가 변경!


     

    한마디로 크기가 커집니다 -0- (짜증)

    사이즈를 지정하면 content 크기를 의미합니다



    8. 새창으로 뜰때 주소줄 보임

    더이상 새창을 window.open 의 property 특성으로 조절할 수 없습니다

    무조건 주소창이 나타납니다 아주~ 짜증 이빠십니다 ㅠ.ㅠ


     



    9. window.resizeTo()

    window.resiztTo 함수는 에러가 발생하거나 차단됩니다

    function changeSize(){
        window.resizeTo(1024,768);
    }

    *사진 보기 팝업 창등 팝업창 내에서의 resizeTo() 함수는 정상적으로 실행됩니다.

    (ex: <script>resizeTo(550,600);</script>)

     

    그리고 페이지에서 iframe을 이용해 게시판 삽입등을 했을 경우 가끔 resizeTo함수로 iframe의 세로 높이를

    조절하는 소스들을 본적이 있는데, 이때는 스타일로 iframe의 id.style.height로 조절하면 됩니다.


    10. HTTP, HTTPS 혼합된 인터넷 영역에서 보안 경고가 발생합니다



    11. SELECT가 windowed element로 개선

    이전까지는 SELECT Element가 Windowsed Element였기 때문에 다른 element와 달리 별도의 MSHTML pane에서 rendering되었습니다

    즉 SELECT가 그림과 같이 layer들을 다 먹어버렸었는데, 이젠 그렇지 않다는거죠

    요거 하나는 좋아졌네요 -0-



    12. 스크립트 차단

    6.0 까지는 아래 코드가 실행되어 보안에 매우 취약했었습니다 (XSS)

     <img src="javascrip t:alert('a')">

    7.0 부터는 아예 실해이 안되네요

    FF 2.0 도 실행이 안되는군요 ^^



    13. CSS

    100%는 아니지만 CSS2.1 표준 구현 강화가 되었습니다

    또한 <a> 태그에서만 가능했던 :hover나 background-attachment: 가 모든 태그에서 사용가능해 졌습니다



    11월 18일에 한글판 IE7이 배포되며 3주후에는 자동 업데이트를 통해 IE7가 설치가 된다고 합니다

    슬슬 준비하셔야 할겁니다


    위에 열거한 사항들은 대부분 인터넷 옵션의 "보안"항목에서 수정할 수 있지만

    중요한점은 이 사항들이 기본빵이라는점이겠죠 -0-


    이밖에도 알려진 버그로는 "신뢰할수 있는 사이트"에 추가를 했는데도, 보안창이 뜬다든가,

    flash에서 _blank로 새창을 열면 자기 자신창에서 열린다든가 하는 버그가 있다고 합니다


    내년에 왼도 비스타가 나오면 한번더 보안관련된 사항들이 많이 나올듯 합니다.

    Posted by 1010
    98..Etc/Etc...2008. 8. 7. 15:12
    반응형

    사용방법 예)

    <tr>

       <td>아이디 : <input type=text name=name tabindex=1></td>

    </tr>

    <tr>

       <td>패스워드 : <input type=password name=passwd tabindex=2></td>

    </tr>


    <script language="javascript">

    //입력한 tabIndex로 객체리턴
    function GetObjectByTabIndex(index)
    {
    for (i = 0; i < document.forms[0].length; i++)
    {
      tmp = document.forms[0].elements[i];
      if (tmp.tabIndex == index)
      {
       return tmp;
      }
    }
    return null;
    }



    //엔터키 입력시 다음탭인덱스로 포커스이동

    function KeyDownFocus(obj)
    {  
    if (event.keyCode == 13) {      
      tmp = GetObjectByTabIndex(obj.tabIndex+1);    
      if (tmp == null) tmp = GetObjectByTabIndex(1);    
      if (tmp != null) tmp.focus();
    }    
    }  
    </script>



    accesskey와 tabindex 사용하기

    #1 accesskey : alt + value 기능 (단축키)

    아마 각종 메신져 쓰는 사람들에게 제일 익숙한 기능중의 하나가 Alt - S 일거라고 생각합니다. 

    Send 기능을 하는 키조합인데요, IE에서는 accesskey="s" 라고 하면 되거든요. 

    즉 글쓰기나 코멘트의 submit 버튼에다가 다음과 같이만 하면 됩니다

    ex) accesskey = "s" 또는 accesskey = "d"

    <input type=submit value="글을 올립니다" accesskey="s"> 

    <input type="text" name="txtName" value="" accesskey="d"> 

     

     

    #2 tabindex : TAB 키를 통하여 이동순서 지정

     

    tabindex  는 html code 에서 폼 요소를 이동할때 키보드 탭(TAB)을 눌렀을때의 이동 순서를 정하는 사용되는 속성으로 인터넷 익스플로서 4이상에서 사용된다.

    사용할 수 있는 html tag는 예로 a, area, button, input, object, select, textarea.. etc

     

    tabindex 값은 1부터 시작 -1 일경우 포커스가 위치하지 않음


    ex) tablindex = "1"

    <input tabindex="1" name="_a" type="text" size="5" style="" value="0">

    <input tabindex="3" name="_c" type="text" size="5" style="" value="0">

    <input tabindex="2" name="_b" type="text" size="5" style="" value="0">

     : _a에서 탭키를 눌렀을때 다음 tabindex로 이동. 그러므로 _b로 이동한다.

     


    onkeyup


    http://www.mensakorea.org/bbs/data/quiz/PlanarityExperimental.swf

    Posted by 1010
    02.Oracle/DataBase2008. 8. 6. 17:07
    반응형

    # vi /etc/rc.d/rc.local


    su - oracle -c /oracle/9i/bin/"dbstart"

    su - oracle -c /oracle/9i/bin/"lsnrctl start"


    추가 해준다


    # vi /etc/oratab

    DB02:/oracle/9i:Y


    추가


    # reboot


    $ lsnrctl status (리스너 확인)

    SQL> select status from v$instance; (DB 확인)

    Posted by 1010
    98..Etc/Etc...2008. 8. 6. 10:23
    반응형

    리눅스
    cpio 대용량 파일 압축
    압축 해제시

    zcat 명령 파이프 압축된 파일을 미리 볼수 있으

    zcat Linux9i_Disk1.cpio.gz | cpio -idmv


    VNC 설정

    bash # vi /etc/sysconfig/vncservers

    -기본적으로 아래 2줄 은 주석 처리
    #  VNCSERVERS="2:myusername"
    #  VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -nohttpd -localhost"

    -아래 2줄을 마지막 줄에 입력
    VNCSERVERS="1:root"
    VNCSERVERARGS[0]="-geometry 1024x768 -nolisten tcp -nohttpd -localhost"

    bash  #  cd ~ //  홈디렉토리 이동
    bash  #  vncpasswd  //VNC 접속시 사용할 비밀번호 입력
    bash  #  /etc/init.d/vncserver restart   //VNC 데몬을 재시작
    bash  #  cd .vnc
    bash  #  vi xstartup

    - 아래의 2줄의 주석을 풀어준다

    unset SESSION_MANAGER
    exec  /etc/X11/xinit/xinitrc
    bash  #  /etc/init.d/vncserver restart   //VNC 데몬을 다시 한번 재 시작

    realvnc  를 실행 후 IP : 5901 를 입력한다.

    Posted by 1010