VB를 사용하여 ASP 서버 측 구성 요소 만들기
이 기사에서는 전통적인 디자인 방법과 비교하여 ASP 코드에서 VB 구성 요소를 호출하는 방법을 소개합니다. 이 기사에서는 독자가 VB 및 ASP에 대한 관련 입문 지식을 가지고 있다고 가정합니다.
서버 측 구성 요소와 클라이언트 측 구성 요소 비교
서버 측 구성 요소와 클라이언트 측 구성 요소에는 많은 차이점이 있습니다. 서버 측 구성 요소는 컴퓨터 서버에 등록된 dll 파일이고, 클라이언트 측 구성 요소는 브라우저가 실행되는 컴퓨터에 등록되어 있습니다. IE에서는 이러한 클라이언트 측 구성 요소를 ActiveX 브라우저 플러그인 구성 요소라고 합니다.
ActiveX 클라이언트 구성 요소는 VB로 작성되어 인터넷이나 인트라넷을 통해 브라우저로 전송되어 놀라운 효과를 생성할 수 있습니다. 문제는 ActiveX 클라이언트 측 구성 요소가 즉, VB로 작성된 서버 측 구성 요소가 순수한 HTML 코드를 생성할 수 있고 모든 브라우저에 적합하다는 것입니다. 서버 측 구성 요소의 가장 큰 문제점은 해당 구성 요소가 Windows+IIS 환경이나 IIS API와 호환되는 응용 프로그램에서 실행되어야 한다는 것입니다. 이에 비해 서버 측에서 이러한 호환성을 달성하는 것이 더 쉬운 것 같습니다.
IIS 서버측 구성 요소는 IIS와 동일한 메모리 공간에 상주하며 항상 서버에서 처리되는 ASP 웹 페이지를 호출할 준비가 되어 있습니다. 이론적으로는 브라우저에 반환되는 ASP 코드에 텍스트나 코드를 삽입할 수 있지만 일반적으로 대부분의 서버 측 구성 요소는 많은 시간이 필요한 계산이나 데이터베이스 정보 조회를 처리하는 데 사용되며 그 결과는 html 코드 형태로 브라우저에 반환됩니다.
VB 구성요소 분석
이 기사에서는 VB 구성 요소를 작성하는 기본 방법을 논의하는 것을 목표로 하므로 문제를 설명할 수 있다면 예제는 매우 간단해질 것입니다. VB 컴포넌트 작성에 대해 자세히 논의하기 전에 먼저 VB 컴포넌트를 개념적으로 분석해 보겠습니다.
VB를 사용하여 서버측 구성 요소를 작성할 때 주의해야 할 세 가지 계층적 개념(VB 및 ASP 코드 모두에서 사용됨)이 있습니다.
·프로젝트 이름
·클래스 이름
·메소드 이름
VB 프로젝트의 이름은 프로젝트 이름입니다. 많은 개발자들이 프로젝트 이름을 구성 요소 이름으로 간주하지만 VB는 프로젝트 이름으로만 간주합니다. 이 예에서 프로젝트 이름은 exampleproject입니다. 물론 자체 프로젝트 이름을 임의로 지정할 수 있습니다. 클래스 이름은 exampleclass이고 메서드 이름은 examplemethod입니다.
프로젝트 이름(구성 요소 이름)은 구성 요소 코드에서 컴파일된 dll 파일의 이름일 수도 있습니다. dll 파일에는 iis가 브라우저에 텍스트 또는 HTML 코드를 반환하는 데 사용하는 컴파일된 VB 코드가 포함됩니다.
메서드 이름은 날짜 계산, 데이터베이스의 모든 작성자 목록 표시 등 특정 코드 기능을 관리하는 Visual Basic 코드 부분을 나타냅니다. 컴포넌트 메소드는 입력된 정보를 바탕으로 특정 작업을 수행하거나 특정 정보를 반환하는 일종의 블랙박스이다. 일반적으로 구성 요소에는 여러 메서드가 있을 수 있습니다. 컴포넌트 메소드를 보다 효과적으로 관리하기 위해 유사한 분류에 따라 메소드를 그룹화할 수 있습니다. 이것이 컴포넌트 클래스의 역할입니다.
구성 요소 클래스는 메모리에 구성 요소 클래스 코드의 복사본을 생성할 수 있습니다. ASP 코드를 사용하여 개체를 만드는 경우 이를 개체화라고도 합니다. 구성 요소 클래스 코드 인스턴스에 대한 개체 참조가 있으면 ASP 코드에서 클래스에 포함된 메서드를 호출할 수 있습니다.
이 예에서는 프로젝트, 클래스 및 메서드 이름을 사용하여 ASP 코드에서 VB 구성 요소를 인스턴스화하고 ASP 코드에서 메서드 매개 변수 형식으로 값을 VB 코드로 전달합니다. VB 메서드의 ASP 코드가 반환됩니다.
ASP 파일에서 VB 구성 요소 호출
vb 구성 요소를 호출하는 데 사용하는 asp 파일은 개체 변수를 사용하여 vb 개체에 대한 참조를 저장합니다. ASP 파일에서는 ASP 서버 객체의 createobject() 메서드를 사용하여 객체를 생성할 수 있습니다. 이 메서드는 자신이 생성한 객체에 대한 참조를 반환합니다. 이 예에서는 objreference를 구성 요소의 개체 변수로 사용합니다. 다음 코드는 ASP 코드가 VB 구성 요소를 인스턴스화할 때 구성 요소의 프로젝트 이름과 클래스 이름(exampleproject 및 exampleclass)을 사용해야 함을 보여줍니다.
VB 구성 요소를 인스턴스화하는 ASP 코드:
objreference 설정 = server.createobject(exampleproject.exampleclass)
vb 구성 요소는 asp 코드에서 3개의 변수 값을 받아들이고 asp 코드에 값을 반환하며, 이 값은 strmethodreturn이라는 asp 변수에 저장됩니다. 다음 코드는 asp 코드가 vb 구성 요소에서 반환된 값을 가져오는 방법을 보여줍니다. param1, param2 및 parma3이라는 세 가지 매개 변수 값을 vb 메서드에 전달합니다.
strmethodreturn = objreference.examplemethod(param1, param2, param3)
param1, param2 및 param3의 세 매개 변수는 VB 구성 요소의 메서드 정의와 정확히 동일해야 합니다. 다음은 VB 구성 요소의 클래스를 인스턴스화하고 클래스 메서드를 호출하는 두 줄의 ASP 코드 예입니다. 반환 값을 얻으십시오 :
objreference 설정 = server.createobject(exampleproject.exampleclass)
strmethodreturn = objreference.examplemethod(param1, param2, param3)
아래 차트는 VB 구성 요소의 프로젝트, 클래스 및 메서드 이름이 ASP 파일의 구성 요소 인스턴스화 코드와 어떻게 조정되는지 시각적으로 보여줍니다. 예제에서 VB 코드와 ASP 파일을 작성하는 방법을 단계별로 배우면서 아래 차트를 참조로 사용할 수 있습니다.
VB 메소드의 역할
이 예제의 간단한 VB 구성 요소는 사용자의 이름과 나이를 가져온 다음 사용자의 나이를 일 단위로 반환하고 사용자에게 45세 이상인지 알려주는 옵션이 있습니다.
가상의 Eric Clapton을 메서드의 첫 번째 매개 변수 값으로 구성 요소에 전달하고 두 번째 매개 변수를 56으로 설정하면 다음 반환 문자열을 얻게 됩니다.
에릭 클랩튼은 20440일이 넘었습니다.
선택적인 세 번째 매개변수를 true로 설정하면(이 매개변수는 사용자가 45세 이상인지 여부를 메소드에서 결정하게 됨) 다음과 같은 반환 문자열을 얻게 됩니다.
에릭 클랩튼은 20440일이 넘었습니다.
사용자 이름, 나이, 45세 이상 여부 등 완전히 다른 세 가지 변수가 사용되므로 이 정보를 ASP 파일에서 VB 코드로 전송하려면 세 가지 메서드 매개 변수를 사용해야 합니다. VB에서는 어떤 데이터 유형을 사용할지 고려하는 것이 매우 중요합니다. strname이라는 문자열 변수를 사용하여 사용자 이름을 나타내고, intage라는 정수 변수를 사용하여 사용자 나이를 나타내며, blnageemphasison이라는 부울 변수를 사용하여 사용자가 45세 이상인지 여부를 나타냅니다.
세 가지 메소드 매개변수(vb 구성요소의 메소드 코드에 전달되는 변수):
문자열 이름(문자열)
인티지(정수)
blnageemphasisison(부울)
VB에서 서버 측 구성 요소 만들기
vb를 시작한 후 "새 프로젝트" 창에서 "activex dll" 아이콘을 두 번 클릭합니다. VB가 새 ActiveX dll 프로젝트를 로드하면 프로젝트 창과 속성 창이라는 두 개 이상의 열린 창이 표시됩니다. 창이 표시될 수 없는 경우 VB 메뉴에서 "보기" 메뉴 항목을 선택할 수 있습니다(각각 "보기" -> "프로젝트 관리자", "보기" -> "속성 창" 사용).
VB의 첫 번째 프로젝트와 클래스의 기본 이름은 각각 project1과 class1이므로 각각 exampleproject와 exampleclass로 변경할 수 있습니다. 프로젝트 이름은 프로젝트 창에서 수정할 수 있습니다. 프로젝트 창에 새로 입력된 프로젝트 이름 왼쪽에 + 또는 -가 표시된 작은 상자가 있습니다. + 기호가 표시된 경우 작은 상자를 선택하면 + 기호가 - 기호로 바뀌고 프로젝트 이름 아래에 기본 클래스 이름(class1)이 표시됩니다. 프로젝트 창에서 기본 클래스 이름을 선택하고, 속성 창에서 기본 클래스 이름을 exampleclass로 변경합니다.
프로젝트를 저장할 때 VB는 클래스가 포함된 코드를 확장자가 cls인 파일에 저장합니다. 프로젝트 파일의 확장자는 vbp이며 프로젝트의 다양한 설정, 파일 이름 및 파일 저장 위치를 저장합니다.
서버 측 구성 요소의 속성 값
속성 창에 exampleclass 클래스의 속성을 표시합니다. 인스턴스화 속성의 값은 "5 multiuse"입니다. 프로젝트 유형이 표준 exe 프로젝트로 설정된 경우 이 속성의 값이 그에 따라 변경됩니다.
VB 메뉴에서 "프로젝트" -> "ExampleProject 속성"을 선택하면 프로젝트 속성 창이 표시됩니다. "일반" 탭의 오른쪽 아래에 있는 "스레딩 모드" 속성 값은 "아파트 스레딩"으로 설정되어야 합니다. 이렇게 하면 여러 방문자가 동시에 구성 요소 클래스의 서로 다른 인스턴스를 사용할 수 있습니다. 또한 VB6에서 메모리 누수를 방지하려면 "무인 실행"과 "상주 메모리"의 두 가지 옵션을 선택하세요.
VB 메소드 코드
이제 VB 코드 창을 사용하여 VB 코드를 입력해야 합니다. 코드 창이 여전히 비어 있으면 다음 코드를 입력하십시오.
명시적인 옵션
'모든 변수를 정의해야 합니다.
공용 함수 예제 방법(byval strname as string, _
byval intage를 정수로, _
선택 사항 byval blnageemphasisison as boolean = false) as string
위 코드에서 메소드를 공용 함수로 정의했는데, 이는 구성 요소 외부의 모든 코드가 이를 호출할 수 있음을 의미합니다. 함수이므로 이를 호출하는 코드에 값도 반환됩니다.
문자열로 공개 함수 examplemethod()
위 코드는 examplemethod() 함수가 호출자에게 문자열 유형 값을 반환한다는 것을 나타냅니다.
우리의 vb 메소드에는 ASP 코드의 값을 허용하는 3개의 매개변수 변수가 제공되며, 마지막 매개변수 변수는 선택사항입니다. VB 컴포넌트 외부에서 값을 받는 데 사용되는 모든 매개변수 변수는 VB 메서드의 괄호 사이에 정의되어 사용되어야 합니다. 이렇게 정의된 변수는 메서드 내에서 정의된 변수와 마찬가지로 메서드 매개변수로 사용할 수 있다는 점만 다릅니다. 그 사이에는 해당 값을 결정하는 외부 ASP 코드가 있습니다.
세 가지 변수와 해당 데이터 유형은 다음과 같습니다.
byval strname을 문자열로
byval intage를 정수로
선택적 byval blnageemphasis as boolean = false
위 코드는 세 가지 메소드 매개변수의 데이터 유형을 정의하여 값으로 전달되며 세 번째 매개변수는 선택사항임을 나타냅니다. 세 번째 매개변수가 없으면 기본값은 false입니다.
그런 다음 VB의 문법 요구 사항을 충족할 수 있도록 메서드 정의에 필요한 쉼표, 공백 및 밑줄(_)을 추가합니다. 메소드 정의의 괄호 사이에 매개변수 목록을 넣을 것이며 결과 메소드 정의는 다음과 같습니다.
공용 함수 예제 방법(byval strname as string, _
byval intage를 정수로, _
선택 사항 byval blnageemphasisison as boolean = false) as string
VB 코드 창에 위의 메소드 정의를 입력하면 end function 문이 생성됩니다. 메소드 정의와 end 함수 사이에는 자체 코드를 작성하는 곳이 있습니다.
메서드 본문에 추가하는 첫 번째 코드 줄은 메서드에서 반환된 문자열 데이터를 저장할 문자열 변수를 정의하는 것입니다. 문자열 변수를 사용하는 대신 문자열을 사용하여 메서드를 호출하는 코드에 텍스트 데이터를 반환할 수 있습니다.
문자열로 희미한 strreturnstring
다음으로 반환된 문자열을 생성할 수 있습니다. 메소드의 매개변수 목록을 통해 ASP 코드에서 전달된 strname 변수 값을 사용할 수 있습니다. 먼저 strname 매개변수 변수 값을 "is over" 문자열과 연결합니다. 다음으로 intage 매개변수 변수를 사용하여 사람이 생존한 일수를 계산한 다음 이전 문자열에 "일수" 문자열을 추가합니다. 두 정수 intage * 365의 곱을 strreturnstring 문자열에서 결합하기 전에 문자열로 변환해야 한다는 점에 유의해야 합니다. VB의 cstr() 메서드는 이 목적을 달성할 수 있습니다.
strreturnstring = strname & 끝났습니다 & cstr(intage * 365)
ASP 코드에서 구성 요소에 전달된 이름이 eric clapton이고 age 매개 변수가 56이라고 가정하는 경우 strreturnstring에는 다음 내용이 포함되어야 합니다.
에릭 클랩튼은 20440이 넘었습니다
intage 변수의 값이 45를 초과하는지 여부와 blnageemphasison 변수가 true로 설정되었는지 여부에 따라 최종 문자열이 추가됩니다.
"일" 또는 "일". 다음 코드는 이 기능을 달성할 수 있습니다:
blnageemphasis 및 intage > 44인 경우
strreturnstring = strreturnstring & 일 전.
또 다른
strreturnstring = strreturnstring & 일 전.
종료하면
ASP 코드가 blnageemphasison 변수의 값을 메서드 매개 변수로 구성 요소에 전달하지 않으면 해당 값은 메서드 정의에 따라 기본적으로 false로 설정됩니다. true로 설정되고 intage 변수의 값이 45보다 큰 경우 다음과 같은 출력이 표시됩니다.
에릭 클랩튼은 20440일이 넘었습니다.
그렇지 않으면 다음과 같은 결과가 출력됩니다.
에릭 클랩튼은 20440일이 넘었습니다.
위 문자열을 호출 구성 요소의 asp 코드로 반환하기 위해 문자열 값을 메서드 이름에 할당합니다.
예제방법 = strreturnstring
전체 메소드 코드는 다음과 같습니다.
공용 함수 예제 방법(byval strname as string, _
byval intage를 정수로, _
선택 사항 byval blnageemphasisison as boolean = false) as string
'///// 지역변수 생성
문자열로 희미한 strreturnstring
'///// 반환된 변수의 값을 만듭니다.
strreturnstring = strname & 끝났습니다 & cstr(intage * 365)
'///// strreturnstring 개선
blnageemphasis 및 intage > 44인 경우
strreturnstring = strreturnstring & 일 전.
또 다른
strreturnstring = strreturnstring & 일 전.
종료하면
'///// 문자열을 반환합니다.
예제방법 = strreturnstring
종료 기능
ASP 코드에서 VB 메소드 호출
ASP 코드에서 VB 개체 인스턴스화
우리에게 필요한 대부분의 ASP 코드는 위의 개념 개요에서 논의되었습니다. ASP 코드에서는 다음 작업을 순서대로 완료해야 합니다.
·asp 서버 개체의 createobject() 메서드를 사용하여 vb 구성 요소를 인스턴스화합니다.
·적절한 메소드 매개변수 변수를 사용하여 구성요소의 메소드를 호출합니다.
·vb 메소드에서 반환된 문자열 값을 asp 변수의 변수에 할당합니다.
·그런 다음 response.write() 메소드에서 이 변수를 사용하여 문자열을 브라우저로 보냅니다.
ASP 파일의 일부 코드를 사용하여 VB 구성 요소의 클래스를 인스턴스화합니다. 다음은 VB 구성 요소 인스턴스화를 위한 코드입니다.
objreference 설정 = server.createobject(exampleproject.exampleclass)
ASP 서버 개체의 createobject() 메서드는 VB 코드 개체의 주소를 반환하므로 ASP에서 클래스의 모든 공개 메서드를 호출할 수 있습니다. asp createobject() 메서드의 메서드 매개 변수는 vb 프로젝트 및 클래스의 이름이므로 objreference는 구성 요소 클래스의 개체 인스턴스에 대한 참조를 유지하는 데 사용됩니다.
ASP 파일에서 구성 요소를 사용하는 방법
이제 구성 요소의 클래스 메서드 examplemethod를 사용하여 사람의 수명(일)을 확인할 수 있습니다. 다음 코드는 매개 변수 값을 사용하고 메서드에서 반환된 문자열 값을 strmethodreturn이라는 변수에 할당합니다.
strmethodreturn = objreference.examplemethod(eric clapton, 56, true)
팁: 구성 요소가 인스턴스화되면 objreference는 createobject() 메서드에 나타난 exampleproject.exampleclass를 나타냅니다. objreference.examplemethod를 exampleproject.exampleclass.examplemethod()와 동일하다고 생각할 수 있지만 이 방식으로 사용할 수는 없습니다.
물론 직접 값 대신 변수를 메소드 매개변수로 사용할 수도 있습니다. 선택한 매개변수 변수의 이름은 VB 메소드 매개변수 목록의 이름과 동일할 필요는 없습니다. 매개변수 목록의 비선택적 매개변수 개수, 유형, 개수는 동일합니다.
aspname = eric clapton aspage = 56 aspemphasis = true strmethodreturn = objreference.examplemethod(aspname, aspage, aspemphasis)
값 대신 변수를 사용하면 특히 코드가 길어질 때 코드가 더 명확해지고 관리하기 쉬워집니다.
이제 asp response.write() 메서드에서 asp 코드에 액세스하는 브라우저에 strmethodreturn을 반환하기만 하면 됩니다. 다음은 전체 ASP 코드입니다. 코드 끝에 구성 요소 개체 주소를 구분하는 코드 줄을 추가하여 구성 요소의 개체 코드를 지웁니다.
<%
'///// 구성 요소 개체 인스턴스화
objreference 설정 = server.createobject(exampleproject.exampleclass)
'///// 지역 변수를 메소드 매개변수로 설정
aspname = 에릭 클랩튼
아스페이지=56
무호흡증 = 사실
'///// 구성 요소의 메서드를 호출하고 반환 값을 저장합니다.
strmethodreturn = objreference.examplemethod(aspname, aspage, aspemphasis)
'///// 방문 브라우저에 반환 값을 보냅니다.
response.write(strmethodreturn)
'///// 구성 요소 개체 지우기
객체 참조 설정 = 없음
%>
위의 ASP 코드를 ASP 파일에 저장하면 다음과 같은 문자열 출력이 생성됩니다.
에릭 클랩튼은 20440일이 넘었습니다.
ASP 코드를 활성화하여 dll 파일 호출
구성 요소 테스트는 구성 요소가 저장된 위치와 ASP 코드가 이를 호출할 때 창에 알리는 것입니다. 먼저 VB 메뉴에서 "실행" 아이콘이나 "실행/시작"을 선택하면 VB가 해당 구성 요소를 시스템에 임시로 등록합니다.
팁: HTML 파일을 로드하는 것처럼 브라우저를 사용하여 ASP 파일을 직접 로드할 수 없습니다. ASP 파일은 웹 서버를 통해 브라우저에 로드해야 합니다.
브라우저에는 "Eric Clapton이 20440일이 넘었습니다."라는 단어가 표시됩니다.
해당 컴포넌트가 다른 서버에서 동작하기 위해서는 dll 파일로 컴파일한 후 서버에 등록해야 합니다. 물론, 해당 컴포넌트를 개발 컴퓨터에서 영구적으로 사용하려면 컴파일하고 등록도 해야 합니다. 다른 컴퓨터에서 이 구성 요소를 실행하는 데 필요한 유일한 파일은 컴파일된 dll 파일입니다. 물론 이를 위해서는 컴퓨터에 vb 런타임 라이브러리 파일이 설치되어 있어야 합니다.
컴포넌트 소스코드를 컴파일하여 dll 파일을 얻는 방법과 컴포넌트를 컴퓨터에 등록하는 방법은 본 글의 범위를 벗어나므로 자세히 설명하지 않겠습니다.
IIS 서버측 구성 요소 작성의 부산물로 ASP 파일 및 기타 VB 구성 요소에서 작성된 구성 요소의 메서드를 호출할 수 있으므로 코드의 유연성과 모듈성이 더욱 향상됩니다.