function imgeCheck(obj,x,y)
 {
  var value = obj.value;
     var imgInfo = new Image();
     imgInfo.src = value;
  var imgWidth = imgInfo.width;
  var imgHeight = imgInfo.height;
  
  if((imgWidth != x && imgHeight !=y )){        
   return true;
  }
 
  return false; 
 }


copy comm.jar                   \jdk1.3\jre\lib\ext
copy win32com.dll               \jdk1.3\bin
copy javax.comm.properties      \jdk1.3\jre\lib

(1) ^ (caret)
라인의 처음이나 문자열의 처음을 표시

예 : ^aa (문자열의 처음에 aa를 포함하면 참, 그렇지 않으면 거짓)

(2) $ (dollar)
라인의 끝이나 문자열의 끝을 표시

예 : aaa$ (문자열의 끝에 aaa를 포함하면 참, 그렇지 않으면 거짓)

(3) . (period)
임의의 한 문자를 표시

예 : ^a.c (문자열의 처음에 abc, adc, aZc 등은 참, aa 는 거짓)
예 : a..b$ (문자열의 끝에 aaab, abbb, azzb 등을 포함하면 참) 

(4) [] (bracket)
문자의 집합이나 범위를 나타냄, 두 문자 사이의 범위는 "-" 사용. 
[]내에서 "^"이 선행되면 not을 나타냄

예 : [abc] (a, b, c 중 어떤 문자, "[a-c]."과 동일)
예 : [Yy] (Y 또는 y)
예 : [A-Za-z0-9] (모든 알파벳과 숫자)
예 : [-A-Z]. ("-"(hyphen)과 모든 대문자)
예 : [^a-z] (소문자 이외의 문자)
예 : [^0-9] (숫자 이외의 문자)

(5) {} (brace)
{} 내의 숫자는 직전의 선행문자가 나타나는 횟수,범위를 나타냄

예 : a{3} ('a'의 3번 반복인 aaa만 해당됨)
예 : a{3,} ('a'가 3번 이상 반복인 aaa, aaaa,  ... 등을 나타냄) 
예 : a{3,5} (aaa, aaaa, aaaaa 만 해당됨) 
예 : ab{2,3} (abb와 abbb 만 해당됨) 
예 : [0-9]{2} (두 자리 숫자) 
예 : doc[7-9]{2} (doc77, doc87, doc97 등이 해당) 
예 : [^Zz]{3} (Z와 z를 포함하지 않는 5개의 문자열, abc, ttt 등) 
예 : .{3,4}er ('er'앞에 세 개 또는 네 개의 문자를 포함하는 문자열이므로 Peter, mother 등이 해당)

(6) * (asterisk)
"*" 직전의 선행문자가 0번 또는 여러번 나타나는 문자열

예 : ab*c ('b'를 0번 또는 여러번 포함하므로 ac, abc, abbbc 등) 
예 : * (선행문자가 없는 경우이므로 임의의 문자열 및 공백 문자열) 
예 : .* (선행문자가 "."이므로 하나이상의 문자를 포함하는 문자열) 
예 : ab* ('b'를 0번 또는 여러번 포함하므로 a, accc, abb 등) 
예 : a* ('a'를 0번 또는 여러번 포함하므로 k, kd, a, aa, abb 등) 
예 : doc[7-9]* (doc7, doc777, doc778989, doc 등이 해당) 
예 : [A-Z].* (대문자로만 이루어진 문자열) 
예 : like.* (직전의 선행문자가 '.'이므로 like에 0 또는 하나 이상의 문자가 추가된 문자열이 됨, like, likely, liker, likelihood 등) 

(7) + (Plus Sign)
"+" 직전의 선행문자가 1번 이상 나타나는 문자열

예 : ab+c ('b'를 1번 또는 여러번 포함하므로 abc, abcd, abbc 등) 
예 : ab+ ('b'를 1번 또는 여러번 포함하므로 ab, abcc, abb 등) 
예 : [A-Z]+ (대문자로만 이루어진 문자열) 
예 : like.+ (직전의 선행문자가 '.'이므로 like에 하나 이상의 문자가 추가된 문자열이 됨, likely, liker, likelihood 등, 그러나 like는 해당안됨) 

(8) ? (question mark)
"?" 직전의 선행문자가 0번 또는 1번 나타나는 문자열

예 : ab?c ('b'를 0번 또는 1번 포함하므로 abc, abcd 만 해당됨) 

(9) () (parenthesis)
()는 정규식내에서 패턴을 그룹화 할 때 사용 

(10) | (bar)
or를 나타냄

예 : a|b|c (a, b, c 중 하나, 즉 [a-c]와 동일함) 
예 : yes|Yes (yes나 Yes 중 하나, [yY]es와 동일함) 
예 : korea|japan|chinese (korea, japan, chinese 중 하나) 

(11) \ (backslash)
위에서 사용된 특수 문자들을 정규식내에서 문자로 취급하고 싶을 때 '\'를 선행시켜서 사용하면됨

예 : filename\.ext ("filename.ext"를 나타냄) 
예 : [\?\[\\\]] ('?', '[', '\', ']' 중 하나)

자바 트름 없음 .. ㅡ..ㅡ ;;  만들었다 퍼왔다 .. 인터넷에 널리고 널렸다 나하하 ..  저건 정규화다

function trim(str){
    return str.replace(/(^\s*)|(\s*$)/g,"");
}

**
* 날짜관련 자바스크립트 공통함수
*
* 분단위 이하(= 초)는 고려하지 않았습니다.
* YYYYMMDDHHMI 형식의 String => 'Time'으로 칭함
*
* 주로 YYYYMMDD 까지만 쓰인다면 아래 함수들을
* YYYYMMDD 형식의 String => 'Date'로 하여 적당히
* 수정하시거나 아니면 함수를, 예를들어 isValidDate()처럼,
* 추가하시기 바랍니다.
*
* @version 2.0, 2001/01/28
* @author 박종진(JongJin Park), jongjpark@lgeds.lg.co.kr
*/


/**
* 유효한(존재하는) 월(月)인지 체크
*/
function isValidMonth(mm) {
    var m = parseInt(mm,10);
    return (m >= 1 && m <= 12);
}

/**
* 유효한(존재하는) 일(日)인지 체크
*/
function isValidDay(yyyy, mm, dd) {
    var m = parseInt(mm,10) - 1;
    var d = parseInt(dd,10);

    var end = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    if ((yyyy % 4 == 0 && yyyy % 100 != 0) || yyyy % 400 == 0) {
        end[1] = 29;
    }

    return (d >= 1 && d <= end[m]);
}

/**
* 유효한(존재하는) 시(時)인지 체크
*/
function isValidHour(hh) {
    var h = parseInt(hh,10);
    return (h >= 1 && h <= 24);
}

/**
* 유효한(존재하는) 분(分)인지 체크
*/
function isValidMin(mi) {
    var m = parseInt(mi,10);
    return (m >= 1 && m <= 60);
}

/**
* Time 형식인지 체크(느슨한 체크)
*/
function isValidTimeFormat(time) {
    return (!isNaN(time) && time.length == 12);
}

/**
*
유효하는(존재하는) Time 인지 체크

* ex) var time = form.time.value; //'200102310000'
*     if (!isValidTime(time)) {
*         alert("올바른 날짜가 아닙니다.");
*     }
*/
function isValidTime(time) {
    var year  = time.substring(0,4);
    var month = time.substring(4,6);
    var day   = time.substring(6,8);
    var hour  = time.substring(8,10);
    var min   = time.substring(10,12);

    if (parseInt(year,10) >= 1900  && isValidMonth(month) &&
        isValidDay(year,month,day) && isValidHour(hour)   &&
        isValidMin(min)) {
        return true;
    }
    return false;
}

/**
* Time 스트링을 자바스크립트 Date 객체로 변환
* parameter time: Time 형식의 String
*/
function toTimeObject(time) { //parseTime(time)
    var year  = time.substr(0,4);
    var month = time.substr(4,2) - 1; // 1월=0,12월=11
    var day   = time.substr(6,2);
    var hour  = time.substr(8,2);
    var min   = time.substr(10,2);

    return new Date(year,month,day,hour,min);
}

/**
* 자바스크립트 Date 객체를 Time 스트링으로 변환
* parameter date: JavaScript Date Object
*/
function toTimeString(date) { //formatTime(date)
    var year  = date.getFullYear();
    var month = date.getMonth() + 1; // 1월=0,12월=11이므로 1 더함
    var day   = date.getDate();
    var hour  = date.getHours();
    var min   = date.getMinutes();

    if (("" + month).length == 1) { month = "0" + month; }
    if (("" + day).length   == 1) { day   = "0" + day;   }
    if (("" + hour).length  == 1) { hour  = "0" + hour;  }
    if (("" + min).length   == 1) { min   = "0" + min;   }

    return ("" + year + month + day + hour + min)
}

/**
* Time이 현재시각 이후(미래)인지 체크
*/
function isFutureTime(time) {
    return (toTimeObject(time) > new Date());
}

/**
* Time이 현재시각 이전(과거)인지 체크
*/
function isPastTime(time) {
    return (toTimeObject(time) < new Date());
}

/**
*
주어진 Time 과 y년 m월 d일 h시 차이나는 Time을 리턴

* ex) var time = form.time.value; //'20000101000'
*     alert(shiftTime(time,0,0,-100,0));
*     => 2000/01/01 00:00 으로부터 100일 전 Time
*/
function shiftTime(time,y,m,d,h) { //moveTime(time,y,m,d,h)
    var date = toTimeObject(time);

    date.setFullYear(date.getFullYear() + y); //y년을 더함
    date.setMonth(date.getMonth() + m);       //m월을 더함
    date.setDate(date.getDate() + d);         //d일을 더함
    date.setHours(date.getHours() + h);       //h시를 더함

    return toTimeString(date);
}

/**
*
두 Time이 몇 개월 차이나는지 구함

* time1이 time2보다 크면(미래면) minus(-)
*/
function getMonthInterval(time1,time2) { //measureMonthInterval(time1,time2)
    var date1 = toTimeObject(time1);
    var date2 = toTimeObject(time2);

    var years  = date2.getFullYear() - date1.getFullYear();
    var months = date2.getMonth() - date1.getMonth();
    var days   = date2.getDate() - date1.getDate();

    return (years * 12 + months + (days >= 0 ? 0 : -1) );
}

/**
* 두 Time이 며칠 차이나는지 구함
* time1이 time2보다 크면(미래면) minus(-)
*/
function getDayInterval(time1,time2) {
    var date1 = toTimeObject(time1);
    var date2 = toTimeObject(time2);
    var day   = 1000 * 3600 * 24; //24시간

    return parseInt((date2 - date1) / day, 10);
}

/**
*
두 Time이 몇 시간 차이나는지 구함

* time1이 time2보다 크면(미래면) minus(-)
*/
function getHourInterval(time1,time2) {
    var date1 = toTimeObject(time1);
    var date2 = toTimeObject(time2);
    var hour  = 1000 * 3600; //1시간

    return parseInt((date2 - date1) / hour, 10);
}

/**
*
현재 시각을 Time 형식으로 리턴

*/
function getCurrentTime() {
    return toTimeString(new Date());
}

/**
* 현재 시각과 y년 m월 d일 h시 차이나는 Time을 리턴
*/
function getRelativeTime(y,m,d,h) {
/*
    var date = new Date();

    date.setFullYear(date.getFullYear() + y); //y년을 더함
    date.setMonth(date.getMonth() + m);       //m월을 더함
    date.setDate(date.getDate() + d);         //d일을 더함
    date.setHours(date.getHours() + h);       //h시를 더함

    return toTimeString(date);
*/
    return shiftTime(getCurrentTime(),y,m,d,h);
}

/**
* 현재 年을 YYYY형식으로 리턴
*/
function getYear() {
/*
    var now = new Date();
    return now.getFullYear();
*/
    return getCurrentTime().substr(0,4);
}

/**
* 현재 月을 MM형식으로 리턴
*/
function getMonth() {
/*
    var now = new Date();

    var month = now.getMonth() + 1; // 1월=0,12월=11이므로 1 더함
    if (("" + month).length == 1) { month = "0" + month; }

    return month;
*/
    return getCurrentTime().substr(4,2);
}

/**
*
현재 日을 DD형식으로 리턴

*/
function getDay() {
/*
    var now = new Date();

    var day = now.getDate();
    if (("" + day).length == 1) { day = "0" + day; }

    return day;
*/
    return getCurrentTime().substr(6,2);
}

/**
* 현재 時를 HH형식으로 리턴
*/
function getHour() {
/*
    var now = new Date();

    var hour = now.getHours();
    if (("" + hour).length == 1) { hour = "0" + hour; }

    return hour;
*/
    return getCurrentTime().substr(8,2);
}

/**
*
오늘이 무슨 요일이야?

* ex) alert('오늘은 ' + getDayOfWeek() + '요일입니다.');
* 특정 날짜의 요일을 구하려면? => 여러분이 직접 만들어 보세요.
*/
function getDayOfWeek() {
    var now = new Date();

    var day = now.getDay(); //일요일=0,월요일=1,...,토요일=6
    var week = new Array('일','월','화','수','목','금','토');

    return week[day];
}


// 여기서 퍼옴
http://ihelpers.x2soft.co.kr/programming/tipntech.php?CMD=view&IDX=540&source=overture#wf

DLL 만들기
new  - > win32 Dynamic-link Library -> A simple Dll project
하면 끝...
여기에 Java  include에 포함 시키고  설정한다음에 프로그램 작성하면 끝~~~
Jni 해더 파일은 만드는법은 인터넷 찾아보면 많으니까 찾아보시고.
그다음작업하면 완료 ~~`
class aaa
{
static {System.loadLibrary("로드할 DLL 이름");}
public native int diviceStateChange(int iState , byte[] blDiveName); /// 이부분은 C++ DLL과 이름이 동일해야한다.
public int diviceStateChange(int iState , String strDiveName) throws Exception
{
//내부코딩 리턴값 설정
int iRet = diviceStateChange(iState,getEndNullByte(strDiveName));
return iRet ; // 이정도 ?
}
}
///////
매인에서는 
aa _aa= new aa(); 
_aa.getInstance();
int  k  = _.aa.diviceStateChange(0,"COM3"); 
System.out.println(k);
 요런식으로 사용하면 끝



 


난이도 : 초급

Brett McLaughlin, Author and Editor, O'Reilly Media Inc.

2007 년 5 월 02 일

평이한 텍스트와 XML은 비동기식 애플리케이션에서 정보를 송수신 할 때 사용할 수 있는 데이터 포맷입니다. Ajax 마스터하기 시리즈에서는 또 다른 유용한 데이터 포맷인 JavaScript Object Notation (JSON)에 대해 알아보고, 이것이 애플리케이션에서 데이터와 객체들을 어떻게 이동시키는지를 설명합니다.

여러분이 본 시리즈를 오랫동안 읽어왔다면, 데이터 포맷에 대한 지식도 많이 쌓였을 것이다. 이전 기술자료에서는 평이한 텍스트와 간단한 name/value 쌍이 많은 비동기식 애플리케이션에서 어떤 역할을 하는지를 살펴보았다. 여러분은 다음과 같은 데이터를 조합할 수 있다.

firstName=Brett&lastName=McLaughlin&email=brett@newInstance.com

더 이상 무엇을 할 필요가 없다. 사실, 웹 고수들은 이것이 GET 요청을 통해 보내지는 정보용 포맷이라는 것을 알고 있다.

그리고 나서, 본 시리즈에서는 XML에 대해서 다루었다. 확실한 것은 XML은 부정적인 측면과 긍정적인 측면 모두에서 정당한 평가의 몫을 받았고, 이러한 것이 Ajax 애플리케이션에서도 나타나는 것은 그리 놀랄 일이 아니다. 본 시리즈의 지난 기술자료들에서 XML이 대안 데이터 포맷들을 어떻게 제공하는지를 파악하기 바란다.

<request>
  <firstName>Brett</firstName>
  <lastName>McLaughlin</lastName>
  <email>brett@newInstance.com</email>
</request>

이것은 여러분이 위해서 보았던 것과 같은 데이터이지만, XML 포맷으로 저장되어 있다. 그 외에 특징적인 것은 없다. 평이한 텍스트와 name/value 쌍 대신에 XML을 사용할 수 있는 또 하나의 데이터 포맷일 뿐이다.

이 글에서는 또 다른 데이터 포맷인 JavaScript Object Notation(JSON)에 대해 살펴보겠다. JSON은 여러분이 이미 보았던 것과 비슷한 부분이 있고, 어떤 부분은 생소하다. 이것은 여러분에게 또 다른 선택권을 줄 것이며, 그 선택은 그렇게 나쁘지 않다.

선택할 수 있는 권한

JSON 포맷에 대해 상세히 설명하기 전에, 특히, 평이한 텍스트에서 XML과 name/value 쌍으로 작업하는 방법을 이미 알고 있다면, 다양한 데이터 포맷을 다룬 기술자료들을 먼저 읽어보기 바란다.(다음 글에서도 JSON에 대해 다룰 것이다.) 이유는 간단하다. 여러분에게 선택권이 많이 주어지고 문제에 대한 옵션들이 많아질수록, 단 하나의 솔루션 보다는 문제에 대한 최상의 솔루션을 찾을 수 있는 더 좋은 기회들이 생기기 때문이다.

name/value 쌍과 XML

본 시리즈에서는 name/value 쌍이 적합한 상황과 XML을 사용하기에 적합한 상황에 대해 이미 다루었다. 거듭 말하지만, 여러분은 우선 name/value 쌍을 사용하는 것을 늘 생각해야 한다. 이것은 대부분의 비동기식 애플리케이션에서 생기는 문제들에 대한 가장 간단한 솔루션이고, JavaScript에 대한 기본적인 지식만 있어도 간단히 해결된다.

여러분은 XML로 전향하는데 제약이 없다면 대안 데이터 포맷을 사용하는 것에 관해 걱정할 필요가 없다. 확실히, XML 포맷의 입력을 요하는 서버 측 프로그램으로 데이터를 보낸다면, 데이터 포맷으로 XML을 사용해야 한다. 대부분의 경우, XML은 애플리케이션에 여러 정보 조각들을 보내야 하는 서버용으로 적합하다. 다시 말해서, XML은 Ajax 애플리케이션으로부터의 요청 보다는, Ajax 애플리케이션으로의 응답으로 더 일반적으로 사용된다.

JSON 추가하기

name/value 쌍 또는 XML을 사용할 때, JavaScript를 사용하여 애플리케이션에서 데이터를 가져다가, 이것을 데이터 포맷에 채워 넣는다. 이 경우, JavaScript는 데이터 조작 언어로서의 역할을 하고, 웹 폼에서 데이터를 이동시키고 조작하며, 이것을 서버 측 프로그램에 쉽게 보내질 수 있는 포맷에 넣는다.

하지만, 단순한 포맷 언어 이상으로 JavaScript를 사용해야 할 때가 있다. 이러한 경우에, JavaScript 언어의 객체를 사용하여 데이터를 표현하고, 웹 폼에서 데이터를 가져다가 요청을 한다. 이러한 상황에서, JavaScript에 있는 객체에서 데이터를 추출하고 그 데이터를 name/value 쌍 또는 XML로 채우는 것이 일이다. 이때에 JSON이 빛을 발한다. JavaScript 객체를 (동기식 또는 비동기식) 요청의 일부로 보내질 수 있는 데이터로 쉽게 변환할 수 있다.

기본적으로 JSON은 문제해결의 특효약은 아니다. 하지만, 매우 특수한 상황에 있어서 훌륭한 옵션이 된다. 그러한 상황에 절대로 놓이지 않을 것이라고 가정하지 말고, 이 글과 다음 글을 읽으면서 JSON을 배워가기 바란다. 그러한 유형의 문제에 직면할 때를 대비한다고 생각하면 좋을 것이다.




위로


JSON 기초

JSON으로는 JavaScript 객체로 표현된 데이터를 한 함수에서 다른 함수로, 또는 비동기식 애플리케이션의 경우, 웹 클라이언트에서 서버 측 프로그램으로 쉽게 전달할 수 있는 스트링으로 변형할 수 있다. 문자열이 약간 이상해 보이지만 JavaScript에 의해 쉽게 인터프리팅 되고, JSON은 name/value 쌍 보다 복잡한 구조도 표현한다. 예를 들어, 단순한 키와 값 리스트 대신, 배열과 복합 객체들을 나타낼 수 있다.

JSON 예제

JSON에서는 name/value 쌍이 다음과 같이 표현된다.

{ "firstName": "Brett" } 

이는 매우 기본적인 것이고, 텍스트의 name/value 쌍 보다는 더 많은 공간을 차지한다.

firstName=Brett

하지만, JSON은 여러 name/value 쌍들을 하나로 연결할 때 진가를 발휘한다. 우선, 다음과 같이, 여러 name/value 쌍으로 데이터 레코드를 생성할 수 있다.

{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }

신택스의 관점에서 보면 name/value 쌍 보다 나은 점이 없어 보이지만, 이 경우, JSON은 훨씬 더 사용하기 쉬우며, 가독성도 놀랍다. 예를 들어, 위 세 개의 값들은 같은 레코드의 일부이다. 중괄호는 그 값이 같은 커넥션을 갖고 있다는 것을 표시하고 있다.

값들의 배열

값을 나타내야 할 때, JSON은 보다 읽기 쉽고, 덜 장황하다. 예를 들어, 인명부가 있다고 해보자. XML에서는, 수 많은 오프닝/클로징 태그에 둘러싸이게 되고, 전형적인 name/value 쌍을 사용한다면, 독점적인 데이터 포맷을 사용해야 하거나, person1-firstName처럼 키 네임을 수정해야 한다.

JSON에서는 다음과 같이 괄호를 사용하여 레코드를 그룹핑 할 수 있다.

{ "people": [
  { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
  { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
  { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
]}

이해하기도 어렵지 않다. 이 경우, people이라는 하나의 변수가 있고, 값은 세 개의 아이템을 포함하고 있는 배열이며, 각각의 레코드에는 이름, 성, 이메일 주소가 있다. 위 예제는 레코드들을 모두 투입하는 방법과, 아이템을 괄호가 있는 싱글 값으로 그룹핑 하는 방법을 설명하고 있다. 물론, 같은 신택스를 사용할 수 있지만, 여러 값들(각각 여러 레코드들을 갖고 있음)을 갖고 있다.

{ "programmers": [
  { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
  { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
  { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
 ],
"authors": [
  { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
  { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
  { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
 ],
"musicians": [
  { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
  { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
 ]
}

여기에서 주목해야 할 점은 각각이 다수의 값을 내포하고 있는 많은 값들을 표현할 수 있는 당신의 능력이다. 또 하나 주목해야 할 점은 레코드의 name/value 쌍들은 다른 메인 항목(programmers, authors, musicians)에 따라 변한다는 것이다. JSON은 완전히 동적이고, JSON 구조 안에서 데이터를 표현하는 방식을 바꿀 수 있다.

또 한 가지 알아두어야 할 것은 JSON 포맷 데이터로 작업할 때 제약 조건이 없다는 점이다. 따라서, 어떤 것을 표현하는 방식을 바꿀 수 있고, 심지어는 같은 데이터 구조 내에서 같은 것을 다른 방식으로 나타낼 수도 있다.




위로


JavaScript에서 JSON 사용하기

JSON 포맷을 다룬 후라면, JavaScript에서 이것을 사용하는 것은 간단하다. JSON은 네이티브 JavaScript 포맷이고, JavaScript 내에서 JSON 데이터와 작업하기 위해 특별한 API나 툴킷이 필요 없다.

JSON 데이터를 변수에 할당하기

예를 들어, 새로운 JavaScript 변수를 만들고, JSON 포맷 데이터 스트링을 여기에 직접 할당한다고 해보자.

var people =
  { "programmers": [
    { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
    { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
    { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
   ],
  "authors": [
    { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
    { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
    { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
   ],
  "musicians": [
    { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
    { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
   ]
  }

복잡하지 않다. people에는 이제 JSON 포맷 데이터가 포함되어 있다. 하지만, 많은 것을 수행하지 않는다. 데이터는 여전히 유용한 포맷으로 되어있지 않다.

데이터에 액세스 하기

위의 매우 긴 스트링은 단순한 배열일 뿐이고, JavaScript 변수에 그 배열이 있다면 쉽게 액세스 할 수 있다. 사실, 그 배열을 마침표로 구분할 수 있다. 따라서, programmers 리스트의 첫 번째 엔트리의 성(last name)에 액세스 하려면, JavaScript에서 다음과 같은 코드를 사용해야 한다.

people.programmers[0].lastName;

인덱싱은 '0' 부터 시작한다. 따라서, 이것은 people 변수에 있는 데이터로 시작한다. 그리고 나서, programmers라고 하는 아이템으로 이동하고, 첫 번째 레코드([0])에 액세스 한다. 마지막으로, lastName 키의 값에 액세스 한다. 결과는 "McLaughlin"이라는 스트링 값이다.

다음은 같은 변수를 사용하는 예제들이다.

people.authors[1].genre			// Value is "fantasy"

people.musicians[3].lastName		// Undefined. This refers to the fourth entry,
 and there isn't one

people.programmers.[2].firstName	// Value is "Elliotte"

이 신택스로도, 다양한 JSON 포맷 데이터로 작업할 수 있고, 추가 JavaScript 툴킷이나 API가 필요 없다.

JSON 데이터 수정하기

위에 나타난 점과 괄호 표기법을 사용하여 데이터에 액세스 하듯, 같은 방식으로 데이터를 쉽게 수정할 수 있다.

people.musicians[1].lastName = "Rachmaninov";

문자열에서 JavaScript 객체로 변환했다면 변수에 있는 데이터를 수정하면 된다.

문자열로 변환하기

물론, 모든 데이터 수정은 텍스트 포맷으로 쉽게 변환할 수 없다면 가치가 없다. 이것 역시 JavaScript에서는 간단하다.

String newJSONtext = people.toJSONString();

이것이 다이다. 원하는 곳 어디에서나 사용할 수 있는 텍스트 문자열이 생겼으니, 이것을 Ajax 애플리케이션에서 요청 스트링으로 사용할 수 있다.

훨씬 더 중요한 것은, 어떤 JavaScript 객체라도 JSON 텍스트로 변환할 수 있다. 원래 JSON 포맷 스트링으로 할당된 변수로만 작업할 필요가 없다. myObject라는 객체를 변형하려면, 같은 종류의 명령어를 실행하면 된다.

String myObjectInJSON = myObject.toJSONString();

이것이 JSON과 다른 데이터 포맷과의 가장 큰 차이이자, 이 시리즈를 통해 탐구할 주제이다. JSON에서는, 단순한 함수를 호출하면, 포맷팅 되어 사용하기에 알맞은 데이터를 얻을 수 있다. 다른 데이터 포맷의 경우, 미가공 데이터와 포맷 데이터간 변환은 여러분의 몫이다. Document Object Model 같이 데이터 구조를 텍스트로 변환하는 함수를 제공하는 API를 사용할 때도, 네이티브 JavaScript 객체와 신택스 보다는, API를 배우고 그 API의 객체를 알아야 한다.

여러분이 많은 JavaScript 객체들과 작업할 때, JSON은 데이터를 서버 측 프로그램으로 요청을 보내기에 알맞은 포맷으로 쉽게 변환할 수 있다.




위로


결론

본 시리즈에서는 데이터 포맷에 대한 내용을 많은 부분을 할애했다. 여러분의 비동기식 애플리케이션이 거의 비동기식이기 때문이다. 모든 종류의 데이터를 송수신 할 수 있는 다양한 툴과 기술이 있다면, 각 데이터 유형에 가장 잘 맞는 방식으로 수행하면 되고, Ajax 전문가의 반열에도 오를 것이다. 여기에 JSON을 추가하면, JavaScript에서 보다 복잡한 데이터 구조도 능숙히 다룰 준비가 된다.

다음 기술자료에서는 단순히 데이터를 보내는 것 이상으로, 서버 측 프로그램이 JSON 포맷 데이터를 수신하여 처리하는 부분을 설명할 것이다. 또한, 서버 측 프로그램이 스크립트와 서버 측 컴포넌트에 JSON 포맷으로 된 데이터를 보내는 방법도 설명할 것이다. XML, 평이한 텍스트, JSON 요청과 응답을 혼합하는 부분에 대해서도 설명할 것이다. 목표는 어떤 환경에서도 유연하게 이러한 툴들을 능숙히 조작할 수 있도록 하는 것이다.

기사의 원문보기




링크 정리하자
http://theeye.pe.kr/entry/Prototype-Javascript-Framework-Event  -프포퍼티 사용법
http://openframework.or.kr/Wiki.jsp   -자료 많은곳
http://techbug.tistory.com/guestbook  -데꾸벅님 extjs 정리 되어있는곳
http://www.ibm.com/developerworks/kr/library/x-ajaxjquery.html  -jquary 설명글있는곳
http://getfirebug.com/  -firebug
http://developer.yahoo.com/yui/theater/  -yahoo 영문 싸이트(공부해야 볼수있겠다 ㅠ..ㅠ)


<!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="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
 <script language="JavaScript" src="prototype1_6.js"></script> 
  <script>

 function showOptions(){
  var someNodeList = $('lstEmployees').getElementsByTagName('option');
  var nodes = $A(someNodeList);

  nodes.each(function(node){
    alert(node.nodeName + ': ' + node.innerHTML);
    alert(node.value);
   });
 }
 var myPet = {
  color: 'black',
  legCount: 4,
  communicate: function(repeatCount){
   for(i=0;i<repeatCount;i++)
    alert('Woof!');
  }
 };
 function aa (){
  alert('my pet is ' + myPet.color);
  alert('my pet has ' + myPet.legCount + ' legs');
  //if you are a dog, bark three times:
  myPet.communicate(3);
 }

 var myDog = {
  bark: function(){
   alert('Woof!');
  }
 };

 var myCat = {
  meow: function(){
   alert('I am a lazy cat. I will not meow for you.');
  }
 };

 function annoyThePet(petFunction){
  //let's see what the pet can do
  petFunction();
 }

  //annoy the dog:
 
 //annoyThePet(myDog.bark);
  //annoy the cat:
 //annoyThePet(myCat.meow);

 ///myCat.meow = myDog.bark;
 
 //myCat.meow(); //alerts 'Woof!'


//defining a new class called Pet
var Pet = function(petName, age){
 this.name = petName;
 this.age = age;
};

//let's create an object of the Pet class
var famousDog = new Pet('Santa\'s Little Helper', 15);
//alert('This pet is called ' + famousDog.name);

Pet.prototype.communicate = function(){
 alert('I do not know what I should say, but my name is ' + this.name);
};

var Pet = Class.create();
Pet.prototype = {
 //our 'constructor'
 initialize: function(petName, age){
  this.name = petName;
  this.age = age;
 },
 
 communicate: function(){
  alert('I do not know what I should say, but my name is ' + this.name);
 }
};
 var myArray = ['first', 'second', 'third'];
    myArray.each( function(item, index){
 //alert('The item in the position #' + index + ' is:' + item);
} );

 

 


 

</script>

<select id="lstEmployees" size="10" >
 <option value="5">Buchanan, Steven</option>
 <option value="8">Callahan, Laura</option>
 <option value="1">Davolio, Nancy</option>
</select>

 

 </HEAD>

 <BODY>
 <input type="button" value="Show the options" onclick="showOptions();" >
  <input type="button" value="Saaas" onclick="aaa();" >

    <input type="button" value="11"  id ="someButtonID" >
   <input type="button" value="11"  id ='someOtherButtonID' >

   <input type="text" value="txtName"  id ='txtName' >
   <input type="text" value="txtEmail"  id ='txtEmail' >
   <input type="text" value="txtAddress"  id ='txtAddress' >
    <input type="button" value="btnClear"  id ='btnClear' >


 </BODY>
 <script>

 

var myButton = $('someButtonID');
var myButton2 = $('someOtherButtonID');
myButton.onclick = buttonClicked;
myButton2.onclick = buttonClicked;
function buttonClicked(){
 alert('button ' + this.id + ' was clicked');
}

 

var myHelper = {
 
 formFields: [ ],
 
 emptyAllFields: function(){
  for(i=0; i<this.formFields.length; i++){
   var elementID = this.formFields[i];
   var field = document.getElementById(elementID);
   field.value = '';
  }
 }
};


myHelper.formFields.push('txtName');
myHelper.formFields.push('txtEmail');
myHelper.formFields.push('txtAddress');

//clearing the text boxes:
myHelper.emptyAllFields();

var clearButton = document.getElementById('btnClear');
//clearButton.onclick = myHelper.emptyAllFields;
clearButton.onclick = function(){ myHelper.emptyAllFields(); };

 

 </script>


</HTML>


일단 프로그램을 설치 완료 했다면 ..
라이프 싸이클 폴더에 lcd-samples.war 파이이 있을거이다...
요것을 복사한다.

그후 TOMCAT\webapps\sample 폴더만들고  압축 해제 한다.

라이프 싸이클을 설치하면 간단한 메모리 디비가 설치가된다 이것을 실행해주자 .~


그다음에 TOMCAT을 실행한다.
http://127.0.0.1:8080/samples
입력 실행하면 짜잔 ~~ 끝이다.





1. 먼저 자바를 설치한다. eclipse 를 사용하기위해서는 최신버전 1.6을 sun 사에서 다운받자 .. 설치방법은 인터넷을 뒤지자..
2. tomcat5.5를 다운받자 .. 6.0 받아도 되지만 나는 5.5를 쓴다.. 회사에서도 이것을 쓰기때문에.. 나중에 내가 6.0으로 바꺼야지... 하지만 좀 불안하다는 소리가있던데 6.0은 일단  5.5를 설치한다.
이때 설치버전은 zip 형식의 윈도우 파일을 다운받자 그래야  나중을 위해서도 좋다... 인스톨은  버려라~!!
파일이름 : apache-tomcat-5.5.27.zip
 
3.  eclipse3.4 ee 버전을 다운받자 기본말고 우리는 웹을 할꺼니까 ee받자 
파일이름 : eclipse-jee-ganymede-win32.zip
4. 거기아 sdk 84 메가 짜리를 받으면 더욱 좋겠다 같이 써야한다 .
파일이름 : eclipse-java-ganymede-win32.zip
5. 위 사항을 다 깔았으면 flex 관련된 파일을 다운받는다.

fb3_wwej_plugin.exe   --> 클라이언트 버전 코딩할대 쉽게 할려면 이거 깔면된다. 이클립스에다가 덥어 씨운다. myeclipse 에도 깔리는거 확인했다. myeclipse 에 flex 를 깔려면  마이이클리스 하위에 eclipse 폴더를 지정하고 인스톨 하면 깔린다.
lcds261-win.exe   --> 라이프 싸이클이다. 이것은  몰라서 무지하게 찾아봤는데 별거아니다..-_-;; 추후설명
flex_sdk_3.zip -->  말그대로 sdk 컴파일하고  소스 jar 파일있고 .. 이클립스 버전 깔았으면 그다지 필요는 없는데 ant 자동 빌딩할때는 필요할거같다 일다는 패스 ..
blazeds-turnkey-3.2.0.3978.zip   --> 라이프 싸이클 대체로 완존 무료다 보니까 차트도 무료로 쓸수 있는거 같다 아잉 좋아라 ~~ 근데 차트 몇게박에 안됀다 .. 젠장알 .~~~

6. 라이프 싸이클이란...

내가 나름 찾아보면서 생각한건데 ... 그냥 jar 파일 묵음 이다 .. 플렉스를 쉽게 사용하기위해서 필요한 프레임워크라고 생각한다 ..-_-;; 난 라이프 싸이클과 통신하는줄 알았다 근데 아니다  -_- 요런 젠장알 .. 무자게 찾아 해맨거다 .. 그저 가져다 쓰면 돼는거다 옵션들은 유심히 보면 좋을거 같다 .. ~~