<OBJECT RUNAT="SERVER" SCOPE="PAGE" ID="objConn" PROGID="ADODB.Connection">
</OBJECT>
Scope 속성은 객체의 범위를 지정합니다. 위 예에서 "PAGE"로 지정되었기 때문에 객체를 생성한 ASP 페이지에만 사용할 수 있습
니다. 만약, 사용범위를 Session이나 Application까지 넓히려고 한다면 "Session", "Application" 옵션을 사용하면 됩니다.
보통 "PAGE" 옵션밖에 사용하지 못하지만, <OBJECT> 태그를 global.asa 안에 위치시킨다면 "Session", "Application" 옵션을 사
용할 수 있습니다.
참고로, PROGID 대신 객체의 CLASSID를 사용할 수도 있지만, 잘 쓰이지는 않습니다.
확장된 <OBJECT> 태그를 사용하여 Global.asa 파일에 세션 영역이나 응용 프로그램 영역을 지니는 개체를 만들 수 있
습니다. 이 태그는 독립적이며 모든 <SCRIPT> 태그 밖에 존재합니다.
Global.asa 파일에서 선언된 개체는 서버가 해당 개체를 호출하는 스크립트를 처리할 때까지 만들어지지 않습니다.
따라서 필요한 개체만 만들기 때문에 리소스가 절약됩니다.
구문
<OBJECT RUNAT=Server SCOPE=Scope ID=Identifier {PROGID="progID"|CLASSID="ClassID"}>
...
</OBJECT>
매개 변수
Scope
개체의 영역을 지정합니다. Global.asa 파일에서 Scope는 Session이나 Application으로 설정됩니다.
Identifier
개체 인스턴스에 대한 이름을 지정합니다.
ProgID
클래스 식별자와 연결된 식별자입니다. ProgID나 ClassID가 <OBJECT> 태그 안에 지정되어야 합니다.
ProgID 형식은 [Vendor.]Component[.Version]입니다.
ClassID
COM 클래스 개체의 고유 식별자를 지정합니다. ProgID나 ClassID가 <OBJECT> 태그 안에 지정되어야 합니다.
예제
다음 예제의 첫 부분은 ProgID 매개 변수를 사용하여 세션 영역 개체 MyConnection을 만듭니다.
둘째 예제는 ClassID 매개 변수를 사용합니다.
<OBJECT RUNAT=Server SCOPE=Session ID=MyConnection PROGID="ADODB.Connection">
REM Object Script
</OBJECT>
<OBJECT RUNAT=Server SCOPE=Session ID=MyConnection CLASSID="Clsid:8AD3067A-B3FC-11CF-A560-00A0C9081C21">
REM Object Script
</OBJECT>
주의
Global.asa 파일에 선언된 개체는 응용 프로그램에 있는 모든 스크립트가 사용할 수 있습니다.
예를 들어, 다음 개체를 선언한 경우
---GLOBAL.ASA---
<OBJECT RUNAT=Server SCOPE=Session ID=MyAd PROGID="MSWC.AdRotator">
</OBJECT>
응용 프로그램의 모든 페이지에서 MyAd 개체를 참조할 수 있습니다.
---SOME.ASP---
<%= MyAd.GetAdvertisement("/ads/adrot.txt") %>
참고로, 서버 컴포넌트의 객체 생성 여부를 확실히 검사하기 위해서는 IsObject() 함수(객체가 정상적으로 생성되었다면 True를,
객체 생성을 실패했다면 False를 반환)를 이용합니다.
즉, 위의 예제에서 다음과 같은 코드를 추가하면 객체 생성 여부를 확인 할 수 있습니다.
<%
If IsObjcet(MyAd) Then
' 객체가 생성되었다면 객체 사용
Else
' 객체가 생성되지 않았다면 적절한 에러 메세지 출력
End If
%>
4. 형식 라이브러리 선언
ADO 객체에는 프로퍼티와 메소드에서 사용되는 미리 정의된 많은 상수들이 있습니다.
이런 상수들을 참조하는 방법은 상수들을 #include 문을 이용해 ASP 페이지 안에 포함시키는 방법이 있습니다.
< !-- #inlcude File = "adovbs.inc" -->
이런 방법은 adovbs.inc 파일에 정의되어 있는 모든 상수를 ASP 페이지에 포함하기 때문에 ASP 페이지의 용량이 커진다는 단점
이 있습니다. 따라서, 더 나은 방법으로 형식 라이브러리 선언을 이용합니다.
형식 라이브러리 선언은 상수들을 별도의 파일로 포함하지 않고 바로 사용할 수 있게 합니다.
ASP 페이지 안에 형식 라이브러리 선언을 하면, 포함된 페이지 내에서는 ADO 상수들을 자유롭게 사용할 수 있으며,
global.asa 파일안에 포함시킨다면 애플리케이션 안에 있는 모든 페이지에서 상수들을 사용할 수 있습니다.
IIS 5.0 설명서에는 형식 라이브러리 선언을 통한 상수 사용에 대해 다음과 같이 기술되어 있습니다.
Global.asa 파일에서 형식 라이브러리를 선언하여 정의된 상수를 응용 프로그램의 모든 .asp 파일에서 사용할 수
있습니다. 형식 라이브러리를 선언하려면 Global.asa 파일에서 <METADATA> 태그를 사용합니다.
예를 들어, ADO 형식 라이브러리를 선언하려면 다음 명령문을 사용합니다.
< !--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}"-->
또는 형식 라이브러리의 UUID(Universal Unique Indentifier)를 사용하는 대신 파일 경로를 사용하여 형식 라이브러리를 참
조할 수도 있습니다.
< !-- METADATA TYPE="typelib" FILE="c:program filescommon filessystemadomsado15.dll"-->
그런 다음에는 ADO 형식 라이브러리로 선언되어 Global.asa 파일을 포함하는 응용 프로그램에 상주하는 .asp 파일에
서 ADO 상수를 사용할 수 있습니다. 다음 예제에서 adOpenKeyset와 adLockOptimistic은 ADO 상수입니다.
<%
'Recordset 개체를 만들고 엽니다.
Set rstCustomerList = Server.CreateObject("ADODB.Recordset")
rstCustomerList.ActiveConnection = cnnPubs
rstCustomerList.CursorType = adOpenKeyset
rstCustomerList.LockType = adLockOptimistic
%>
참고
#include 지시어 대신 <METADATA> 태그를 사용하여 웹 응용 프로그램의 성능을 향상시킬 수 있습니다.
상수를 직접 정의할 수 있습니다. VBScript에서는 Const 문을 사용하고, JScript에서는 var 문을 사용하여 상수 값을 변
수에 할당합니다. 여러 .asp 파일에서 동일한 상수를 사용하려면 상수 정의를 별도의 파일에 두고 해당 상수를 사용하는 각
.asp 파일에 그 파일을 포함합니다.
</OBJECT>
Scope 속성은 객체의 범위를 지정합니다. 위 예에서 "PAGE"로 지정되었기 때문에 객체를 생성한 ASP 페이지에만 사용할 수 있습
니다. 만약, 사용범위를 Session이나 Application까지 넓히려고 한다면 "Session", "Application" 옵션을 사용하면 됩니다.
보통 "PAGE" 옵션밖에 사용하지 못하지만, <OBJECT> 태그를 global.asa 안에 위치시킨다면 "Session", "Application" 옵션을 사
용할 수 있습니다.
참고로, PROGID 대신 객체의 CLASSID를 사용할 수도 있지만, 잘 쓰이지는 않습니다.
확장된 <OBJECT> 태그를 사용하여 Global.asa 파일에 세션 영역이나 응용 프로그램 영역을 지니는 개체를 만들 수 있
습니다. 이 태그는 독립적이며 모든 <SCRIPT> 태그 밖에 존재합니다.
Global.asa 파일에서 선언된 개체는 서버가 해당 개체를 호출하는 스크립트를 처리할 때까지 만들어지지 않습니다.
따라서 필요한 개체만 만들기 때문에 리소스가 절약됩니다.
구문
<OBJECT RUNAT=Server SCOPE=Scope ID=Identifier {PROGID="progID"|CLASSID="ClassID"}>
...
</OBJECT>
매개 변수
Scope
개체의 영역을 지정합니다. Global.asa 파일에서 Scope는 Session이나 Application으로 설정됩니다.
Identifier
개체 인스턴스에 대한 이름을 지정합니다.
ProgID
클래스 식별자와 연결된 식별자입니다. ProgID나 ClassID가 <OBJECT> 태그 안에 지정되어야 합니다.
ProgID 형식은 [Vendor.]Component[.Version]입니다.
ClassID
COM 클래스 개체의 고유 식별자를 지정합니다. ProgID나 ClassID가 <OBJECT> 태그 안에 지정되어야 합니다.
예제
다음 예제의 첫 부분은 ProgID 매개 변수를 사용하여 세션 영역 개체 MyConnection을 만듭니다.
둘째 예제는 ClassID 매개 변수를 사용합니다.
<OBJECT RUNAT=Server SCOPE=Session ID=MyConnection PROGID="ADODB.Connection">
REM Object Script
</OBJECT>
<OBJECT RUNAT=Server SCOPE=Session ID=MyConnection CLASSID="Clsid:8AD3067A-B3FC-11CF-A560-00A0C9081C21">
REM Object Script
</OBJECT>
주의
Global.asa 파일에 선언된 개체는 응용 프로그램에 있는 모든 스크립트가 사용할 수 있습니다.
예를 들어, 다음 개체를 선언한 경우
---GLOBAL.ASA---
<OBJECT RUNAT=Server SCOPE=Session ID=MyAd PROGID="MSWC.AdRotator">
</OBJECT>
응용 프로그램의 모든 페이지에서 MyAd 개체를 참조할 수 있습니다.
---SOME.ASP---
<%= MyAd.GetAdvertisement("/ads/adrot.txt") %>
참고로, 서버 컴포넌트의 객체 생성 여부를 확실히 검사하기 위해서는 IsObject() 함수(객체가 정상적으로 생성되었다면 True를,
객체 생성을 실패했다면 False를 반환)를 이용합니다.
즉, 위의 예제에서 다음과 같은 코드를 추가하면 객체 생성 여부를 확인 할 수 있습니다.
<%
If IsObjcet(MyAd) Then
' 객체가 생성되었다면 객체 사용
Else
' 객체가 생성되지 않았다면 적절한 에러 메세지 출력
End If
%>
4. 형식 라이브러리 선언
ADO 객체에는 프로퍼티와 메소드에서 사용되는 미리 정의된 많은 상수들이 있습니다.
이런 상수들을 참조하는 방법은 상수들을 #include 문을 이용해 ASP 페이지 안에 포함시키는 방법이 있습니다.
< !-- #inlcude File = "adovbs.inc" -->
이런 방법은 adovbs.inc 파일에 정의되어 있는 모든 상수를 ASP 페이지에 포함하기 때문에 ASP 페이지의 용량이 커진다는 단점
이 있습니다. 따라서, 더 나은 방법으로 형식 라이브러리 선언을 이용합니다.
형식 라이브러리 선언은 상수들을 별도의 파일로 포함하지 않고 바로 사용할 수 있게 합니다.
ASP 페이지 안에 형식 라이브러리 선언을 하면, 포함된 페이지 내에서는 ADO 상수들을 자유롭게 사용할 수 있으며,
global.asa 파일안에 포함시킨다면 애플리케이션 안에 있는 모든 페이지에서 상수들을 사용할 수 있습니다.
IIS 5.0 설명서에는 형식 라이브러리 선언을 통한 상수 사용에 대해 다음과 같이 기술되어 있습니다.
Global.asa 파일에서 형식 라이브러리를 선언하여 정의된 상수를 응용 프로그램의 모든 .asp 파일에서 사용할 수
있습니다. 형식 라이브러리를 선언하려면 Global.asa 파일에서 <METADATA> 태그를 사용합니다.
예를 들어, ADO 형식 라이브러리를 선언하려면 다음 명령문을 사용합니다.
< !--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}"-->
또는 형식 라이브러리의 UUID(Universal Unique Indentifier)를 사용하는 대신 파일 경로를 사용하여 형식 라이브러리를 참
조할 수도 있습니다.
< !-- METADATA TYPE="typelib" FILE="c:program filescommon filessystemadomsado15.dll"-->
그런 다음에는 ADO 형식 라이브러리로 선언되어 Global.asa 파일을 포함하는 응용 프로그램에 상주하는 .asp 파일에
서 ADO 상수를 사용할 수 있습니다. 다음 예제에서 adOpenKeyset와 adLockOptimistic은 ADO 상수입니다.
<%
'Recordset 개체를 만들고 엽니다.
Set rstCustomerList = Server.CreateObject("ADODB.Recordset")
rstCustomerList.ActiveConnection = cnnPubs
rstCustomerList.CursorType = adOpenKeyset
rstCustomerList.LockType = adLockOptimistic
%>
참고
#include 지시어 대신 <METADATA> 태그를 사용하여 웹 응용 프로그램의 성능을 향상시킬 수 있습니다.
상수를 직접 정의할 수 있습니다. VBScript에서는 Const 문을 사용하고, JScript에서는 var 문을 사용하여 상수 값을 변
수에 할당합니다. 여러 .asp 파일에서 동일한 상수를 사용하려면 상수 정의를 별도의 파일에 두고 해당 상수를 사용하는 각
.asp 파일에 그 파일을 포함합니다.
'asp' 카테고리의 다른 글
adXactAbortRetaining (0) | 2011.05.30 |
---|---|
Working with ASP Applications (0) | 2011.05.24 |
FSO를 이용해 로그 파일 생성 (0) | 2011.05.02 |
ASP함수 모음 (0) | 2011.04.19 |
초보자를 위한 ASP + MySQL 연동 방법 (0) | 2011.04.19 |