'dev'에 해당되는 글 20건

  1. 2008.07.25 검색 & 정규식
  2. 2008.07.25 tomcat
  3. 2008.07.25 jdk
  4. 2008.07.24 DOM property, method
  5. 2008.07.24 xml document handling
  6. 2008.07.24 동적 input 생성
  7. 2008.07.24 [tomcat]web.xml
  8. 2008.07.10 tomcat + mysql 한글깨짐
  9. 2008.05.28 DOM 객체
  10. 2008.05.28 변환행렬...

검색 & 정규식

dev 2008. 7. 25. 15:30

이번 회에서는 vim 내에서 특정 표현을 검색하고 치환하는 방법을 배워보도록 하겠다. 좀더 복잡한 패턴의 검색을

위해서는 정규표현식이라는 것을 사용해야만 한다. 비단 vim 뿐만 아니라 많은 유틸리티에서도 사용하는 정규표현

식을 어느 정도 익히게 되면 어렵게만 느껴졌던 많은 명령어들이 그만큼 친숙하게 다가올 것이다.


1. 검색

이번 장에서는 vim을 통해 검색하기 위해 다음과 같은 기본적인 내용에 다루기로 한다.

- 순방향, 역방향 검색
- 검색 옵션

1.1 순방향, 역방향 검색

일반적인 검색이란 문서의 시작 혹은 현재 위치에서 문서의 끝방향으로 검색을 해나가게 되는데 이를 순방향 검색

이라 한다. 반대로 현재의 위치에서 문서의 처음 방향으로 검색을 해나갈 수도 있는데 이를 역방향 검색이라 한다. 이 두 가지 방식의 검색은 단지 종이 한 장 차이만 날뿐 복잡한 차이는 없다.
vim는 '/' 명령으로 순방향 검색을 실시한다. "Normal Mode"에서 '/'를 쳐주게 되면 다음 그림처럼 커서가 좌측하

단으로 이동하면서 밑줄에 '/' 가 적히게 된다. 이 상태에서 검색하고 싶은 문자열을 적어주면 된다. 반대로 역방향

검색은 '/' 대신 '-' 로 검색 명령을 내리면 된다.


변경전 확인


/ 나 - 로 검색 명령을 내린 뒤 를 치게되면 커서가 처음 발견한 위치에 놓이게 된다. 같은 검색을 계속하기 위해서

는 "Normal Mode" 상태 그대로에서 'n'을 누르면 된다. 이 때 검색 방향으로 다음 발견한 위치에 커서가 놓이게 된

다.

다음 예에서 ‘/it’ 으로 검색 한 후 'n'을 누르게 되면 14, 16, 17, 22 번째 줄 순서대로 커서가 이동해가게 된다.

13 A love like ours is love that's hard to find
14 How could we let it slip away-
15
16 We've come too far to leave it all behind
17 How could we end it all this way-
18 When tomorrow comes and we both regret
19 The things we said today
20
21 A love like ours is love that's hard to find
22 How could we let it slip away-

위의 예에서도 보듯 'n'은 검색 방향으로 검색 결과를 추적해 간다. 만약 검색방향의 반대 방향으로 추적을 하고 싶

으면 'N'을 누르면 된다.
한가지 주의 할 것은 vim을 통해 검색할 때 ‘^$*[]’ 등과 같은 특수 문자는 뒤에서 배울 정규표현식을 위해 특별한

용도로 사용된다. 그렇기 때문에 '$' 문자 자체를 검사하고 싶다면
$ 앞에 \를 추가하여 \$ 와 같이 검색해야 한다.

1
2 $ dollar
3 Good Morning!
4

위의 예에서 '$' 라는 문자를 검색하기 위해 /$ 로 명령을 내리면 아마 검색 결과가 줄의 끝을 가르킬 것이다. 이에

대한 자세한 이유는 뒤에 설명하기로 하고 제대로 한다면 /\$ 로 검색하기 바란다.
여러 가지 검색어로 검색을 한 경우 vim 는 history 기능으로 전에 검색했던 검색어를 쉽게 재활용 할 수 있다.
지금까지 다음과 같이 세 검색어로 검색을 한 경우

/aaa
/bbb
/cccc

/를 누른 상태에서 화살표 Up, Down 키를 누르면 전에 검색했던 검색어로 찾아 들어가게 된다. 원하는 검색어를

찾을 경우 만 쳐주면 다시 검색을 실시 할 수 있다.

1.2 검색 옵션

이번 절에서는 검색 결과나 방법에 영향을 줄 수 있는 몇 가지 옵션에 대해 알아보도록 하겠다. 특별한 옵션이 없다

면 vim 은 검색할 때 대소문자를 구별한다. 그래서 /abc 와 /ABC 는 전혀 다른 검색 결과를 보여주게 된다. 대소문

자를 구분하지 않고 검색하고 싶다면 "Command Mode"에서 다음과 같은 명령을 내려주면 된다.

:set ignorecase 혹은 :set ic

다시 대소문자를 구분하고 싶으면

:set noignorecase

명령을 내려주면 된다.

일단 vim에서 검색을 하게 되면 검색어에 해당되는 결과는 바탕이 강조되어 보이게 된다. 이 결과는 다른 검색을 할

 때까지 그대로 표시가 되는데 가끔 편집할 때 눈이 피로해 보이는 경우가 있다. 만약 강조(highlight)되는 것을 없

애고 싶다면 다음과 같은 명령을 내려주면 된다.

:set nohlsearch

다시 강조하게 하고 싶으면

:set hlsearch

명령을 내려주면 된다.

vim 이 디폴트로 세팅되어 있다면 검색어를 완벽히 입력하고 를 쳐야만 비로소 검색을 시작하게 된다. 이와 반대로

‘find' 라는 단어를 찾을 때 f, i, n, d 한글자 한글자 입력할 때마다 그때 그때의 결과를 바로 볼 수 있는 검색을 incr

emental searching 이라고 한다. 이러한 검색을 사용하면 정확히 찾고자 하는 단어가 떠오르지 않을 때 조금씩 단

어를 완성해가면서 검색을 할 수 있다. 검색 방법을 incremental searching 으로 바꾸려면

:set incsearch

이란 명령을 입력하면 된다. 반대로 해제는 다른 옵션과 마찬가지로 앞에 no를 앞에 붙여

:set noincsearch

명령을 내려주면 된다.


2. 정규 표현식(regular expression)

정규표현식이란 주로 문자열 내에서 검색이나 조작에 사용되는 표현식으로써 특정한 패턴을 가지고 그 패턴에 부

합되는 문자열을 찾아내 원하는 일을 수행 할 수가 있다. 정규표현식은 비단 vim 뿐만 아니라 sed, grep, 과 같은

유틸리티부터 시작해서 vim, emacs 와 같은 편집기 그리고 perl, php 와 같은 프로그래밍 언어에까지 문자열을 다

루는 프로그램에는 거의 모두 사용되고 있다. 하지만 정규표현식이 쓰이는 모든 프로그램에서 동일한 문법으로 정

규표현식을 규정하고 있지는 않는다. 그렇기 때문에 vim에서 사용하는 정규표현식을 완벽히 익혔다 하더라도 다른

 프로그램에서 정규표현식을 사용할 때는 표현이 적절한 지 미리 알아 보아야 한다. 하지만 그렇다고 너무 걱정할

필요는 없다. 문법이 다르다고는 하지만 기본적인 내용은 모두 같고 약간의 형식만 다르기 때문이다. 이번 절에서

는 정규표현식의 기본적인 문법을 검색으로 실습하며 익혀 보기로 하겠다.

2.1 문자 패턴

[abc] : a, b, c 문자 중 한 문자를 가리킨다.
만약 b[abc]ll 라고 검색을 하면 ball, bbll, bcll 이 세 개의 문자열 중 하나가 검색 될 것이다. [] 안에는 알파벳이나

숫자가 올 수 있고 이 안에 나열되어 있는 문자 중 한 문자를 가리키게 되는 것이다. 즉 [abc] 는 검색에서 한 문자

처럼 취급을 받을 것이다. 만약 [] 안에 특수 문자를 넣고 싶으면 앞에 꼭 \를 넣어줘야 원하는 패턴을 만들 수 있

다.

[a-z], [0-9], [A-Z0-9] : [] 안에는 문자의 범위가 들어 갈 수도 있다.
[a-z] 는 결코 a, -, z 라는 문자 중 한 문자를 가리키지 않는다. 대신 알파벳의 모든 소문자 a, b, c .... x, y, z를

가리킨다. - 가 [] 안에 들어가게 되면 문자의 범위를 나타내는 특수한 역할을 하게 되는 것이다. 비슷하게 [0-9]

는 숫자 [A-Z0-9] 는 알파벳 대문자와 숫자를 나타낸다.

. : 정규표현식에서 . 은 new line 문자(엔터)를 제외한 모든 문자를 가리킨다. 즉 알파벳 혹은 공백과 같은 특수문

자, 숫자 모두 . 에 속하게 된다.

[^a-z] : ^ 가 [] 안에 들어오면 안에 나열되어 있는 문자를 제외한 다른 모든 문자를 나타낸다. 이와 같이 하면 알

파벳 소문자를 제외한 모든 문자, 즉 대문자, 숫자, 특수문자 모두가 이에 해당된다.

특수문자 : 특수문자는 항상 \ 와 같이 쓰여야 문자 그대로의 의미를 나타낸다. 공백(Space)는 '\ ' 로 Space 앞

에 \를 붙여주면 된다.

그럼 지금까지 익힌 문자 패턴을 이용하여 몇가지 예를 들어 보기로 하겠다.
첫문자는 무조건 대문자로 시작하고 곧바로 숫자가 2자리 오는 패턴을 정규표현식으로 만들면 어떻게 될까- 대문

자는 [A-Z], 숫자는 [0-9], 그리고 숫자가 2번 오기 때문에 [A-Z][0-9][0-9] 이렇게 하면 표현식이 완성된다.

2.2 위치

^문자열 : '^' 다음에 문자열이 오면 해당 문자열이 줄의 처음에 오는 경우이다.
밑의 문장에서 /^The 로 검색을 하게 되면 줄의 맨 처음에 위치한 The 만 표현식에 해당된다. [ ] 내에 있던 ^ 과

혼동하지 않기를 바란다.

The things we said today, The things we said today

두 번째 The 는 문장의 처음에 오지 않았기 때문에 표현식과 맞지 않는 표현이다.

문자열$ : 문자열 다음에 $를 붙이게 되면 해당 문자열이 줄의 끝에 오는 경우를 가리킨다.
위의 예에서 /today$ 로 검색하면

The things we said today, The things we said today

뒤에 있는 today 만 검색된다. 가운데 있는 today 는 줄의 끝에 있지 않기 때문이다.

2.3 반복

반복을 지정하는 표현식은 문자 뒤에 적어 앞에 있는 문자가 몇 개까지 반복되는 지를 지정한다.

* : 0 번 이상
\+ : 1 번 이상 (vim only)
\- : 0번 혹은 1번 (vim only)

\+ 와 \- 는 전통적인 vi 에서는 제공되지 않고 vim 에서만 사용할 수 있다. 물론 리눅스에 설치되어 있는 vi는 vim

이기 때문에 사용 가능하다. 그럼 차근차근 예를 들어 설명해 보면,

ab* 는 b라는 문자가 없을 수도 있고 한번 이상 올 수도 있다. 그렇기 때문에 a, ab, abb, abbb, 모두 이 표현식을

 만족한다.
ab\+ 는 ab* 와 달리 반드시 b 라는 문자가 한번 이상 와야 한다. 때문에 a 는 이 표현식을 만족시키지 못한다. a

b, abb, abbb처럼 반드시 a 뒤에 b가 한번 이상은 존재해야만 한다.
ab\- 는 a 뒤에 b가 올 수도 오지 않을 수 도 있다. 즉 a, ab 둘다 이 표현식을 만족한다.

그럼 abc 와 같은 문자열이 반복되는 정규표현식은 어떻게 만들 수 있을까- 바로 문자들을
\( 와 \) 안에 묶어 두면 된다.
\(abc\)* 는 abc 문자열이 0번 이상 반복되는 표현식이고
\(abc\)\+ 는 abc 문자열이 1번 이상 반복되는 표현식이다.

※ 만약 여러분이 /\(abc\)* 와 같은 검색을 명령을 내리면 vi 는 아마도 모든 문자가 검색결과로 지정 될 것이다. 왜냐하면 * 특성 자체가 0번도 인정하기 때문에 굳이 abc 라는 문자열이 없어도 표현식을 만족하기 때문이다.

짧은 단어를 검색하고자 할 때 간혹 그 단어가 포함된 다른 단어까지 같이 검색 되어지곤 할 것이다. 일 예로 'be'

란 단어를 검색하다보면 behind 와 같이 검색어가 포함된 단어도 같이 검색이 된다. 만약 be 앞뒤로 공백 문자가

있는 단어 자체를 검색하고 싶을때, 지금까지 배운 방법을 사용하면 '\ be\ '처럼 할 수 도 있다. 하지만 이나

지 모두 고려하려다 보면 표현식이 약간 지저분해 질 수 있다. 이때 깔끔히 사용할 수 있는 정규표현식이 \<\> 이

다.

/\ 로 검색을 하면 완벽한 단어인 be (앞뒤로 공백문자가 있는) 가 검색 된다.

지금까지 배운 정규표현식을 응용하여 검색을 해보도록 하자.
반드시 줄의 시작은 알파벳 하나 이상으로 시작하고 중간에 하나 이상의 공백 문자 다음에 2개 이상의 숫자가 오는

 패턴은 어떻게 정규표현식으로 나타낼 수 있을까-

먼저 하나 이상의 알파벳으로 줄이 시작하기 때문에
^[A-Za-z]\+
와 같은 표현식을 쓸 수 있다. 대소문자를 따로 언급하지 않았기 때문에 대문자와 소문자 모두 속해 있어야 한다.
중간에 하나 이상의 공백 문자가 오는 것까지 첨가하면
^[A-Za-z]\+\ \+
로 \ \+ 가 추가되었다.
끝으로 2개 이상의 숫자가 오기 때문에
^[A-Za-z]\+\ \+[0-9][0-9]\+ 와 같이 쓸 수 있다.


3. 바꾸기

검색과 함께 빼놓을 수 없는 것은 바꾸기 일 것이다. 대부분 검색을 하게되면 검색으로 끝나지 않고 다른 단어로 바

꾸는 작업이 같이 이루어진다.

3.1 바꾸기 문법

검색한 패턴을 다른 단어로 바꾸기 위해서는 먼저 범위를 지정하고 검색어와 변경할 문자열을 지정하면 된다. 이번

 절에서는 기본적인 바꾸기 작업을 배워 보도록 하겠다.

바꾸기 위한 기본적인 문법은 다음과 같다.

:<시작줄 번호>,<끝 번호> s/검색어/바꿀단어/옵션

위의 문법으로 다음과 같은 예를 들 수 있다.

:1,10 s/The/the/g

해석해 보면 1번째 줄에서 10번째 줄 사이에 있는 "The" 라는 단어를 "the"로 바꾸라는 명령이다. 맨 끝의 g 라는

 옵션은 모든 검색어에 대해 변경을 실시하게 해준다. 만약 g 옵션이 없을 경우 한 줄에 2 개 이상의 The 가 있을 경

우 첫 번째 "The" 만 "the"로 변경을 하게 된다.

이외에 줄 번호를 가리키는 특별한 문자가 있다.

. : 현재 커서가 놓여 있는 줄의 번호
$ : 마지막 줄

:.,$ s/The/the/g

위의 명령은 현재에서 마지막 줄까지 모든 "The"를 "the" 로 바꾸게 한다.

바꾸기 문법중 검색어에는 2장에서 배운 정규표현식을 사용 할 수 있다. 만약 모든 줄에서 다른 단어에 포함되지 않

은 "be" 라는 단어를 검색하여 대문자 "BE"로 변경하고 싶다면

:1,$ s/\/BE/g

처럼 명령을 내릴 수 있다.

만약 정규표현식에 익숙하지 않다면 완벽한 예제를 보며 차근차근 익히기 바란다.

3.2 정규표현식과 변수

2장의 정규표현식에서 \( \) 는 문자열을 하나의 단위로 보게 하는 역할을 하였다. 하지만 바꾸기에 사용 될 경우

 변수 역할도 하게 된다.

abcd 100 이란 문장과 \([a-z]\+\)\ \([0-9]\+\) 이러한 정규표현식이 있다고 하자.

위의 문장과 정규표현식을 분석해 보면 앞의 abcd 는 뒤의 정규표현식 \([a-z]\+\) 에 해당하고 숫자 100 은

\([0-9]\+\) 에 해당하는 것을 알 수 있을 것이다. 그리고 가운데 공백은 정규표현식 '\ ' 에 해당한다.

정규표현식에서는 \( \)에 대해 하나의 단위로 묶으면서 동시에 \1, \2 와 같은 변수에 대응을 시킨다. 즉 위와

같은 경우 첫 번째 \( \) 는 \1에, 두 번째 \( \) 는 \2 라는 변수에 저장되는 것이다.

다음과 같은 문서가 있다고 보자.

height 150
weight 60
age 20

위와 같은 문서에서 문자와 숫자의 위치를 바꿔 다음과 같이 만들고 싶다.

150 height
60 weight
20 age

정규표현식의 변수와 vim의 바꾸기를 사용하여 앞 뒤 순서를 한번 바꾸어 보도록 하겠다.

:1,$ s/\([a-z]\+\)\(\ \+\)\([0-9]\+\)/\3\2\1/g

다소 복잡해 보이지만 차근차근 분석해 보도록 하겠다.

1,$ : 검색의 범위를 처음에서 끝 줄까지로 지정을 하였다.
s/.../.../g : 언제나 검색 및 바꾸기는 이러한 문법을 사용한다.

자 그럼 검색어 부분을 분석해보도록 하자.

\([a-z]\+\)\(\ \+\)\([0-9]\+\)

이 검색어를 \( \) 로 구분해 보면 다음 3개로 나뉘어 진다.
\([a-z]\+\) → \1 알파벳 문자 1개 이상
\(\ \+\) → \2 공백 문자 1개 이상
\([0-9]\+\) → \3 숫자 1개 이상

자 그럼 여기까지 검색어 부분을 분석해 보았다. 그럼 변경할 문자열을 분석해 보자.

\3\2\1

이것은 검색어 \1\2\3 의 순서만 바꾼 것이다.

자 그럼 해당 줄 별로 변수에 들어간 내용을 표로 그려보면

내용
\3
\2
\1
\3\2\1
height 150
weight 60
age 20
hegit
weight
age
" "
" "
" "
150
60
20
150 height
60 weight
20 age



끝으로 바꾸기 명령과 같이 쓰일 수 있는 옵션을 하나 더 알아보도록 하겠다.
지금까지는 바꾸기 명령은 구간내의 모든 검색 결과에 대해 바꾸기를 수행하였다. 물론 모든 검색 결과를 바꾸는

경우라면 문제가 없겠지만, 그 중에 변경하지 않아야 할 내용이 있다면 선택적으로 바꾸기를 행하고 싶을 수도 있

을 것이다. 검색 결과에 대해 일일이 변경 여부를 물어보면 선택적으로 변경할 수 있는 옵션이 있다.



:1,$ s/.../..../gc

바꾸기 명령에 'c' 옵션을 추가하면 변경전 하나한 확인한 후 바꾸기를 실시하게 된다.


2회차에서는 편집에 꼭 필요한 검색 및 바꾸기를 해보았다. 정규표현식의 경우 어렵게 느껴졌을 수도 있겠지만, vi

m 뿐만 아니라 다른 프로그램에서도 활용될 수 있기 때문에 당장 이해가 되지 않더라도 꾸준히 연습할 가치가 있을

것이다.

출처 : Tong - nae tong님의 서버운영체제통

'dev' 카테고리의 다른 글

ant  (0) 2008.07.25
정규식  (0) 2008.07.25
tomcat  (0) 2008.07.25
jdk  (0) 2008.07.25
DOM property, method  (0) 2008.07.24
Posted by 으랏차
,

tomcat

dev 2008. 7. 25. 15:28
톰캣 다운로드

다운로드 URL : http://tomcat.apache.org/

위의 URL에서 톰캣을 다운받는다.

이 문서에서는 apache-tomcat-5.5.17.tar.gz 를 다운받았다.



톰캣 설치

다운 받은 apache-tomcat-5.5.17.tar.gz를 /usr/local/src 로 옮겼다.

#tar xvfz apache-tomcat-5.5.17.tar.gz [enter]

/usr/local/src/apache-tomcat-5.5.17 디렉토리가 생기고 그 안에 톰캣이 깔린다.

이 디렉토리를 /usr/local 로 옮겼다.

#mv apache-tomcat-5.5.17 /usr/local [enter]



톰캣 실행

# cd /usr/local/apache-tomcat-5.5.17/bin [enter]
# ./startup.sh [enter]



톰캣 실행 확인

브라우저에서 http://192.168.0.2:8080 를 넣어 고양이가 나오는지 확인




톰캣 관리화면 활성화 시키기

다음 파일을 편집한다.
# vi /usr/local/apache-tomcat-5.5.17/tomcat-users.xml [enter]

다음 내용을 추가시킨다.
<role rolename="manager"/>
<user username="admin" password="admin" roles="manager"/>

톰캣을 다시 재실행한다.

#/usr/local/apache-tomcat-5.5.17/bin/shutdown.sh [enter]
#/usr/local/apache-tomcat-5.5.17/bin/startup.sh [enter]


톰캣 관리화면을 열어본다.

브라우저에서 http://192.168.0.2:8080/manager/html
ID : admin
Password : admin



톰캣 클래스패스 설정하기

#vi /etc/profile [enter]

다음 내용을 넣는다.(주로 가장 마지막에...)
CATALINA_HOME="/usr/local/apache-tomcat-5.5.17"
export CATALINA_HOME
CLASSPATH=".:$CATALINA_HOME/lib/servlet.jar"
export CLASSPATH


* 위에서 CLASSPATH의 경우는 이미 CLASSPATH가 정해져 있다면
  처음에 $CLASSPATH를 넣어주거나
  기존의 CLASSPATH 정의부분의 뒤쪽에 이어서 입력해 준다.

저장하고 나온 후
#source /etc/profile [enter]

 

'dev' 카테고리의 다른 글

정규식  (0) 2008.07.25
검색 & 정규식  (0) 2008.07.25
jdk  (0) 2008.07.25
DOM property, method  (0) 2008.07.24
xml document handling  (0) 2008.07.24
Posted by 으랏차
,

jdk

dev 2008. 7. 25. 15:28
우선 JDK 최신 버전 다운로드.

http://java.sun.com/javase/downloads/index.jsp

위에 링크에서 리눅스 버전의 .bin파일을 다운 받습니다.
설치는 /usr/local 경로에 하겠습니다.

# chmod 700 jdk-6-linux-i586.bin
# ./jdk-6-linux-i586.bin

하시면 라이정책 관련된 내용이 출력되는데 반듯이 읽어보시고 ㅡㅅㅡ
yes 눌러 주시면 설치는 완료 됩니다.
이제 환경 설정을 해줘야 하는데요.

우선 /usr/local 디렉토리에 심볼릭 링크를 하나 만들어 줍니다.

# ln -s /usr/local/j2sdk1.6.0_4 /usr/local/java

그리고 기존에 JDK가 설치 되어 있다면 /usr/lib/java 를 삭제해 줍시다.

# rm -rf /usr/lib/java

마지막으로  PATH 설정

# vi /etc/profile

다음 내용을 파일 끝에 추가하고 저장.
JAVA_HOME=/usr/local/java
PATH=$PATH:$JAVA_HOME/bin

# source /etc/profile
# java -version
export JAVA_HOME

 

'dev' 카테고리의 다른 글

검색 & 정규식  (0) 2008.07.25
tomcat  (0) 2008.07.25
DOM property, method  (0) 2008.07.24
xml document handling  (0) 2008.07.24
동적 input 생성  (0) 2008.07.24
Posted by 으랏차
,

DOM property, method

dev 2008. 7. 24. 18:19

<동적콘텐츠 생성시 유용한 dom 프로퍼티와 메소드>

1)document.createElement(tagName) : tageName을 이용하여 엘리먼트를 생성

2)document.createTextNode(text) : text를 포함하는 노드를 생성

3)<element>.appendChild(childNode) : 현재 엘리먼트의 자식 노드들에 대한 리스트에 명시된 노드를 추가

     예)select 엘리먼트의 자식노드 option엘리먼트를 추가할수있다.

4)<element>.getAttribute(name)

   <element>.setAttribute(name,value) : 엘리먼트의 name attribute에 대한 값을 읽어오거나 설정한다.

5)<element>.insertBefore(newNode, targetNode) : newNode를 targetNode앞에 삽입한다.(현재노드의 자신노드가 된다)

6)<element>.removeAttribute(name) : 엘리먼트로 부터 name attribute를 제거한다.

7)<element>.removeChild(childNode) : 엘리먼트로 부터 childNode엘리먼트를 제거한다.

8)<element>.replaceChild(newNode,oldNode) : oldNode를 newNode로 대체한다.

9)<element>.hasChildnodes() : 엘리먼트가 자식노드를 가지고 있는지 여부를 Boolean값으로 반환


///////////기존의 tr건을 모두삭제///////

function clearPreviousResults(){
     
      var tableBody = document.getElementById("OEL_slect_list");//OEL_slect_list를 찾아서 배열로리스트를 넘김
      while(tableBody.childNodes.length > 0){
       tableBody.removeChild(tableBody.childNodes[0]);
      }
}


///////////tr생성//////////////////////

var row = document.createElement("tr");  //tr 엘리먼트생성

var cell = createCellWithText(NUM);        //td엘리먼트생성
row.appendChild(cell);     


cell = createCellWithText(S_ACPT_NUMBER);
row.appendChild(cell);


//////////td생성//////////////////////

function createCellWithText(text){
      var cell = document.createElement("td");         //td엘리먼트생성
      var textNode = document.createTextNode(text);//textnode생성
      cell.appendChild(textNode);  //td에 textnode추가
      cell.setAttribute("class","td_tg cen");  //어트리뷰트값을 셋팅
      return cell;
 }

'dev' 카테고리의 다른 글

tomcat  (0) 2008.07.25
jdk  (0) 2008.07.25
xml document handling  (0) 2008.07.24
동적 input 생성  (0) 2008.07.24
[tomcat]web.xml  (0) 2008.07.24
Posted by 으랏차
,

xml document handling

dev 2008. 7. 24. 18:18
▒ Javascript로 XML 문서 핸들링 하기 I

IE에서는 Javascript를 이용해서 XML 문서를 핸들링 할 수 있는 방법을 제공하고 있습니다. XML문서를 동적으로 읽어들여 파싱한 후, 스크립트를 통해서 맘대로 핸들링 할 수 있는 거죠.
스타일 쉬트를 동적으로 적용해서 스타일을 변경한다든지, XML 내의 정보를 이용해서 HTML을 구성한다든지 또는 HTML상에서 데이터를 입력받아 XML 문서를 생성한다든지.. 등등 여러가지 작업을 할 수 있습니다.

이런 작업이 가능한것은 ActiveX Control 인 MSXML 파서를 로딩하여 사용할 수 있기 때문이죠. 이때 MSXML 파서는 ActiveX Control 이기 때문에 IE 뿐 아니라 VC++, 또는 Visula Basic에서도 읽어 들여 사용할 수 있답니다. 이렇게 사용되는 방법도 차차 알아보도록 하죠...

물론 이런것들을 수행하기 위해서는 IE 5.0 이상이어야 할겁니다.

1. Javascript에서 XML 문서 읽기

XML 문서를 하나 작성한 후 Javascript상에서 읽은 다음 한번 확인해보도록 하죠. XML 문서는 이전에 작성했었던 북마크 XML 문서를 이용하도록 하죠.

[ 북마크 XML 문서 보기 ]

viewXML() 이란 Javascrip 함수를 만들어 북마크 XML 문서를 읽어볼까요 ?
아래와 같이 ActiveObject란 함수를 통해 MSXML 파서를 로딩해서 DOM Object를 생성합니다.
DOM을 생성한 후 load() 란 메서드를 통해 XML을 읽어들이고 파싱을 하게됩니다. 이때, 문서에 오류가 있으면 에러가 나겠죠 ? 그 다음 생성된 DOM 객체인 xmlDoc에 대해 xml 프로퍼티를 이용하여 XML 원문을 확인할 수 있습니다.

::: Javascript를 이용해 원문을 확인하는 예제 :::
 <html>
  <head>
   <script>
    function viewXML() {
      // MSXML 파서를 이용해서 XML문서를 가져온다.
      var xmlDoc = new ActiveXObject("MSXML.DOMDocument");
      xmlDoc.async = false;
      xmlDoc.load("bookmark.xml");

      // DOM 객체로부터 원문을 읽어 Dialog Box로 표시한다.
      alert(xmlDoc.xml);
    }
   </script>
  </head>
  <body>
   ...
   <a href="javascript:viewXML()">[ 북마크 XML 문서읽기 ]</a>
   ...
  </body>
 </html>

[ Javascript를 통해 읽어들인 XML 원문 확인하기 ]

2. 읽어들인 XML문서에 동적으로 Style 적용하기

위와 같이 Javascript를 통해 XML 문서를 읽어들일 수 있듯이 스타일도 동적으로 적용할 수 있답니다.
이전 예제에서는 아래와 같이 XML 문서에 적용하고자 하는 스타일 파일을 지정하여 직접 HTML로 볼 수 있었죠 ?

::: XML 문서에 스타일을 지정하는 예제 :::
 <?xml version="1.0" encoding="EUC-KR"?>
 <?xml:stylesheet type="text/xsl" href="table.xsl"?>

 <bookmark>
  ...
 </bookmark>

그런데, 위와 같은 방법은 하나의 XML 문서에 하나의 스타일을 적용할때는 모르겠지만, 다양한 스타일을 적용하려면 매번 사용할 스타일을 변경해줘야 하는 번거로움이 있을 것입니다. 또는, 서로 다른 스타일이 적용된 XML을 여러개 만들다든지 해야하겠죠.

그럼, Javascript를 이용해서 동적으로 스타일을 변경시켜 보여주는 예제를 하나 만들어 보겠습니다. 예제는 이전에 사용했던 것들을 재사용하기로 하죠.

XML문서나 XSLT 문서를 읽어들여 DOM 객체를 생성하는 것은 위의 예와 같고, 스타일을 동적으로 지정할 수 있는 방법이 필요한데, 이것은 transformNode()라는 메서드를 이용하게 됩니다.
그래서, 아래와 같이 XML 문서를 미리 읽어두고, 요청에 따라 스타일 파일을 읽어와 transformNode()라는 메서드를 통해 스타일을 적용하게 되죠. transformNode() 메서드는 스트링을 리턴하게 되어 있는데, 사용되는 스타일 파일들이 모두 HTML 로 변환하기 때문에, html 소스를 결과를 얻어오게 됩니다.

그 다음은 변환된 결과를 다시 HTML에 적용하는 것인데, 이것은 DHTML을 이용하였습니다. innerHTML이란 것은 지정된 태그내에 HTML Source를 말하는 것으로 아래 코드는 <div> 태그내 내용을 변환된 스트링 값으로 대치하란 것입니다. 좀더 자세히 설명하면, content라는 ID를 가진 태그 즉, <div id="content"> 의 HTML Source를 변환된 결과로 replace 시키란 것이죠. <div> 태그를 사용한 이유는 화면 구성에 아무런 영향을 주지않기 때문 이랍니다.

::: Javascript를 이용해 스타일을 동적으로 적용하는 예제 :::
 <html>
  <head>
   <script>
    // 미리 bookmark.xml 문서를 읽어들인다.
    var xmlDoc = new ActiveXObject("MSXML.DOMDocument");
    xmlDoc.async = false;
    xmlDoc.load("bookmark.xml");

    function changeXSLT(style) {
     // 지정한 xslt 문서를 읽어들인다.
     var xslDoc = new ActiveXObject("MSXML.DOMDocument");
     xslDoc.async = false;
     xslDoc.load(style + ".xsl");

     // xml문서에 읽어들인 xslt 문서를 통해 스타일을 적용한다.
     html = xmlDoc.transformNode(xslDoc);
     // DHTML을 통해 HTML로 변환된 내용을 이 페이지에 반영한다.
     content.innerHTML = html;
    }
   </script>
  </head>
  <body>
   ...
   <a href="javascript:changeXSLT('table')">[ 테이블 형태로 보기 ]</a> |
   <a href="javascript:changeXSLT('list')">[ 리스트 형태로 보기 ]</a>>
   ...
   <div id="content"></div>
  </body>
 </html>

[ 동적으로 스타일을 적용하는 예제 보기 ]

참고로 XSLT 즉, 스타일을 처리할 수 있는것은 XSLT Processor가 필요하게 됩니다. XSLT Processor가 별도로 개발되기는 하지만 보통 파서내에 포함되어 있습니다. 위의 얘제와 같이 transformNode()라는 메서드는 MSXML 파서에서 지원하고 있는 기능입니다.
 

Made by Rapsodie, 2001.07.16

'dev' 카테고리의 다른 글

jdk  (0) 2008.07.25
DOM property, method  (0) 2008.07.24
동적 input 생성  (0) 2008.07.24
[tomcat]web.xml  (0) 2008.07.24
tomcat + mysql 한글깨짐  (0) 2008.07.10
Posted by 으랏차
,

동적 input 생성

dev 2008. 7. 24. 18:11

var el;

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

    el = document.createElement("input");

    el.type = "hidden";

    el.name = "test";

    el.value = test[i];

    document.form.appendChild(el);

}

'dev' 카테고리의 다른 글

DOM property, method  (0) 2008.07.24
xml document handling  (0) 2008.07.24
[tomcat]web.xml  (0) 2008.07.24
tomcat + mysql 한글깨짐  (0) 2008.07.10
DOM 객체  (0) 2008.05.28
Posted by 으랏차
,

[tomcat]web.xml

dev 2008. 7. 24. 17:00


(출저: http://polomin.tistory.com - 각종 뉴스, 동영상, 프로그래밍 싸이트)
 
web.xml파일의 구성

1. x파일은 다음과 같이 구성된다.

- xml정의와 스키마 선언부

- 웹 애플리케이션 전체 설정

- jsp, 서블릿 관련 설정

- tag library 관련 설정

- 기타설정

2. xml정의와 스키마 선언부 : xml정의와 스키마 선언부는 xml문서에서 공통으로 필요한 xml 버전 선언과 스키마를 정의하는 부분으로 다음과 같이 공통된 버전 정의와 스키마를 가진다.

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

3. 웹 애플리케이션 전체 설정

<web-app>

        <display-name>애플리케이션 이름</display-name>

        <description>애플리케이션에 대한 설명</description>

        <welcome-file-list>

               <welcome-file>처음 시작할 파일 이름</welcome-file>

               <welcome-file>두번재로 시작할 파일 이름</welcome-file>

        </welcome-file-list>

</web-app>

4. jsp, 서블릿 관련 설정

        <servlet>

               <servlet-name>서블릿이름</servlet-name>

               <jsp-page>jsp페이지 경로</jsp-page>

               <servlet-class>서블릿클래스 경로</servlet-class>

               <load-on-startup>1</load-on-startup>

               <init-param>

                       <description>인자설명</description>

                       <param-name>인자이름</param-name>

                       <param-value>인자값</param-value>

               </init-param>

        </servlet>

        <servlet-mapping>

               <servlet-name>매핑할 서블릿이름</servlet-name>

               <url-pattern>매핑 패턴</url-pattern> 

        </servlet-mapping>


<load-on-startup>1</load-on-startup> : 0보다 큰값이면 배포 또는 서버실행시에 초기화하게 된다.

개발자가 설정하지 않으면 최초요청시에 초기화하게 되므로 시간이 소요됨..

5. tag library 관련 설정

<web-app>

        <taglib>

               <taglib-uri>태그라이브러리 경로</taglib-uri>

               <taglib-location>TLD(Tag Library Descriptor)</taglib-location>

        </taglib>

</web-app>

6. 기타설정

<web-app>

        <context-param>

               <description>설명</description>

               <param-name>인자이름</param-name>

               <param-value>인자값</param-value>

        </context-param>

</web-app>




또하나의 예제

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

[Tomcat] web.xml에 대한 예제..

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>


<!-- 웹 어플리케이션의 일반적 설명 -->

<display-name>My Web Application</display-name>
<description>
이것은 와일드하고 훌륭한 작업을 수행하는 servlet과 JSP
기반한 애플리케이션의 X.X 버전입니다. 이 문서는 개발자
Dave 가 작성했고, 더 자세한 정보를 원하시면
dave@mycompany.com 으로 연락할 수 있습니다.
</description>


<!-- Context 초기 파라메터: 어플리케이션에서 사용되는 공유
된 문자열 상수들을 선언합니다. 이것은 애플리케이션을
설치하는 시스템 관리자가 변경할 수 있습니다. 이들 파
라메터에 실질적으로 할당된 값들은 servlet 과 JSP page
에서 다음과 같이 불러올 수 있습니다:

String value =
getServletContext().getInitParameter("name");

여기서 "name" 은 <param-name> 이들 초기 파라메터 중에
하나의 엘리먼트와 같습니다.

컨텍스트 초기 파라메터의 갯수는 제한이 없고, 아무것도
없어도 됩니다.
-->

<context-param>
<param-name>webmaster</param-name>
<param-value>myaddress@mycompany.com</param-value>
<description>
The EMAIL address of the administrator to whom questions
and comments about this application should be addressed.
</description>
</context-param>


<!-- 초기 파라메터를 포함해, 웹 애플리케이션을 구성하는
servlet 에 대한 정의. Tomcat 에서, 브라우저에서 servlet
요청시 아래와 같이 함으로 web.xml 파일에 등록안된 것도
부를 수 있습니다:

http://localhost:8080/{context-path}/servlet/{classname}

그러나 이런 사용법은 유동성을 보장하지 못합니다. 또한
servlet이 이미지나 다른 자원에 접근하기 위해서는 상대 경로
를 지정해야 되는 등 servlet이 매우 복잡하게 됩니다. 그래서
모든 servlet 을 정의해 주는 것을 (그리고 servlet-매핑 요소
로 정의하는 것) 권장합니다.

Servlet 초기 파라메터는 servlet 과 JSP page 에서 다음과 같
이 불러올 수 있습니다:

String value =
getServletConfig().getInitParameter("name");

여기서 "name" 은 <param-name> 이들 초기 파라메터 중에
하나의 엘리먼트와 같습니다.

servlet 갯수는 제한이 없고, 아무것도 없어도 됩니다.
-->

<servlet>
<servlet-name>controller</servlet-name>
<description>
이 어플리케이션에 사용된 MVC 구조에서 이 servlet은 "controller"
역할을 합니다. 보통 <servlet-mapping> 엘리먼트와 함께 ".do" 파일
확장자로 매핑됩니다. 그리고 이 애플리케이션에서 사용되는 모든
form은 요청하는 주소가 "saveCustomer.do" 처럼 지정됩니다. 이
servlet에 매핑된 servlet입니다.

이 servlet에 대한 초기 파라메터 명은 (파일 확장자가 제거된 후에)
이 servlet 이 받는 "servlet path" 입니다. 상응하는 값은 이 요청을
처리하는 데 사용할 action class 의 이름입니다.
</description>
<servlet-class>com.mycompany.mypackage.ControllerServlet</servlet-class>
<init-param>
<param-name>listOrders</param-name>
<param-value>com.mycompany.myactions.ListOrdersAction</param-value>
</init-param>
<init-param>
<param-name>saveCustomer</param-name>
<param-value>com.mycompany.myactions.SaveCustomerAction</param-value>
</init-param>
<!-- 시동할 때 이 servlet을 서버에 로딩한다 -->
<load-on-startup>5</load-on-startup>
</servlet>

<servlet>
<servlet-name>graph</servlet-name>
<description>
이 servlet 은 동적으로 생성된 그래프 GIF 이미지를 생성합니다.
이 요청에 포함된 입력된 파라메터값을 갖고 생성합니다. 보통
"/graph" 라는 구별된 URI 요청에 매핑되어 있습니다.
</description>
</servlet>


<!-- 특정한 요청 URI (context-상대적인)를 특정한 servlet으로 해석
하는 servlet 컨테이너에 의해 사용되는 매핑을 선언하기.
아래 예제는 위에 있는 servlet 설명과 관계있습니다. 그러므로,
요청 URI 는 다음과 같습니다:

http://localhost:8080/{contextpath}/graph

주소는 "graph" servlet 에 매핑됩니다. 한편:

http://localhost:8080/{contextpath}/saveCustomer.do

은 "controller" servlet 에 매핑됩니다.

servlet 매핑의 갯수는 제한이 없고, 아무것도 없어도 됩니다.
원한다면 하나의 servlet 에 한 개 이상의 매핑을 해주어도 됩니다.
-->

<servlet-mapping>
<servlet-name>controller</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>graph</servlet-name>
<url-pattern>/graph</url-pattern>
</servlet-mapping>


<!-- 어플리케이션의 기본 세션 타임아웃 시간을 분단위로 설정합
니다. servlet 이나 JSP page 에서, 동적으로 특정한 session
에 대해 시간을 조정할 수 있습니다.
HttpSession.getMaxInactiveInterval() 을 사용하면 됩니다.
-->

<session-config>
<session-timeout>30</session-timeout> <!-- 30 minutes -->
</session-config>


</web-app> 


<error-page>
<error-code>
500
</error-code>
<location>
/errorPage.jsp
</location>
</error-page>
<error-page>
<exception-type>
javax.servlet.ServletException
</exception-type>
<location>
/servlet/ErrorDisplay
</location>
</error-page>

(출저: http://polomin.tistory.com - 각종 뉴스, 동영상, 프로그래밍 싸이트)

'dev' 카테고리의 다른 글

xml document handling  (0) 2008.07.24
동적 input 생성  (0) 2008.07.24
tomcat + mysql 한글깨짐  (0) 2008.07.10
DOM 객체  (0) 2008.05.28
변환행렬...  (0) 2008.05.28
Posted by 으랏차
,

tomcat + mysql 한글깨짐

dev 2008. 7. 10. 17:42

1. server.xml 수정은 POST 방식만 지원되고 GET 은 지원안됨. -> 비추


2. 매번 페이지 상단에 정의 -> 추천


<%@ page contentType="text/html;charset=euc_kr" %>
<% request.setCharacterEncoding("euc-kr"); %>


3. 수동 인코딩 및 디코딩 -> 비추

String name = request.getParameter("name"); // 폼에서 가져오기

 

String name = new String(rs.getString("name").getBytes("8859_1"),"KSC5601"));

// DB에서 불러오기

 

4. JDBC 연결방법을 변경 -> 현재 사용중 가장 안정적인듯(?)


  기존에   conn = DriverManager.getConnection("jdbc:mysql://localhost/project","root","root");

  에서
  conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bbs?useUnicode=true&characterEncoding=UTF-8","root","root"); 변경해서 mysql 에 전송


5. (주의)mysql 에서 DB table 생성시


CREATE TABLE `bbs`.`freeboard` (
  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NOT NULL DEFAULT '',
  `password` VARCHAR(45),
  `email` VARCHAR(45),
  `subject` VARCHAR(50) NOT NULL DEFAULT '',
  `content` TEXT NOT NULL DEFAULT '',
  `inputdate` VARCHAR(20) NOT NULL DEFAULT '',
  `masterid` INTEGER UNSIGNED NOT NULL DEFAULT 0,
  `readcound` INTEGER UNSIGNED NOT NULL DEFAULT 0,
  `replynum` INTEGER UNSIGNED NOT NULL DEFAULT 0,
  `step` INTEGER UNSIGNED NOT NULL DEFAULT 0,
  PRIMARY KEY(`id`)
)ENGINE=MyISAM DEFAULT CHARSET="euckr";

 

결론 : 2, 4, 5 번작업을 해주면 mysql 로의 입력도 mysql 에서 불러오는 것도

안정적으로 동작합니다.^_^;

 

'dev' 카테고리의 다른 글

xml document handling  (0) 2008.07.24
동적 input 생성  (0) 2008.07.24
[tomcat]web.xml  (0) 2008.07.24
DOM 객체  (0) 2008.05.28
변환행렬...  (0) 2008.05.28
Posted by 으랏차
,

DOM 객체

dev 2008. 5. 28. 17:38

** DOM **

# 문서객체모델(Document Object Model)
 - HTML 구조화 하기 위해서
 - 플랫폼과 언어 중립적인 인터페이스 요구
 - 프로그램, 스크립트를 사용해서 동적으로 문서를 접근할 수 있도록
 - 문서의 내용, 구조, 스타일을 변경할 수 있다.
 
 W3C DOM 레벨1 권고안 http://www.w3.org
 
 - HTML API는 HTML 객체로 구성되며, 각 객체는 유효한 HTML 엘리먼트와 연결되어 있다.
 - DOM HTML API 인터페이스 객체는 관련 페이지 엘리먼트를 생성, 제거, 수정할 수 있다.
 - DOM Core API : 언어와 모델에 독립적인 API이다 ---> 공용 API
 
# HTML 객체 접근 방법 2가지
 1) <form>
  <input type="text"/>
  </form>
 
  ---> document.form[0].field[0];
 
 2) <div id="div1">
  ---> var div1 = document.getElementById("div1");
 
 - DOM Core API : 언어와 모델에 독립적인 API이다 -->공용API
 - 트리노드에 접근할 수 있도록 표준을 제공
 
 nodeName - 객체명
 nodeValue - 객체의 값
 nodeType - 노드의 종류(숫자로 표현)
 parentNode - 현제노드의 부모노드
 ChildNodes - 자식노드의 NodeList
 firstChild -
 lastChild -
 prviousSibling -
 nextSibling -
 attribute - 엘리먼트의 속성의 키 값

 

'dev' 카테고리의 다른 글

xml document handling  (0) 2008.07.24
동적 input 생성  (0) 2008.07.24
[tomcat]web.xml  (0) 2008.07.24
tomcat + mysql 한글깨짐  (0) 2008.07.10
변환행렬...  (0) 2008.05.28
Posted by 으랏차
,

변환행렬...

dev 2008. 5. 28. 13:26
변환행렬이란 무엇인가..?????

'dev' 카테고리의 다른 글

xml document handling  (0) 2008.07.24
동적 input 생성  (0) 2008.07.24
[tomcat]web.xml  (0) 2008.07.24
tomcat + mysql 한글깨짐  (0) 2008.07.10
DOM 객체  (0) 2008.05.28
Posted by 으랏차
,