1.ASP 페이지 형식

①처음 만드는 ASP 페이지

ASP는 대소문자를 구분 안하지만 구분하는것이 정식 표기이며 좋은 습관이다.


  1. <% @Language=VBScript %>

    <html>

    <head>

    <title> 내가 처음 만드는 ASP 페이지 <title>

    </head>

    <body>

    현재 시간은 <% = Now %> 입니다.

    </body>

    </html>


②조금 더 복잡한 ASP 페이지 만들기

  1. <% @Language=VBScript %>

    <html>

    <head>

    <title> 두번째  ASP 페이지</title>

    </head>

    <body>

    <%

    For i = 1 To 10

    Response.Write i & "<br>"

    Next

    %>

    </body>

    </html>


미리보기


설명

<%

For i = 1 To 10

Response.Write i & "<br>"

Next

%>

이것을

<%

For i = 1 To 10

= i & "<br>"

Next

%>


이런식으로 바꾸면 안된다.

'=' 연산자는 데이터를 페이지를 출력하라는 의미이라고 했지만 <%=와 쌍으로 필 사용될 때 그런의미를 가지게 된다.

즉,'=' 연산자가 아니라 <%= 태그가 데이터를 페이지에 출력하라는 의미이다.

따라서 여러 라인의 코드를 통해 데이터를 출력 할때에는 <%= 대신에 response.write 를 써야한다.


2.ASP 데이터 형식

①Variant에 대해 이해하기

②Variant 데이터 형의 하위 형식

3.ASP의 변수

①변수의 선언

ASP(VBScript)에서 변수를 선언할 때는 Dim,Public, 또는 Private 중 한가지 키워드 사용

Public 이나 Priviate 는 주로 클래스를 구현할 때 클래스가 가지는 멤버 변수를 선언 할때 쓰이고 일반적으로 Dim을 사용한다.


Dim 변수명


Dim 변수1, 변수2, 변수3, ...


Dim myAge

myAge = 10


Dim myAge = 10 (X)

ASP(VBScript)에서는 변수의 선언과 동수에 값을 대입할 수 없다.


greeting = 안녕하세요? ASP 입니다.

Dim 키워드를 특별히 선언되지 않았음에도 사용할수 있다.

하지만 작성하는 코드양이 많아질수록 사용하는 변수 또한 늘어난다.

그러므로 변수를 선언하지 않고 사용하면 언제 부터 코드에 등장했는지, 어떤 용도로 사용하려고 했는지 상당히 헷갈릴 수 있다.

따라서 Dim 키워드로 사용하고자 하는 변수를 미리 선언한 뒤에 사용하는 것이 바람직한 코딩이다.


<% @Language=VBScript %>

<% Option Explicit

Dim myAge

myAge = 10

myName = ASP 3.0 이다. ' 여기서 오류가 발생하게 된다.

VBScript는 Option Explicit 라는 구문을 통해 Dim 사용해서 변수가 선언되었는지 확인함으로서 Dim 사용을 강제 할수 있다.

myName 변수는 Dim을 통해 선언되지 않은 변수 임으로 Option Explicit 구문으로 인해 오류를 발생시킨다.


②변수의 이름

 변수의 이름 정의 규칙

  1. 알파벳 문자로 시작해야 한다.
  2. 255자 까지만 사용할 수 있다.
  3. 변수의 이름은 변수가 선언된 범위 내에서 유일해야 한다.
  4. 마침표나 기타 특수문자(& , ^ , @)를 포함할 수 없다.

올바른 변수 선언 예

Dim myName

Dim my1stName , my2ndName

Dim my_point


올바르지 않는 변수 선언 예

Dim 1sPosition (X) '알파벳 문자로 시작 하지 않았다

Dim _toDo (X) '알파벳 문자로 시작 하지 않았다.

Dim my@Name (X) '기타 특수 문자를 사용하였다.


③변수의 사용 범위

변수는 변수가 선언되는 위치에 따라 그 사용 범위가 달라진다.


  • 전체 ASP 페이지에서 사용할 수 있는 전역 변수

<%@ Language=VBscript %>

<%

Dim globalVar '전역변수를 선언한다.

globalVar = 전역변수 입니다.


Response.Write globalVar

globalVar 변수는 ASP 페이지에 대해 전역적으로 선언 되었기 때문에

페이지 내에 존재하는 어떠한 코드에도 이 변수에 값을 대입하거나 가져올수 있다.


  • 특정 프로시저나 함수 내에서만 사용되는 프로시저 변수

<%@ Language=VBScript %>

<%

Function Add(a, b)

Dim c

c = a + b

add = c

End Function

.

Dim result

result = Add(1, 5)

Response.Write result  '6이 출력된다.

 Add 함수 내에 선언된 c라는 변수는 Add 함수 내부에서만 사용이 가능한 프로시저 변수

이 변수는 Add함수가 사용될 때 생성되었다가 Add함수가 실행이 끝나면 메모리에서 삭제 된다.


4.ASP 상수

VBScript에는 변수와 반대되는 개념으로 상수라는 개념이 있다.

변수 : 메모리를 확보하고 여기에 어떤 값이든 개발자가 원하는 값을 저장해 둘수 있다

상수 : 오직 한번만 값을 설정하고 그 이후에는 값을 설정할 수가 없다.


상수는 변수와 달리 Const라는 키워드에 의해 선언된다.

<%@ Language=VBScript %>

<%

Const MAX = 10

Dim i


For i = 1 TO MAX

Response.Write i & <br>

Next


MAX = 100 '오류가 발생한다.

%>

* 변수와 달리 상수는 선언과 동시에 값을 지정하는 것이 가능하다.

* 상수를 사용하는 이유는 개발자가 코드를 작성하는 동안 임의로 값을 변경할 수 없도록 하기 위해서 이다.


5.ASP 배열


①1차원 배열

DIm myArray(5)

위 코드는 myArray 라는 이름으로 총 6개의 원소를 갖는 배열을 생성하라는 의미 이다.

ASP에서는 배열의 각 원소에 접근하기 위해 배열의 인덱스를 사요하는데 이 인덱스는 0부터 시작

* 괄호안의 숫자는 배열의 원소의 개수가 아니라 배열의 마지막 원소의 인덱스인 것에 주의해야 한다.


myArray(0) = 강호동

myArray(1) = 홍길동

         ...

 myArray(5) = 역도산

선언된 배열에 값을 대입할 때는 일반적으로 변수에 값을 대입하는 것과 동일하다.


예제) 2-3 : 2-3.asp

<% Language=VBScript %>

<html>

<head>

<title> 차원 배열 </title>

</head>

<body>

Dim myArray(4)

myArray(0) = "바람의 파이터"

myArray(1) = "역도산"

myArray(2) = "해리포터"

myArray(3) = "반지의 제왕"

myArray(4) = "스파이더맨"

Response.Write "내가 좋아하는 영화<br><br>"

Response.Write myArray(0) & "<br>"

Response.Write myArray(1) & "<br>"

Response.Write myArray(2) & "<br>"

Response.Write myArray(3) & "<br>"

Response.Write myArray(4) & "<br>"

%>

</body>

</html>


1차원 배열은 다음과 같은 형태로 메모리에 저장

원소인덱스 0 1 2 3 4
바람의 파이터 역도산 해리포터 반지의 제왕 스파이더맨

②2차원 배열

Dim myArray(4, 3)

선언된 배열은 각각 5개 와 4개의 원소를 갖는 2차원 배열이면 1차원배열이 여러개 존재하는 표의 형태로 생각하면 된다.

  0 1 2 3 4
0 myArray(0, 0) myArray(0, 1) myArray(0, 2) myArray(0, 3) myArray(0, 4)
1 myArray(1, 0) myArray(1, 1) myArray(1, 2) myArray(1, 3) myArray(1, 4)
2 myArray(2. 0) myArray(2, 1) myArray(2, 2) myArray(2, 3) myArray(2, 4)
3 myArray(3, 0) myArray(3, 1) myArray(3, 2) myArray(3, 3) myArray(3, 4)

<% Language=VBScript %>

<html>

<head>

<title> 차원 배열 </title>

</head>

<body>

Dim myArray(4)

myArray(0, 0) = "바람의 파이터"

myArray(1, 0) = "역도산"

myArray(2, 0) = "태극기 휘날리며"

myArray(3, 0) = "실미도"

myArray(4, 0) = "어린신부"

Response.Write "내가 좋아하는 영화와 주연배우<br><br>"

Response.Write myArray(0, 0) & "-" & myArray(1, 0) & "<br>"

Response.Write myArray(0, 1) & "-" & myArray(1, 1) & "<br>"

Response.Write myArray(0, 2) & "-" & myArray(1, 2) & "<br>"

Response.Write myArray(0, 3) & "-" & myArray(1, 3) & "<br>"

Response.Write myArray(0, 4) & "-" & myArray(1, 4) & "<br>"

%>

</body>

</html>


6.ASP의 연산자

VBScript에는 연산자의 기능에 따라 산술 연산자, 논리 연산자, 비트 연산자 ,비교 연산자 로 나눌수 있다.


①ASP의 산술 연산자

7.ASP의 조건문

ASP에서 제공되는 조건문은 If ~ Then ~ Else 구문과 Select Case 구문 두가지가 있다.

①If ~ Then ~ Else

If ~ Then ~ Else구문은 If구문에 지정된 조건에 따라 특정 코드를 선택해서 실행될 수 있도록하는 구문이다.


⑴If 구문

If구문은 If구문의 조건이 True일 때 한줄의 코드를 실행하기 위해 사용한다.

If 조건문 Then 조건문이 참일 때 실행될 구문


예제) 2-7 : 2-7.asp

<% @Language=VBScript %>

<html>

<head>

<titile>If 구문</titile>

</head>

<body>

<%

Dim a

a = 5

if a = 5 Then Response.Write "a가 5보다 작다"

if a < 5 Then Response.Write "a는 5와 같다"

if a > 5 Then Response.Write "a는 5보다 크다"

%>

</body>

</html>


(2)If ~ End if

If 구문의 경우 If 구문의 조건식이 참일 때 실행될 문장이 단 한 문장인 경우에만 사용 할수 있다.

만일 if구문의 조건식이 참일 때 실행될 문장이 두줄 이상이라면 If ~ End If 구문을 사용해야 한다.

If 조건식 Then

조건식이 참일 때 실행될 문장1

조건식이 참일 때 실행될 문장2

.

조건식이 참일 때 실행될 문장n

End if


예제) 2-8 : 2-8.asp

<% @Language=VBScript %>

<html>

<head>

<titile>If ~ End If 구문</title>

</head>

<body>

<%

Dim a

a = 5

If a =5 Then

Response.Write "현제 변수의 a의 값은"

Response.Write a

Response.write " 입니다."

End If

</body>

</html>


(3)If ~ Else ~ End If 구문

지금까지 살펴본 If 구문은 If 구문의 조건식이 참일 때 특정코드를 실행하도록 하는 구문이었다.

If ~ Else ~ End If 구문을 사용하면 조건식이 거짓일 때 실행될 코드 또한 지정할 수가 있다.

If 조건식 Then

조건식이 참일 때 실행될 문장

Else

조건식이 거짓일 때 실행될 문장

End If


예제) 2-9 : 2-9.asp

<% @Language=VBScript %>

<html>

<head>

<title>If ~ Else ~ End If 구문</title>

</head>

<body>

<%

Dim a

a =5

If a = 5 Then

Response.Write "a는 5이다"

Else

Response.Write "a는 5가 아니다."

End If

%>

</body>

</html>

 If ~ Else ~ End If 구문에 의해 변수 a가 5라는 값을 가지는지 그렇지 않은지 검사하고 그에 따라 다른 결과를 출력할수 있다.


(4)If ~ ElseIf ~ Else ~ End If

If ~ ElseIf ~ Else ~ End If 구문은 여러개의 조건식을 검사하기 위한 If구문의 또 다른 형태이다.

If 조건식1 Then

조건식이 참일 때 실행될 문장

ElseIf 조건식2 Then

조건식2가 참일 때 실행될 문장

ElseIf 조건식n Then

조건식n이 참일 때 실행될 문장

Else

위의 조건식이 모두 거짓일 때 실행될 문장

End If


예제) 2-9 : 2-9.asp

<% @Language=VBScript %>

<html>

<head>

<titile>If ~ ElseIf ~Else ~ End If</title>

</head>

<body>

<%

Dim a

a = 5

If a < 5 Then

Response.Write "a는 5보다 작다"

Else a = 5 Then

Response.Write "a는 5이다"

Else

Response.Write "a는 5보다 크다"

End If

%>

</body>

</html>


② Select Case 구문

Select Case 구문은  여러개의 Else If 구문을 포함하는 경우의 If구문에 비해 실행 속도면에서 뛰어나다.


(1)일반적인 Select Case 구문의 사용

Select Case 변수

Case 변수값1

변수의 값이 변수 값 1일 때 실행될 구문

Case 변수값2:

변수의 값이 변수 값 2일 때 실행될 구문

Case 변수값n

변수의 값이 변수 값 3일 때 실행될 구문

Case Else

변수의 값이 Case 문에 열거된 값을 갖지 않을 때 실행될 구문

End Select


예제) 2-11 : 2-11.asp

<% @Language=VBScript %>

<html>

<head>

<title>Select Case 구문</title>

</head>

<body>

<%

Dim a

a = 3

Select Case a

Case 1

Response.Write "a는 1입니다.

Case 2

Response.Write "a는 2입니다.

Case 3

Response.Write "a는 3입니다.

Case 4

Response.Write "a는 4입니다.

Case 5

Response.Write "a는 5입니다.

Case Else

Response.Write "a는 5보다 큽니다.

End Select

%>

</body>

</html>


(2) Case 구문에서 여러값을 검사하기

Case 구문에서는 콤마를 이용하여 여러 값을 검사할 수 있다.


예제) 2-12 : 2-12.asp

<% @Language=VBScript %>

<html>

<head>

<title>Select Case 구문</title>

</head>

<body>

<%

Dim a

a = 3

Select Case a

Case 3, 5

Response.Write "a는 3 이거나 5 이다."

Case  Else

Response.Write "a는 3이나 5가 아니다."

End Select

%>

</body>

<html>


(3)Case 문에서 문자열 사용


예제) 2-13 : 2-13.asp

<% @Language=VBScript %>

<html>

<head>

<title>Select Case 구문</title>

</head>

<body>

<%

Dim myName

myName = "webgenie"

Select Case myName

Case "webgenie"

Response.Write "올바른 사용자 입니다."

Case Else

Response.Write "올바른 사용자가 아닙니다."

End Select

%>

</body>

</html>


8.ASP의 반복문

ASP에는 크게 4가지 반복문이 존재 한다.

①For ~ Next 구문

For ~ Next 구문은 사용 빈도가 상당히 높은 반복문

이구문은 코드가 반복될 회수를 미리 정의할 수 있다는 것이 가장 큰 장점이다.


For 카운트변수 = 초기값 To 종료값 [Step 카운트변수의 증가값]

반복 실행될 코드

Next


1)For ~ Next 구문의 사용예


예제)2-14 : 2-14.asp

<% @Language=VBScript %>

<html>

<head>

<title>For ~ Next</title>

</head>

<body>

Dim i

For i = 1 To 10

Response.Write "현재 i 변수의 값은"

Response.Write i

Response.Write " 입니다.<br>"

Next

%>

</body>

</html>

루프 카운터 변수 : For 문의 i 변수는  For문의 반복 회수를 자동으로 보관하게 되는 함수


2)For ~ Next 구문의 증가치 조절하기


 For i = 1 To 10 Step 1

Next


step 키워드를 사용해서 루프 카운트 변수의 증가치를 개발자가 임의로 변경할 수 있다.

<% @Language=VBScript %>

<html>

<head>

<title>For ~ Next 구문</title>

</head>

<body>

Dim i

For i = 1 To 10 Step 2

Response.Write "현재 i의 변수의 값은"

Response.Write i

Response.write " 입니다.<br>"

Next

%>

</body>

</html>

 i의 변수값은 1부터 10까지 2씩 증가하고 있다.


3)For ~ Next 구문의 반복 실행을 중단하기


예제)2-16 : 2-16.asp

<% @Language=VBScript %>

<html>

<head>

<title>Exit For 구문</title>

</head>

<body>

<%

Dim i

For i = 1 To 10

Response.Write "현재 i변수의 값은"

Response.Write i

Response.Write " 입니다.<br>"

If i = 5 Then Exit For

Next

%>

</body>

</html>


If 구문에 의해 루프 카운터 변수 i의 값이 5가 되면 Exit For 구문을 호출한다.

따라서 이 페이지는 총 5번의 루프를 실행하게 될 것이다.


②For Each ~ Next 구문

앞서 살펴본 For ~ Next 구문은 루프 카운터 변수를 이용하여 개발자가 지정한 회수만큼 반복 실행 할수 있는 구문이었다.

For Each ~ Next 구문은 배열이나 컬렉션에서 각 원소를 자동으로 순환해 주는 편리한 구문이다.


For Each 변수 in 배열 또는 컬렉션

반복 실행될 구문

Next


예제) 2-17 : 2-17.asp

<% @Language=VBScript %>

<html>

<head>

<title>For Each ~ Next</title>

</head>

<body>

<%

Dim myArray(4)

myArray(0) = "바람의 파이터"

myArray(1) = "역도산"

myArray(2) = "해리포터"

myArray(3) = "반지의 제왕"

myArray(4) = "스파이더맨"

Response.Write "내가 좋아하는 영화<br><br>"

For Each item in myArray

Response.Write item & "<br>"

Next

%>

</body>

</html>


For Each ~ Next 구문은 myArray 배열의 각 원소를 순환하면서 원소를 item 변수에 차례되로 대입한다.

For Each ~ Next 구문 역시 For ~ Next  구문과 같이 Exit For 구문을 이용하여 루프를 도중에 중단할수 있따.


③While ~ Wend 구문

While ~ Wind 구문은 주어진 조건식에 따라 조건식이 True인 동안 계속해서 코들르 반복실행할 수 있는 구문이다.

For ~ Next 구문도 그렇지만 이 구문 역시 다른 구문들과 달리 End while 로 끝나지 않는 것에 주의한다.


While 조건

'반복 실행될 구문

Wend


While ~ Wind은 For ~ Next 구문이나 다음에 나올 Do Loop 구문처럼 루프실행을 중단할수 있는 방법이 없다.


예제) 2-18 : 2-18.asp

<% @Language=VBScript %>

<html>

<head>

<title>While ~ Wend 구문 </title>

</head>

<body>

<%

Dim i

i = 1

While i <= 5

Response.Write "현제 i 변수의 값은"

Response.Write i

Response.Write " 입니다.<br>"

i = i + 1

Wend

%>

</body>

</html>

While 구문은 반복되는 코드를 실행할 때마다 조건을 검사하고 이조건이 True 일때만 반복문을 실행한다.


④Do ~ Loop

Do ~ Loop 구문은 방금 살펴본 While ~ Wend 구문에 비해 더욱 유연한 루프를 처리 할수 있다.

Do ~ Loop 구문은 While ~ Wend 구문과 비슷하지만 다음과 같이 두가지 형식으로 사용될 수 있다.


Do While 조건식

'조건식이 True인 동안 반복 실행될 구문

Loop


DO Until 조건식

'조건식이 True가 될 때까지 반복 실행될 구문

Loop


Do ~ Loop 구문은 While 나 Until 중 하나를 사용할 수 있으며 While 과 Until 위치에 따라 또 두가지 사용 형식을 가진다.


Do [While | Until ] 조건식

'반복 실행될 구문

Loop


Do

'반복 실행될 구문

Loop [While | Until ] 조건식


While 또는 Until 는 Do 옆에 나타나거나 Loop 옆에 나타 날수 있다.

따라서 총 4가지 형식이 존재하는 셈이다.


Do While ~ Loop 구문

Do While ~ Loop 구문은 조건식이 참인 동아 ㄴ반복해서 코드를 실행하는 구문이다.


예제) 2-19 : 2-19.asp

<% @Language=VBScript %>

<html>

<head>

<titile>Do While ~ Loop</titile>

</head>

<body>

Dim i

i = 10

Do While i < 5

Response.Write "현제 i 변수의 값은"

Response.Write i

Response.Write " 입니다.<br>"

i = i + 1

Loop

%>

</body>

</html>


Do While 구문에 지정된 i < 5 라는 조건은 처음 시작부터 False 라는 값을 갖게 된다.

따라서 이 페이지는 아무런 결과도 출력 되지 않는다.


Do ~ Loop While 구문

Do While ~ Loop 구문은 조건식을 판단한 후 이 조건식이 True이면 Do Loop 구문내의 코드를 반복 실행한다.

이에 반해 While ~ Do Loop 구문은 조건식을 한번 실행한 후 이 조건식이 True이면 Do Loop 구문내의 코드를 반복 실행한다.


즉, Do ~ Loop While 구문은 비록 조건식이 False라 하더라도 한번은 Do ~ Loop 구문내의 코드가 실행된다는 것이다.


예제) 2-20 : 2-20.asp

<% @Language=VBScript %>

<html>

<head>

<title>Do ~ Loop While 구문</title>

</head>

<body>

<%

Dim i

i = 10

Do

Response.Write "현재 i 변수의 값은"

Response.Write i

Response.Write "입니다.<br>"

i = i + 1

Loop While i < 5

%>

</body>

</html>


Do Until ~ Loop 구문

Do Until ~ Loop 구문은 조건식이 True인 동안이 아니라 True가 될 때까지 코드를 반복 실행한다.


예제) 2-21 : 2-21.asp

<% @Language=VBScript %>

<html>

<head>

<titile>Do Until ~ Loop구문</title>

</head>

<body>

<%

Dim i

i = 1

Do Untile i > 5

Response.Write "현제 i 변수의 값은"

Response.Write i

Response.Write " 입니다.<br>"

i = i + 1

Loop

%>

</body>

</html>


즉, i가 5보다 커질 때까지 12번 라인부터 16번 라인까지의 코드를 반복하라는 의미가 된다.


9.ASP의 기타 구문

① Option Explicit 구문

Option Explicit 구문은 ASP 개발자가 반드시 변수를 선언한 후에 사용하도록 한다.


예제) 2-22 : 2-22.asp

<% @Language=VBScript %>

<% Option Explicit %>

<html>

<head>

<titile>Option Explicit</title>

</head>

<body>

Dim myName

myName = 'webhenie'

myAge = 31

Response.Write "내 이름은 " & myName & "이며 "

Response.Write "내 나이는" & myName & "입니다."

%>

</body>

</html>


② On Error 구문

On Error 구문은 미약하지만 ASP 페이지가 실행 도중에 오류가 발생했을 때 오류 처리를 할 수 있도록 해주는 구문

On Error 구문은 다음과 같이 두가지 형태로 사용된다.


On Error Resume Next

On Error Goto 0


Resume Next 옵션

오류가 발생하면 오류가 발생한 코드의 실행을 중단하고 다음 라인의 코드를 계속 실행하여 결과를 출력한다.

Goto 0 옵션

오류가 발생하면 실행을 멈추고 오류의 내용을 페이지에 출력하게 된다.


예제) 2-23 : 2-23.asp

<% @Language=VBScript %>

<% Option Explicit %>

<% On Error Resume Next %>

<html>

<head>

<title>On Error 구문</title>

</head>

<body>

Dim myName

myName = "webgenie"

MyAge = 31

Response.Write "내 이름은 " & myName & "이며."

Response.Write "내 나이는 " & myAge & "입니다."

</body>

</html>

선언하지 않는 변수 myAge 때문에 발생한 오류의 내용이 출력되는 것이 아니라 코드 부분이 무시된채 실행결과가 출력된다.


③Set 구문

Set 구문은 ASP에서 매우 중요한 역할을 담당하는 구문이다.

ASP는 자체적으로 내장된 기능은 빈약한 편이지만 대신 COM기반 컴포넌트를 이용하여 거의 무한대로 기능을 확장할수 있다.

Set 구문은 이러한 컴퓨넌트를 이용할 때 주로 사용하게 되는 구문이다.


Set 변수 = 개체식

개체식이란 특정 COM 개체를 표현하는 식을 의미한다. 5장에서 Set 구문을 만나게 될 것이다.


④With ~ End With 구문

이 구문은 하나의 객체 참조를 이용하여 여러가지 작업을 수행해야 할 경우 객체 참조를 편리하게 도와주는 구문이다.


다음코드 5장에서 공부할게 될 Command 객체에 여러속성 값을 대입하는 예제이다.

With Command

.ActiveConnection = connection

.CommandText  = SELECT * FROM authors

.CommandType = adCmdText

End With

예제에서 사용된 With ~ End With 구문은  Command 객체에 대해 매번 객체 참조를 요구하는 세 구문을 간략하게 해준다.


위 예제에서 With ~ End With 구문을 사용하지 않으면 다음과 같이 작성해야 한다.

Command.ActiveConnection = connection

Command.CommandText = SELECT * FROM authors

Command.CommandType = adCmdText

무엇이 다른지 금방 눈에 들어올 것이다.


10. ASP의 프로시저

프로시저는 별도로 실행딜 수 있는 일련의 코드를 가지고 있는 코드 블록이다.

ASP에서는 프로시저를 크게 두 가지로 나눈다.

리턴 값이 없는 것을 프로시저(Procedure) , 리턴 값이 있으면 함수(Function)이라고 한다.


①프로시저를 사용하는 이유

웹 응용 프로그램의 구현에 사용된 코드의 재사용성을 높이고 프로그램을 모듈화하기 위해서이다.


프로시저 사용과정

  • 웹 응용 프로그램 전반에 걸쳐 공통적으로 사용되는 코드가 존재
  • 이 코드를 프로시저나 함수로 별도의 파일에 따로 정의
  • 서버측 인클루드(SSI : Server Side Include) 기능을 이용하여 필요한 페이지에 프로시저나 함수가 구현된 파일을 포함
  • 필요한 곳에 이 프로시저나 함수를 호출함으로써 쉽게공통된 기능을 이용할수 있다.

②프로시저 정의하기

프로시저는 Sub ~ End Sub 키워드를 이용하여 정의 , 함수는 Function ~ End Function 키워드를 이용하여 정의 된다.


Sub 포로시저이름

'프로시저를 구현하는 코드

End Sub


Function 함수 이름

'함수를 구현하는 코드

End Function


예제) 2-24 : 2-24.asp

<% @Language=VBScript %>

<%

Fuction GetMyName

Dim myName

myName = "webgenie"

GetMyName = myName

End Function


Sub PrintMyName

Response.Write "내이름은 webgenie 입니다."

End Sub

%>

<html>

<head>

<titile>ASP의 프로시저</title>

</head>

<body>

<%

Response.Write "내이름은" & GetMyName & "입니다.<br>"

PrintMyName

%>

</body>

</html>

한개의 함수와 한개의 프로시저를 정의하고 있다.


함수

GetMyName함수는 myName 이라는 변수를 선언하고 이 변수를 webgenie 라는 문자열을 대입한 뒤 이 변수를 리턴한다.

함수에서 값을 리턴할 때는 함수의 이름에 리턴할 겂을 대입하는 방법을 사용한다.


프로시저

PrintMyName프로시저는 Response.Write 구문을 이용하여 문자열을 출력한다.


③매개 변수가 있는 프로시저 (이해 안됨)

매개변수

프로시저나 함수가 실행되는데 필요한 데이터를 외부로 부터 반아오기 위한 변수를 의미

프로시저나 함수의 내부에서만 사용되는 지역 변수의 형태를 가지고 있다.


Sub | Function 프로시저이름 (매개변수1 , 매계변수2 , 매계변수3)

End Sub | Function


예제) 2-25 : 2-25.asp

<% @Language=VBScript %>

<%

Sub Print(msg)

Response.Write msg

End Sub

%>

<html>

<head>

<title>매개 변수를 갖는 ASP의 프로시저</title>

</head>

<body>

<%

Dim i

For i To 5

Print "현제 i 변수의 값은"

Print  i

Print "입니다.<br>"

Next

%>

</body>

</html>


④매개 변수의 전달 방식

함수나 프로시저에 선언된 매개 변수에 데이터를 전달할 때 사용하는 방식은 크게 두가지가 있다.

1.매개변수에 데이터의 복사본을 전달하는 방법 , 값에 의한 호출(Call By Value)

2.데이터에 대한 참조를 전달하는 , 방식 참조에 의한 호출(Call By Reference)


두가지 방식의 구분은 ByVal , ByRef 키워드로 가능하며 둘중 어떤 키워드도 사용하지 않은 매개변수는 ByVal이 된다.


예제) 2-26 : 2-26.asp

<% @Language=VBScript %>

<%

Sub SwapByVal(ByVal a,ByVal b)

Dim temp

temp = b

b = a

a = temp

End Sub

Sub SwapByRef(ByRef a, ByRef b)

Dim temp

temp = b

b = a

a = temp

End Sub

Dim num1 , num2

num1 = 10

num2 = 5

%>

<html>

<head>

<titile>ByVal과 ByRef</title>

</head>

<body>

<%

SwapByVal num1 , num2

Response.Write "num1은" & num1 & ", num2는 " & num2 & "입니다.<br>"

SwapByRef num1 , num2

Response.Write "num1은" & num1 & ", num2는 " & num2 & "입니다.<br>"

%>

</body>

</html>


3 Global.asa 파일과 ASP 의 내장 객체

1.Global.asa 파일

Global.asa 파일은 웹 응용 프로그램의 전반에 영향을 미치는 어떤 작업을 위한 파일이다.

확장자 ASA는 웹응용 프로그램을 위한 확장자이다.

Global.asa 파일은 기본적으로 RUNAT=Server라는 특성을 가지고 있는 스크립트 태그로 이루어져 있다.

RUNAT=Server 라는 특성 때문에 <SCRIPT>태그에 작성된 코드는 서버에서 해석되고 실행된다.

<SCRIPT LANGUAGE=VBScript RUNAT=Server>

</SCRIPT>

이 태그 내부에 4개의 이벤트를 처리하기 위한 코드를 작성할수 있다.


① Application 과 Session의 이해

ASP를 이용하여 웹사이트를 구축하면 이 웹 사이트가 바로 하나의 웹 응용 프로그램이 된다.

Application 이라는 개념은 웹 응용프로그램을 실행하는 모든 사용자가 공유할 수 있는 개념으로 생각하면 된다.

Session 은 웹 응용 프로그램과 이를 사용하는 개별적인 사용자 사이에 생성되는 가상의 공간이다.


②Global.asa 파일에서 제공하는 이벤트

가장 처음 접속하는 사용자에 의해 웹 응용 프로그램이 본격적으로 실행되기 시작할 것이다.

이때 한번의 이벤트가 발생하는데 이것이 바로 Aplication  객체의 Start 이벤트이다.

이것은 Sub Aplication_OnStart ~ End Sub  형식으로 구현된다.


두번째 사용자가 접속하면 새로운 사용자를 위한 새션이 생성 되므로 그 이후로는 Session 객체의 Start 이벤트가 실행된다.

이것은 Sub Session Onstart ~ End Sub 형식으로 구현된다.


사용자가 웹 응용프로그램의 실행을 마친후 20분이 지나면 세션이 종료되면서 Session OnEnd 이벤트가 발생된다.

이것은 Sub Sesson OnEnd ~ End Sub 형식으로 구현된다.


마지막 사용자가 웹 응용프로그램의 실행을 마친후 20분이 지나면 Session End 이벤트와 Aplication End 이벤트가 발생된다.

이것은 Sub Application OnEnd ~ End Sub 형식으로 구현된다.


Global.asa 파일의 이벤트 구현하기

예제) 3-1: global.asa

<SCRIPT LANGUAGE=VBScript RUNAT=Server>

Sub Application_OnStart

Application("current_Visit") = 0

End Sub


Sub Session_Onstart

Application("current_visit") = Cint(Application("current_visit")) + 1

End Sub


Sub Session_OnEnd

Application("current_visit") = Cint(Application("current_visit")) - 1

End Sub


Sub Application_OnEnd

Application("current_Visit") = 0

End Sub


예제) 3-2: 3-1.asp

<% @Language=VBScript %>

<html>

<head>

<title>Global.asa 파일 예제</title>

</head>

<body>

현제 접속자 수는 <% = Application("current_visit") %>명 입니다.

</body>

<hml>

하나의 IE를 더 실행시켜보면 접속자수가 1씩 증가하는 것을 볼수 있을 것이다.


2.ASP의 주요 내장 객체

ASP는 개발자가 웹 응용 프로그램을 개발하는데 필요한 작업을 수행하는데 도움을 주기 위해 5개의 내장 객체를 지원한다.

객체 설명
Application 웹 응용 프로그램 전반에 적용될 데이터를 보관하거나 관련된 작업을 수행하는데 함수들을 제공한다.
Session 개별 사용자에게 할당되는 세션을 구현한 객체이다.
Server 웹 서버와 관련된 작업을 수행하는 함수들을 제공한다.
Request 사용자의 요청과 관련된 데이터와 작업을 수행하기 위한 함수들을 제공한다.
Response

서버와 응답과 관련된 데이터와 작업을 수행하기 위한 함수들을 제공한다.

중요한 것들임으로 꼭 기억하자..


*참고*


메서드

함수와 동일한 개념으로 객체 지향 프로그램이 언어에서 함수의 역할으 수행하는 요소를 말한다.


컬렉션

배열과 유사한 개념이다. 각 원소마다 고유의 키 문자열이 있다. 따라서,

배열처럼 인덱스를 통해 원소에 접근할수 있는 방법 외 원소의 키 문자열을 이용하여 각 원소에 접근할수 있는 방법도 제공

또한 배열과 달리 한 원소를 제거하면 컬렉션이 자동으로 재배치되는 등 편리한 기능을 제공하지만

배열에 비해 많은 서버 메모리를 사용한다는 단점도 있다.


① Application 객체

Application 객체는 웹 응용 프로그램 전반에 걸처 적용될 수 있는 데이터의 보관 및 제어 를 위한 컬렉션과 메서드를 제공한다


Application 객체에 데이터를 보관하기 위한 코드는 다음과 같다.

Application(키 문자열) = 값


Application에 보관되는 데이터는 Contents 컬렉션에 추가된다.

이 컬렉션은 각 데이터를 고유의 키 문자열로 구분하기 때문에 기 문자열과 그에 저장될 값이 필요하다.

또 동일한 문자열을 갖는 키 문자열이 존재할 수 없다.


1.Application 객체의 컬렉션

Application 객체는 웹 응용 프로그램 전반에 걸쳐 사용될 수 있는 변수의 값이나 속성들을 컬렉션 형태로 가지고 있다.


  • Applicaton.Content  컬렉션

이 컬렉션은 Application 객체에 선언된 모든 항목들의 목록을 가지고 있는 컬렉션이다.

예제) 3-3 : 3-2.asp

<% @Language=VBScript %>

<% Option Explicit %>

<html>

<head>

<title>Application.Content 컬렉션</title>

</head>

<body>

<%

Dim i

Dim key

For i = 1 To 10

Application("item" & i) = "아이템" & i

Next

For Each key In Application.Contents

Response.Write key & "=" & Application(key)

Response.Write "<br>"

Next

%>

</body>

</html>


For ~ Next 구문은 i 변수의 값을 1부터 10까지 변화시키면서

Application 객체에 Item이라는 문자열과 i 변수의 값을 연결한 문자열을 해당키에 대한 값으로 Application 객체에 추가한다.

이렇게 추가된 10개의 아이템은 모두 Application 객체의  Content 컬렉션에 포함 된다.

Content 컬렉션에 포함되어 있는 항목을 Application(ket)같이 eky변수를 사용해서 해당 문자열의 원소값을 가져올 수있다.


  • Application.StaticObject 컬렉션

<OBJECT> 태그에 의해 선언된 객체들으 목록을 보관하고 있는 컬렉션이다.

<OBJECT> 태그를 통한 사용하려는 객체를 Application 객체에 추가하려면 <OBJECT>태그에 SCOPE 특성을 사용한다.

<OBJECT id=obj1 progid=서버객체 아이디 SCOPE=Application Runat=Server></OBJECT>

이와 같이 선언된 객체는 Application 객체에 보관된다.

이후 id 특성에 지정된 obj1이라는 이름을 키문자열로 사용하여 Application 객체를 통해 액세스할 수 있다.


  • Application.Contents.Remove 컬렉션

Application 객체의 Contnets 컬렉션은 Remove라는 메서드를 통해 Application 객체에 선언된 변수와 값을 삭제 할수 있다.


예제) 3-4 : 3-3.asp


<% @Language=VBScript %>

<% Option Explicit %>

<html>

<head>

<title>Application.Content 컬렉션</title>

</head>

<body>

<%

Dim i

Dim key

For i = 1 To 10

Application("item" & i) = "아이템" & i

Next

Application.Content.Remove "item3"

Application.Content.Remove "item5"

For Each key In Application.Contents

Response.Write key & "=" & Application(key)

Response.Write "<br>"

Next

%>

</body>

</html>

Item3과 Item5 항목이 컬렉션에서 삭제되어 출력되지 않는 것을 확인할 수 있다.


  • Application.StaticObject.remove 컬렉션

Remove메서드는 StaticObject 컬렉션에도 제공되어서 Application.StaticObject.remove 이런 식으로 사용할 수 있다.


  • Application.Contents.RemoveAll 컬렉션

Contents 컬렉션에 보관된 모든 항목을 제거하는 기능을 제공한다.


  • StaticObject.Contents.RemoveAll 컬렉션

StaticObjects 컬렉션에서도 적용되어서 StaticObject.Contents.RemoveAll 이런식으로 사용할 수 있다.


2.Application 객체의 메서드

Application 객체는 단 2개의 메서드를 제공하는 서로 짝을 이루어져 사용된다.

  • application.Lock 메서드와 application.UnLock 메서드

두명이 동시에 사용하는 상황에서 application개체에 데이터를 동시에 변경하려고 한다면 원치않는 결과가 나타날 수 있다.

이런 이유로 application 객체는 어떤 사용자가 자신이 보관하고 있는 데이터를 변경할 때

다른 사용자가 데이터의 변경 작업을 수행할 수 없도록 하는 기능과 이를 해제 하는 기능을 제공한다..


<%
Application.Lock

'Application 객체에 보관된 데이터를 변경한느 작업을 수행한다

Application.UnLock

%>


② Session 객체

Session 객체는 웹 서버와 웹 서버에 접속한 개별적인 사용자 사이의 독립되 공간을 표현한다.

개별적인 세션을 관리하기 위한 속성과 컬렉션, 메서드를 제공 하는 객체이다.

Session 객체는 다른사용자의 접근이 허용 되지 않아서 사용자마다 별도로 관리해야 한느 데이터를 보관하기에 알맞다.


Session 객체에 데이터를 보관하기 위한 코드는 다음과 같다.

Session(키 문자열) = 값


Session 객체 역시 Application 객체와 마찬가지로 키와 값의 쌍으로 이루어지는 코드를 작성해야 한다.

이렇게 추가된 데이터는 Session.Content 컬렉션에 추가된다.


1.Session 객체의 속성

Session 객체는 개별적인 상요자 공간을 구별하고 관리할 수 있는 몇가지 속성들을 제공한다.

이들 속성의 일부는 속성 값을 가져올 수만 있으며 개발자가 임의로 값을 설정할 수 없는 일기 전용 속성이다.


  • Session.SessionID 속성

웹서버에 하나의 세션이 생성될 때마다(새로운 사용자가 접속) 해당 사용자의 세션을 구별하기 위해 IIS가 부여하는 고유한 값을 가져오는 읽기 전용의 속성이다.


Session ID 속성의 값을 확인하기 위한 예제

예제) 3-5 : 3-4.asp

<% @Language=VBScript %>

<html>

<head>

<titile>Session.SessionID 속성</title>

</head>

<body>

Response.Write "현재  세션 ID: "

Response.Write Session.SessionID

%>

</body>

</html>


  • Session.Timeout 속성

Global.asa에서 20분 동안 사용자가 웹 응용 프로그램의 실행종료 또는 서버에 요청을 보내지 않으면 세션을 파기한다고 했다.

20분은 기본값이며 Session 객체의 Timeout 속성을 이용해서 지정된 시간이 지난후 세션을 자동적으로 파기 시킬수 있다.


<% Session.Timeout = 10 %>

분단위로 지정 되며, 위 예제를 실행하면 사용자가 웹 응용프로그램을 종료한 후 10분 뒤에 세션이 자동적으로 파기된다.


2.Session 객체의 컬렉션


Session객체는 Application 객체와 완전히 동일한 Content컬렉션과 StaticObject컬렉션을 제공한다.

뿐만아니라 이컬렉션들은 각각 Remove,RemoveAll 메서드를 제공한다.


  • Session.content  
  • Session.content.Remove
  • Session.content.RemoveAll
  • Session.StaticObject
  • Session.StaticObject.Remove
  • Session.StaticObject.RemoveAll

3.Session 객체의 메서드


  • Abandon 메서드

Session객체는 Abandon 이라는 단 하나의 메서드를 제공한다.

이 메서드는 개발자가 필요한 때에 세션을 파기할 수 있도록 해준다.


<% Session.Abandon %>


로그인과 로그아웃 구현하는 방법

1.로그인구현 = Session에 UserID라는 문자열과 사용자의 ID를 저장한다.

   - 빈문자열을 받으면 로그인하지 않은 사용자

   - 어떤 문자열을 받으면 로그인한 사용자

2.로그아웃구현

   - 로그아웃 페이지를 호출하게 되면 로그아웃 페이지에서 Session.Abandon 메서드를 호출 강제적으로 세션을 파기한다.


④Request 객체

Request 객체는 클라이언트로부터 서버로 전송되는 요청을 표현하기 위한 객체

클라이언트에서 전송된 데이터를 서버에서 액세스하기 위한 여러 가지 속성과 컬랙션, 메서드를 제공한다.


1.Request 객체의 속성

Request 객체는 그 반대 되는 개념인 Response 객체에 비하면 그구조가 매운 단순하다.


  • TotalByte 속성

클라이언트로 부터 서버로 전달된 데이터의 총 바이트수(크기)를 보관하고 있는 속성

GET 방식으로 전달된 데이터는 이 속성에 포함되지 않으며 POST방식으로 전달된 데이터만 이 속성을 사용할수 있다.

'Web(웹) Study > ASP .NET' 카테고리의 다른 글

웹서버 컨트롤  (0) 2008.07.15
VBScript개요와 기본적인 사용법  (0) 2008.07.15
데이터그리드로 데이터 전송  (0) 2008.07.15
XML 파일 읽기  (0) 2008.07.15
Global.asa 파일의 구성  (0) 2008.07.15
HTML 서버 컨트롤


웹 서버 컨트롤이란?

웹 서버 컨트롤은 HTML 컨트롤과 마찬가지로 runat="server" 속성을 가진다. 또한 이 컨트롤을 포함한 웹페이지를 읽을 때 ASP.NET 런타임에 의해 서버에서 해당 기능을 처리하게 된다. 상호 작용할 수 있는 서버 이벤트를 발생시킬 수 있다는 부분도 HTML 서버 컨트롤과 동일하다. 더불어 코드 상에서 해당 컨트롤을 참조할 수 있도록 id 속성을 가진다는 것도 같다. 모든 면에서 HTML 서버 컨트롤과 거의 흡사하다.

무엇이 다른가?

HTML 서버 컨트롤과 웹 서버 컨트롤의 명백한 차이점이 있다면 웹 서버 컨트롤은 HTML 태그 이름 형식을 안취한다는 것이다. 이것은 HTML 서버 컨트롤이 HTML 태그와 긴밀히 연관이 있는 것과는 달리 웹 서버 컨트롤은 HTML 태그와 그다지 연관이 없기 때문이다. HTML 서버 컨트롤은 관련 HTML 태그로 클라이언트 측에 결과를 내보내지만 웹 서버 컨트롤은 관련 임무를 수행하기 위해 필요한 여러 HTML 태그를 합성하여 내보낸다. 대개 웹 서버 컨트롤의 기능이 좀 더 복잡하고 하나의 HTML 태그로는 처리 안되는 경우가 많다. 웹 서커 컨트롤의 오브젝트 모델은 일반적으로 HTML 서버 컨트롤보다 더 복잡하고 추상적이다.

어떻게 생겼나?

간단한 웹 서버 컨트롤의 예를 보면 다음과 같다.

<asp:label id="lblSample" runat="server" />


위의 코드는 단순한 레이블 컨트롤(label control)이다. 이 레이블에 텍스트를 할당하면 <span> 태그로 둘러 싸인 텍스트가 출력되어 나온다. 위의 코드를 이용한 가장 간단한 예제는 다음과 같다.

<%@ Page Language="VB" %>
<script-x runat="server">
        Sub Page_Load(Sender As Object, E As EventArgs)
                lblSample.Text = "Hello World!"
        End Sub
</script-x>

<html>
<head>
<title>ASP.NET Label Web Control Sample</title>
</head>
<body bgcolor="#FFFFFF">

<asp:label id="lblSample" runat="server" />

</body>
</html>


웹 서버 컨트롤의 예

위의 내용이 너무 단순하다고 생각하는 사람을 위한 또 다른 예제를 하나 보여주겠다.

calendarsample.aspx <%@ Page Language="VB" %>
<script-x runat="server">
    Sub btnSubmit_Click(Sender As Object, E As EventArgs)
        If calSample.SelectedDates.Count = 0 Then
            frmDateSelection.Visible = True
            lblSelectedDate.Visible = False
        Else
            frmDateSelection.Visible = False
            lblSelectedDate.Visible = True
            lblSelectedDate.Text = "You Selected: " _
                & calSample.SelectedDate
        End If
    End Sub
</script-x>

<html>
<head>
<title>ASP.NET Calendar Web Control Sample</title>
</head>
<body bgcolor="#FFFFFF">

<div align="center">

<form id="frmDateSelection" action="calendarsample.aspx"
    method="post" runat="server">

<asp:calendar id="calSample" runat="server" />

<asp:button id="btnSubmit" text="Submit Date Selection"
    onClick="btnSubmit_Click" runat="server" />

</form>

<asp:label id="lblSelectedDate" runat="server" />

</div>

</body>
</html>

'Web(웹) Study > ASP .NET' 카테고리의 다른 글

ASP 기본 다지기  (0) 2008.07.31
VBScript개요와 기본적인 사용법  (0) 2008.07.15
데이터그리드로 데이터 전송  (0) 2008.07.15
XML 파일 읽기  (0) 2008.07.15
Global.asa 파일의 구성  (0) 2008.07.15
VBScript-x개요와 기본적인 사용법









우리가 여기에서 배우게 될 VBScript-x는 그 내용의 기준을 Client Side VB Script-x가 아닌 ASP에서 사용될 Server Side VBScript-x를 위주로 학습될 것임을 다시 한번 밝혀두는 바입니다.



1. 작성법

작성하는 방법에는 두가지 방법이 있다.

1. Script-x tag를 이용하는 방법이고




<Script-x Language="VBscript-x" runat="server">

     Some VBScript-x Code....

</Script-x>



2. ASP에서 일반적으로 많이 사용되는 코딩하는 방법이다.


<%@Language=VBScript-x%>

<%

     Some VBScript-x Code....

%>




3. 대소문자의 구별이 없다.



4. 주석은 작은 따움표를(')를 이용하거나 Rem이라는 말을 사용합니다. 한 라인씩 밖에 주석처리가 되지 않습니다.


<%

'이것이 작은 따움표를 이용한 주석문입니다.

Rem 이것은 한 줄전체에 주석을 Rem으로 처리하는 방법입니다.

Dim a '이렇게 코딩과 어울려쓸 때에는 작은 따움표는 문장전체를 주석으로 하는 것과 별반 다를것이 없습니다.

Dim b : Rem 하지만 Rem을 이용한 주석의 경우에는 지금과 같이 조금 다른 방법이 사용됩니다.

%>


5. 마지막으로 긴 코딩이 너무 길어서 화면을 넘어 갈 경우 가독성이 많이 떨어지는데 이를 방지하기 위해 긴코딩의 중간에 줄나눔(Enter를 치고)을 하고 이 2줄의 코딩을 하나로 묶을 수 있는 연결자가 VBScript-x에는 존재한다.

바로 "_" 입니다.

주의) 문자열의 연결은 약간 그 모양새가 다르다. 반드시 해당 문자열을 종결가고 "&_"를 사용하여야 합니다.

그리고 시작하는 문자열에서는 문자열을 시작을 하고 사용하여야합니다.


<%

Dim a

a = "한머리의 즐거운 웹플밍세상" &_

"에 오신 것을 환영합니다." &_

"즐거운 공부되세요"

response._

write a

%>

'Web(웹) Study > ASP .NET' 카테고리의 다른 글

ASP 기본 다지기  (0) 2008.07.31
웹서버 컨트롤  (0) 2008.07.15
데이터그리드로 데이터 전송  (0) 2008.07.15
XML 파일 읽기  (0) 2008.07.15
Global.asa 파일의 구성  (0) 2008.07.15
WebForm 데이터그리드로 데이터 전송 :: 데이터 보내기  


기존의 ASP에서 각각의 ASP 페이지로 데이터를 전송하는 방법으로 쿠키나 히든필드, 쿼리문자열, 세션변수를 주로 사용했다. 이러한 기술은 ASP.NET에서도 사용할 수 있다. 하지만 ASP.NET은 데이터그리드나 데이터리스트 같은 서버사이드 컨트롤이 있기 때문에 기존 ASP 방식을 따라하는 것은 현명하다고 할 수 없겠다.

코드비하인드 vs 서버사이드 스크립트

ASP.NET으로 작업을 한다면 이 두가지 방식중에 하나를 사용해야 한다.


서버사이드 스크립트 : 이 방법은 단순히 aspx파일에 <script-x runat="server">... code ...</script-x>처럼 사용함으로 가능하다. 기존의 ASP와 유사한 방식이다.

코드비하인드 : 이 방식은 aspx와 로직을 구현하는 코드가 있는 vb 또는 cs 파일로 각각 다른 2개의 파일을 생성한다. 후자의 경우 DLL로 컴파일되어 웹서버로 전해진다. 이 방식은 비쥬얼 스튜디오 닷넷의 기본방식이다.

서버사이드 스크립트를 사용하여 데이터그리드로 데이터 전달

다음의 두 aspx를 만들자.


SendingPage.aspx : 데이터그리드 컨트롤에서 값을 입력받아서 두번째 ReceivingPage.aspx로 이동한다.

ReceivingPage.aspx : SendingPage.aspx로 부터 호출되며 데이터그리드의 데이터를 읽어들인다.

데이터 보내기

다음은 SQL서버의 pubs 데이터베이스의 authors 테이블로부터 값을 가져와서 데이터그리드를 생성한다.

<%@ Page Language="VB" ClassName="SendingPage" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script-x runat="server">
Public ReadOnly Property GridData() As System.Object
Get
' Datasource of Datagrid1 is a data table inside a dataset
Return DataGrid1.DataSource
End Get
End Property

Sub Button_Clicked (sender As Object, e As EventArgs)
Server.Transfer("ReceivingPage.aspx")
End Sub

Sub Page_Load(sender As Object, e As EventArgs)
'bind some relevant data to the grid at page load
GetData()
End Sub

Sub GetData()
Dim DS As System.Data.DataSet
Dim Con As System.Data.SqlClient.SqlConnection
Dim Ada As System.Data.SqlClient.SqlDataAdapter
Dim connStr as String
conStr = "server=localhost;uid=sa;pwd=;initial catalog=pubs"

Con = New System.Data.SqlClient.SqlConnection(connStr)

Ada = New System.Data.SqlClient.SqlDataAdapter(_
"select * from authors", Con)

DS = New System.Data.DataSet()
Ada.Fill(DS, "Table1")

'Fill the DataGrid
DataGrid1.DataSource = DS.Tables("Table1").DefaultView
DataGrid1.DataBind()
End Sub
</script-x>

<html>
<body>
<form runat="server">
<b>Visiting SendingPage.aspx</b>
<asp:datagrid id=DataGrid1 runat=server />

<asp:Button id="myButton" OnClick="Button_Clicked"
Text="Send Grid Data" runat=server />
</form>
</body>
</html>




잠시 코드를 보도록 하자. 서버사이드 스크립트 방식을 사용하기 위해서는 먼저 클래스 이름을 선언해야 한다.

<%@ Page Language="VB" ClassName="SendingPage" %>



그 다음으로 다른 페이지로 넘어갈 각 속성을 get을 사용하여 지정한다.

Public ReadOnly Property GridData() As System.Object
Get
' Datasource of Datagrid1 is a data table inside a dataset
Return DataGrid1.DataSource
End Get
End Property



SendingPage.aspx에서 ReceivingPage.aspx로 데이터를 보내기 위해서 사용자가 submit 버튼을 눌러야 한다. 이에 해당하는 button_clicked 이벤트 핸들러가 발동하면 Server.Transfer를 거쳐서 ReceivingPage.aspx로 데이터그리드 컨트롤이 보내지게 된다.

Sub Button_Clicked(sender As Object, e As EventArgs)
Server.Transfer("ReceivingPage.aspx")
End Sub



이번장에서 우리는 서버사이드 스크립트 방식을 사용하는 SendingPage.aspx의 코드와 구조에 대해서 보았다. 다음에는 요청을 받는 ReceivingPage.aspx에 대해서 보겠다.



제공 : 코리아인터넷닷컴, a 2002년 05월 30일


웹폼의 데이터그리드로 데이터 전송(2) (2) : 데이터 받기  


저번장에서 우리는 ASP.NET 웹페이지에서 어떻게 데이터를 보내는지 살펴보았다. 이번에는 ASP.NET에서 데이터를 받기 위해서 어떻게해야 하는지 알아보자.

데이터 받기

데이터를 받는 ReceivingPage.aspx는 사용자가 SendingPage.aspx에서 submit 버튼을 누르고 난후 실행된다. 여기서 데이터가 넘어올 페이지에 대해서 명시할 필요가 있다. 이는 ReceivingPage.aspx의 상단에 @Reference 디렉티브를 명시함으로 해결된다. @Reference 디렉티브는 @Page 디렉티브 아래에 기술하며 어떤곳에서 데이터가 넘어오는지를 알려준다.

<%@ Page Language="VB" %>
<%@ Reference Page="SendingPage.aspx" %>



이렇게함으로 ReceivingPage.aspx는 SendingPage.aspx로 부터 넘어오는 정보를 읽어낼 수 있다. 이 작업을 완수하기 위해서 우선 Context 개체의 핸들러 속성으로부터 HTTP Request 인스턴스를 받아야한다. 이 핸들러는 페이지가 요청되었다는 것을 알려준다. 우리가 SendingPage.aspx 핸들러를 취했을때 필요한 데이터를 잡아낼 수 있다.

Context 개체로부터 핸들러를 얻고 그것을 SendingPage 클래스의 인스턴스로 변환한다. 이 클래스는 SendingPage.aspx의 @Page 디렉티브에 표시되있다. 그리고 SendingPage 타입의 전역변수를 선언하고 Page_Load 이벤트 핸들러에서 이 전역변수에 Context의 핸들러를 저장한다.

<script-x runat="server">
Dim objSendingPage As SendingPage

Sub page_Load()
    If Not IsPostBack Then
       objSendingPage = CType(Context.Handler, SendingPage)
    End If
End Sub

...



페이지가 로드된후 objSendingPage 변수는 SendingPage.aspx의 정보를 담고있는 클래스의 인스턴스를 가지게 된다. 우리는 데이터그리드의 DataSource 속성에 접근하기 위해 이 변수를 사용하면 된다. ReceivingPage.aspx에서 데이터그리드를 하나 만들것인데 이름을 receivingDG라고 하자. 다음의 코드처럼하면 SendingPage의 데이터그리드의 값으로 receivingDG를 생성할 수 있다.

receivingDG.DataSource = objSendingPage.GridData
receivingDG.DataBind()



다음은 ReceivingPage.aspx의 전체 코드이다.

<%@ Page Language="VB" %>
<%@ Reference Page="SendingPage.aspx" %>
<script-x runat="server">

Dim objSendingPage As SendingPage

Sub Page_Load()
    If Not IsPostBack Then
       objSendingPage = CType(context.Handler, SendingPage)
    End If

    receivingDG.DataSource = objSendingPage.GridData
    receivingDG.DataBind()
End Sub
</script-x>

<html>
<body>
    <form id="Form1" method="post" runat="server">
       <b>데이터받기</b>
       <asp:DataGrid id="receivingDG" runat="server" />
    </form>
</body>
</html>



코드비하인드

앞에서 우리는 페이지의 상단에 @Reference라는 디렉티브를 선언하였다. 코드비하인드에서 이 디렉티브는 해도되고 안해도된다. 그리고 서버사이드 스크립트와 똑같이 핸들러를 구하면 된다. 다음은 코드비하인드에서의 코드이다.


public objSendingPage As sendingPage

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If Not IsPostBack Then
       objSendingPage = CType(context.Handler, SendingPage)
    End If

    receivingDG.DataSource = objSendingPage.GridData
    receivingDG.DataBind()

End Sub




여기서는 데이터그리드의 데이터를 이동하는 것을 다루었지만 다른 서버 컨트롤들도 각각의 데이터들에 대한 속성을 가지고 데이터 이동이 가능하다.

'Web(웹) Study > ASP .NET' 카테고리의 다른 글

ASP 기본 다지기  (0) 2008.07.31
웹서버 컨트롤  (0) 2008.07.15
VBScript개요와 기본적인 사용법  (0) 2008.07.15
XML 파일 읽기  (0) 2008.07.15
Global.asa 파일의 구성  (0) 2008.07.15
ASP.NET에서 XML 파일 읽기  


기존의 ASP에서 XML 데이터를 보기 위해서는 두가지 방법을 사용할 수 있었다. 첫째는 ADO 2.5를 사용하여 레코드셋으로 XML 데이터를 불러들여서 이를 웹페이지에 보여주는 방법이다. 두번째는 MSXML 컴포넌트를 사용하여 XML 파일의 내용을 읽어들여서 XSLT를 사용하여 보여주는 방법이다. 이와 유사한 방법으로 만약 여러분이 데이터베이스의 결과처럼 데이터 컬렉션처럼 사용하고 싶다면 XML Stream을 사용하여도 된다.

ASP.NET에서도 역시 다양한 방법을 사용할 수 있다. XSL을 통해서 XML 데이터를 보고자 한다면 서버컨트롤을 사용하면 된다.(<asp:xml runat="server" ... />) 만약 각 노드마다 다양한 작업을 수반한다면 MSXML 컴포넌트와 비슷한 기능을 수행하는 System.Xml 네임스페이스를 추가하여 사용하면 된다. 여기에 데이터 그리드를 추가하여 보여준다면 정렬등의 작업을 아주 손쉽게 할 수 있다. 이 글에서는 XML 데이터를 데이터 그리드를 사용하여 쉽게 보여줄수 있다는 것을 알려줄것이며 또한 XML에 쉽게 기록할 수 있다는 것도 다룰 것이다.

데이터셋에 XML 데이터 넣기

데이터셋은 프로바이더 중립적이다. 이 말은 데이터 프로바이더가 SQL 데이터 프로바이더이건 OLEDB 데이터 프로바이더이건 XML 파일이건간에 가리지 않는다는 것이다. 또한 비연결 데이터 저장 객체이기 때문에 데이터 프로바이더와 한번만 연결하여 데이터를 가지고 온 후에는 데이터 프로바이더와 연결하지 않고도 데이터를 다룰 수 있다. 하지만 데이터리더에 비해 강력한 반면 성능은 나쁘다.

XML 파일로 부터 데이터셋을 생성하는 것은 매우 쉽니다. 단순히 ReadXml 메서드를 호출하면 된다. 다음은 ReadXml 메서드를 사용하여 XML 데이터를 불러들여 데이터셋에 저장하고 데이터그리드에 보여주는 예이다.

<%@ import Namespace="System.Data" %>
<script-x runat="server">
sub Page_Load(sender as Object, e as EventArgs)
Dim myDataSet as New DataSet()

myDataSet.ReadXml(Server.MapPath("books.xml"))

dgBooks.DataSource = myDataSet
dgBooks.DataBind()

dgBooksPretty.DataSource = myDataSet
dgBooksPretty.DataBind()
end sub
</script-x>

<html>
<body>
<b>The Contents of the XML File
<a href="/demos/books.xml"><code>books.xml</code></a></b><br />
<asp:datagrid id="dgBooks" runat="server" />

<p align="center">
<b>A Nicer Looking DataGrid Representation of the XML File
<a href="/demos/books.xml"><code>books.xml</code></a></b><br />
</p>
<asp:datagrid id="dgBooksPretty" runat="server"
AutoGenerateColumns="False"
Font-Name="Verdana"
Font-Size="Small"
HorizontalAlign="Center"
ItemStyle-BackColor="#FFFFCC"
AlternatingItemStyle-BackColor="#EEEEEE">

<HeaderStyle BackColor="Red" HorizontalAlign="Center"
ForeColor="White" Font-Bold="True" />

<Columns>
<asp:BoundColumn HeaderText="Title" DataField="title" />
<asp:BoundColumn HeaderText="Author" DataField="author" />
<asp:BoundColumn HeaderText="Year" DataField="year" />
</Columns>
</asp:datagrid>




Import 디렉티브를 사용하여 System.Data 네임스페이스를 명시하였다. 이 네임스페이스에는 데이터셋 클래스각 포함되어 있다. 다음에는 Page_Load 이벤트 핸들러에서 새로운 데이터셋을 하나 생성하고 ReadXml 메서드를 사용하여 book.xml 파일에서 읽어온 내용을 데이터셋에 저장하고 데이터그리드의 DataSource 속성에 데이터셋을 지정하고 DataBind() 메서드를 사용하여 웹페이지에 보여준다.

데이터셋의 내용을 XML 파일로 기록

앞에서 보았듯이 XML 파일에서 데이터를 읽어들여서 생성한 데이터셋에 저장하는 것이 쉽다는 것을 보았다. 이번에는 반대로 데이터셋의 내용을 XML 파일에 저장하는 것을 보도록 하자. 이때는 WriteXml 메서드를 사용하면 된다.

<%@ Import Namespace="System.Data" %>
<script-x runat="server">
sub Page_Load(sender as Object, e as EventArgs)
Dim myDataSet as New DataSet()

'Populate the DataSet somehow
...

'Write the DataSet's contents to an XML file
myDataSet.WriteXml(filename)



명시한 파일로 XML 데이터를 쓰는 것을 보여주고 있다. 만약 여러분이 XML 데이터뿐만 아니라 XML 스키마까지 같이 기록하고 싶다면 myDataSet.WriteXml(filename, XmlWriteMode.WriteSchema)라고 수정해주면 된다. ADO 2.5를 사용해도 이같은 기능을 수행할 수 있지만 사람이 보기에는 매우 어렵다. 하지만 ADO.NET의 데이터셋은 가독성도 좋다. 매우 직관적이 않은가?

'Web(웹) Study > ASP .NET' 카테고리의 다른 글

ASP 기본 다지기  (0) 2008.07.31
웹서버 컨트롤  (0) 2008.07.15
VBScript개요와 기본적인 사용법  (0) 2008.07.15
데이터그리드로 데이터 전송  (0) 2008.07.15
Global.asa 파일의 구성  (0) 2008.07.15
 

이파일은 아주 유용한 파일입니다... 유용하다 못해 없으면 넘넘 짜증이 나죠. 이파일이 없다구 생각하면 프로그램이 넘 복잡해 질 수도 있을 것입니다. 아주 유용한 파일 이죠... 잘 알아 두시면 정말 편리 하게 사용 하실 수 있으실 겁니다. 그리고 지금 제가 아래 설명할 것들을 이해하셔야 Application 객체들어갈때 이해가 달 되실 겁니다. 눈크게 뜨고 보도록하죠............캬캬

Global.asa 파일의 구성...

이 파일의 구성은 크게 4가지로 나눕니다. 구성이라기 보다는 함수 라구 해야하나.. 어재든 크게 4가지로 나누어져 있습니다.

Sub Application_OnStart

End Sub

Sub Application_OnEnd


End Sub

Sub Session_OnStart

End Sub

Sub Session_OnEnd

End Sub

이렇게 4가지 함수가 들어가 있습니다.

우선 global.asa파일을 만듭니다. 코딩은...


  • <SCRIPT-x LANGUAGE="VBScript-x" RUNAT="Server">

    Sub Application_OnStart

    End Sub

    Sub Application_OnEnd


    End Sub

    Sub Session_OnStart

    End Sub

    Sub Session_OnEnd

    End Sub

    </SCRIPT-x>


일단은 이렇게 하시고 저장 하시기 바랍니다.

각 함수는 언제 실행되는가???

global.asa파일의 실행...

접속자가 asp파일을 실행하면 .. 그러니까 어떤 사람이 특정 사이트(물론 asp로 된 사이트) 에 들어오면 우리 눈에는 보이지 않지만 그 사이트의 global.asa파일이 먼저 실행 되고 나서 접속자가 실행한 asp파일이 실행 됩니다. global.asa파일이 없다면 사용자가 요청한 asp파일이 실행되겠죠.. (당연한 말이죠...T.T)

Sub Application_OnStart와 Sub Session_OnStart함수의 실행

실행될때 현재 사이트에 아무런 사람이 없다면, 음... 현재 사이트에 아무선 접속자가 없다면 Sub Application_OnStart 부터 End Sub 까지 실행이 되고 난후에 Sub Session_OnStart 부터 Session_OnEnd까지 실행이 됩니다. 하지만 현재 사이트에 한명이상이 있다면 그러니까.. 두번째부터 들어오는 사용자 부터는 Sub Application_OnStart는 실행되지 않고 Sub Session_OnStart만이 실행됩니다. 이것은 매우 중요합니다. 꼭 알아두세요.. 꼭 기억하시길....

Sub Application_OnEnd와 Sub Session_OnEnd함수의 실행

그러면 Sub Session_OnEnd와 Sub Application_OnEnd
은 언제 실행이 될까요.. 이것들은 Session이 아웃될때(이것에 대한것은 sessoin 객체를 설명할때 설명드리죠) 실행이 되고, Session이 아웃될때 그 접속자가 마지막 접속자라면, 다시 말해 이 사람이 나가면 사이트에 한명의 사용자도 없을때는 Sub Application_OnEnd 함수까지 실해이 됩니다. 반대로 이 사람이 나가도 현재 사이트에 접속되있는 사람이 있다면, Sub Session_OnEnd함수만 실행이 됩니다. Sub Application_OnEnd이 함수는 실행되지 않습니다. 이것도 아주 매우 정말로 중요합니다. 꼭 기억해 두세요...

global.asa에 대한건 여기까지 입니다.... ^^;

'Web(웹) Study > ASP .NET' 카테고리의 다른 글

ASP 기본 다지기  (0) 2008.07.31
웹서버 컨트롤  (0) 2008.07.15
VBScript개요와 기본적인 사용법  (0) 2008.07.15
데이터그리드로 데이터 전송  (0) 2008.07.15
XML 파일 읽기  (0) 2008.07.15

+ Recent posts