이 장에서는 ASP 프로그램에서 가장 많이 사용되는 5가지의 주요 객체에 대해서 다루고자 한다. 여기서 우리는 객체(Object)란 말로부터 ASP 프로그램이 객체지향언어의 속성을 갖고 있음을 알 수 있을 것이며, 이들 주요 객체가 어떻게 사용되는지를 살펴볼 수 있을 것이다.
- Request Object
- Response Object
- Application Object
- Session Object
- Server Object
가. Request 객체
Request 오브젝트는 사용자로부터 정보를 전달받을 때 사용된다. 즉, FORM 태그를 이용하여 입력 및 전달된 값을 취하여 변수에 저장하기 위해 사용되는 것이다.
(1) QueryString한 페이지에서 다른 페이지로 GET메소드를 이용해 값을 보낼 때, 보낸 값을 알아내기 위해 쓰이는데 간단하게 예를 살펴 보면 다음과 같다.
보내는 쪽:
<html>
<body>
<form Action = "action.asp" METHOD = GET>
이름 : <INPUT TYPE="Text" NAME="name"><br>
나이 : <INPUT TYPE="Text" NAME="age"><br>
<INPUT TYPE="Submit" NAME="Enter" Value="확인">
</form>
</body>
</html>
이 프로그램에서 데이터를 각각 "홍길동"과 "21"로 입력한 후 확인 버튼을 클릭했다고 가정하면, "action.asp?name=홍길동&age=21"의 값이 전송되는데, 각 변수와 대응되는 값들은 다음과 같이 Request.Querystring("변수") 객체를 사용함으로써 쉽게 처리할 수 있다.
받는 쪽:
<html>
<body>
당신의 이름은 <%=Request.Querystring("name")%>이고, <BR>
당신의 나이는 <%=Request.Querystring("age")%>입니다.
</body>
</html>
Request.Form 도 위의 Request.QueryString 과 동일한 방법으로 사용되지만, 코딩의 길이가 짧기 때문에 Querystring 보다 많이 사용된다. 그러나, Form을 사용할 때에는 보내는 쪽에서 METHOD에 GET 대신에 POST를 써 주어야 하며, 하이퍼링크(Hyperlink)를 이용하여 정보를 보낼 때에는 Form이 아닌 Querystring을 사용하여야만 한다.
(3) ServerVariableServervariable는 서버의 CGI버전이나 PORT, 로그인 유저명, IP주소 등을 알려주는 컬렉션으로, Request.Servervariable(SERVER_NAME) 혹은 Request(SERVER_NAME)처럼 사용한다. 이 것을 이용하면 현재 사이트에 접속한 사람의 서버이름 등을 알 수 있다. 이러한 것은 게시판이나 방명록에 글을 쓸 때 자신의 서버이름을 밝히지 않았음에도 불구하고 자동적으로 서버의 이름이나 IP주소가 기록할 경우에도 사용되고 있다.
여기서 우리가 사용할 수 있는 ServerVariable의 목록을 확인하기 위해서는 다음과 같은 ASP 프로그램을 작성하여 실행하면 될 것이다.
<HTML>
<HEAD>
<TITLE> ServerVariable Lists </TITLE>
</HEAD>
<BODY>
<TABLE >
<% For Each key in Request.ServerVariables %>
<TR>
<TD><% = key %></TD>
<TD>
<% if Request.ServerVariables(key) = "" Then
Response.Write " "
else
Response.Write Request.ServerVariables(key)
end if
Response.Write "</TD>"
%>
</TR>
<% Next %>
</TABLE>
</BODY>
</HTML>
여기서 우리가 사용할 수 있는 대표적인 ServerVariable을 표로 정리하면 다음과 같다.
변 수 |
설 명 |
AUTH_PASSWORD |
클라이언트의 인증 대화 상자에 입력한 값으로, 기본 인증을 사용할 때만 이용 |
AUTH_TYPE |
보호 스크립트에 접근할 때 사용자를 인증하기 위해 서버가 사용하는 인증 방법 |
AUTH_USER |
인증된 사용자 이름 |
CONTENT_LENGTH |
클라이언트에서 입력한 문장의 총길이 |
CONTENT_TYPE |
내용의 데이터 종류로, HTTP 쿼리 GET, POST 및 PUT 등의 내용을 첨부한 질의에서 사용 |
LOGON_USER |
사용자가 로그인 된 Windows NT®의 계정 |
QUERY_STRING |
HTTP 요청의 물음표(?) 다음에 오는 문자열에 저장된 쿼리 정보. |
REMOTE_ADDR |
접속한 원격 호스트의 IP 주소. |
REMOTE_HOST |
접속한 원격 호스트의 이름 |
REMOTE_USER |
사용자가 보낸 매핑 처리 되지 않은 사용자-이름 문자열. |
REQUEST_METHOD |
데이터를 전송하는 방법으로 HTTP의 경우에는 GET이나 HEAD, POST 등이 있다. |
SCRIPT_NAME |
실행되는 스크립트의 가상 경로로, URL의 자체 참조를 위해 사용됨. |
SERVER_NAME |
URL 자체 참조에 나타나 듯이 서버의 호스트 이름, DNS 별명 또는 IP 주소 |
SERVER_PORT |
원격으로 접속한 포트 번호 |
SERVER_PROTOCOL |
프로트콜의 이름 및 버전 |
SERVER_SOFTWARE |
질의에 응답하고 게이트웨이를 실행하는 서버 소프트웨어 이름 및 버전 |
URL |
URL의 기본 위치 |
나. Response 객체
Response 오브젝트는 ASP 프로그램에서 처리된 정보를 브라우저를 통하여 사용자에게 보여주는 기능을 한다. Response 객체에 사용되는 메소드와 프로퍼티에는 여러 가지가 있으나 주요한 것만 설명하면 다음과 같다.
(1) Write이 메소드는 브라우저에 정보를 출력하고자 할 때 사용하며, 그 예를 살펴보면 다음과 같다.
<HTML>
<HEAD>
<TITLE> ServerVariable Lists </TITLE>
</HEAD>
<BODY>
<% FOR i=1 TO 10
Response.write "안녕하세요? <BR>"
NEXT i %>
</BODY>
</HTML>
HTML 문장 내에 write 문을 삽입할 경우에는 <% Response.write 변수 %>의 형태로 기술하여야 하는데, 이것이 번거로울 때에는 <%= 변수 %>와 같이 Equal (=) 기호를 사용할 수도 있다.
현재의 페이지에서 다른 페이지로 이동하고자 할 때 사용되는 것으로, 주로 특정한 처리를 마친후에 자동적으로 다음 페이지나 이전페이지로 돌아가고자 할 때 많이 사용된다. 그 사용법은 매우 간단하여 <% Response.Redirect 이동할URL %> 의 형태로 기술해 주면 된다.
다. Application 객체
- Application - OnStart
웹 서비스가 시작된 후 첫 번째 사용자가 접속을 할 때 한 번만 실행되는 것으로, 방문자의 수를 카운트하기 위한 변수의 초기화 등을 위해 사용된다. - Application - OnEnd
위에서 첫 번째 사용자에 의해 Application - OnStart 함수가 실행된 후, 웹 서비스가 완전히 종료될 때 실행되는 함수이다. - Session - OnStart
각 사용자가 웹서버에 접속하자마자 실행되는 것으로서 사용자별로 가지고 있어야 하는 정보를 처리한다. - Session - OnEnd
세션타임이 종료되거나 각 사용자가 브라우저를 종료할 때 수행되는 함수이다.
Application 객체는 뒤에서 설명될 Session 객체와 함께 ASP에서 가장 중요한 객체의 하나로서, 해당사이트에서 사용되는 전역변수의 역할을 한다. 즉, Application 객체가 선언되면 해당 사이트에 접근하는 모든 사용자들을 그 값을 읽을 수가 있다. ASP에서사용되는 카운터의 대부분은 Applicatioin 객체를 이용하고 있다.
(1) LockApplication 객체의 값을 변경하고자 할 때 해당 객체에 대해 다른 사용자가 접근할 수 없도록 제한하기 위해 사용한다.
Lock을 시켜서 Application 객체의 값을 변경한 후에 다른 사용자들이 접근할 수 있도록 Lock을 풀어주는 역할을 한다. 위에서 설명한 Lock와 Unlock을 이용하여 사용자가 들어올 때마다 변수값을 1씩 증가시키는 코드의 예를 살펴보면 다음과 같다.
Application.Lock
Application("visit") = Application("visit") + 1
Application.Unlock
여기서 우리는 Global.asa에 대해 짚고 넘어가야 할 필요가 있다. 이는 웹 페이지가 로딩되면서 가장 먼저 실행되는 파일로서, 4가지의 함수로 구성되어 있다. 이들 함수는 Application이 시작될 때 및 끝날 때와 다음에 설명될 Session이 시작될 때와 끝날 때 각각 실행된다.
라. Session 객체
Session 객체는 웹서버에 접속하는 각 사용자에 대하여 세션을 생성하여 사용자의 정보를 각각 저장할 수 있는 객체이다. 세션은 사용자별로 저장이 되며 세션 객체를 사용하기 위해서는 사용자의 브라우저가 쿠키(Cookie) 기능을 지원해야 한다. 이 세션오브젝트는 ASP프로그램에 지대한 도움을 주는데 페이지의 접근을 허가하거나 금지할 때 또는 사용자별로 정보를 저장할 때 많이 사용된다.
(1) Timeout일반적으로 세션은 한 사용자가 접속을 하면 시작하는데 사용자가 접속을 종료하고 다른 곳으로 갔다는 것을 확인하는 방법은 없다. 따라서, ASP에서는 세션을 설정한 사용자가 웹 페이지상에서 정해진 시간(초기값은 20분)동안 아무런 반응이 없으면 사용을 종료했다고 인식하게 된다. 즉, 다른 웹 페이지로 가서 19분간 돌아다니다가 이 웹 페이지로 돌아오면 그 세션을 계속 유지되는 것이다.
세션이 유지되는 시간은 웹서비스의 성격에 따라서 달리 줄 수도 있는데, 이 때 사용되는 것인 Timeout 속성이다. 다음은 세션의 종료시간을 10분으로 설정하는 예를 보여주고 있으며, 이는 앞에서 설명한 Global.asa의 Session - OnStart 함수내에 포함시키면 된다.
<SCRIPT LANGUAGE=VBScript RUNAT=SERVER>
Sub Session_OnStart
' Session의 Timeout을 10분으로 설정한다.
Session.Timeout = 10
End Sub
Sub Session_OnEnd
' SessionTimeoutMsg.htm 파일로 Redirect하여
' 세션이 종료되었음을 알린다.
Response.Redirect "SessionTimeoutMsg.htm"
End Sub
</SCRIPT>
Abandon은 프로그램상에서 사용자의 세션을 일방적으로 종료시키고자 할 때 사용하는 것으로, 사용자가 허락되지 않은 기능을 수행하거나 LogOut을 클릭한 경우 모든 세션을 강제적으로 종료하기 위해 사용될 수 있다.
Session.Abandon
Application(이하 App)와 Session(이하 Ses)이 갖는 가장 중요한 차이는 App는 처음에 딱 한번 실행이 되지만, Ses는 사용자가 접속할 때마다 계속해서 실행된다는 것이다. 따라서, Ses변수는 개인마다 그 값을 가지게 되며, 사용자가 웹 페이지를 떠나면 Session - OnEnd가 실행된다. 그러나, App - OnEnd는 제일 마지막 방문자가 떠나거나 서버가 종료할 때 한 번만 실행된다는 차이를 갖는다.
마. Server 객체
Server 객체는 한 개의 프로퍼티와 4개의 메소드로 구성되어 있는데 그 중에서 가장 중요한 것은 ActiveX 컴포넌트의 인스턴스를 생성하는 CreateObject 와 가상경로를 지정하는 MapPath이다.
(1) CreateObjectASP 프로그램을 데이터베이스(DB)와 연결할 때 혹은 파일을 읽거나 처리결과를 파일로 저장할 때 사용되는 것으로 서버 콤포넌트의 인스턴스를 생성한다. 다시 말하자면 콤포넌트를 이용하기 위해서 반드시 이 CreateObject 메소드를 사용해야 한다는 것이다. 이에 대해서는 뒤에서 설명될 예제들을 이용하여 이해하기 바란다.
(2) MapPath상대경로나 가상디렉토리의 경로를 서버의 실제 디렉토리 경로로 변환시켜주는 일을 한다. 예를 들어, 웹의 루트경로와 현재 페이지가 저장되어있는 경로를 알고자 한다면 다음과 같이 기술해 주면 된다.
현재경로는 <%= Server.MapPath(".") %> <BR>
루트경로는 <%= Server.MapPath("/") %> <BR>
IS 가상디렉토리의 경로는 <%= Server.MapPath("/is") %>
또한 웹서버에서 가상디렉토리를 만든 경우에는 다음과 같이 가상디렉토리의 이름을 슬래시(/)와 함께 기술해 주면 된다.
IS 가상디렉토리의 경로는 <%= Server.MapPath("/is") %>
'Development > ASP' 카테고리의 다른 글
성능 및 스타일 향상에 도움이 되는 28가지 ASP 팁 (0) | 2009.06.13 |
---|---|
ASP에서 Class 사용 (0) | 2009.06.13 |
ASP File Download (0) | 2009.06.13 |
ASP로 데이터베이스 처리 (ADO) (0) | 2009.06.13 |
페이지 로딩시간 초로 확인하는 방법 (0) | 2009.06.13 |