컴퓨터관련

asp request 객체...펌

맘편한넘 2011. 2. 10. 11:58

Request 객체

 

일반적으로 VBScript만 이용하여 asp 페이지를 만드는 것은 기능에 있어서 너무 제약이 많기 때문에 서버 객체를 많이 이용합니다.
서버 객체에는 ASP 내장 객체, 스크립트 객체, 서버 컴포넌트로 나눌 수가 있는데, 지금부터 서버측 스크립트와 함께 처리할 수 있는 ASP 내장 객체에 대해 알아 보도록 하겠습니다.
참고로, ASP 3.0 에서는 ASPError 객체가 새로 등장하여 효율적인 에러를 처리할 수 있는 기능을 추가하였습니다
일단 이러한 ASP 내장 객체에는 어떠한 것들이 있는지 살펴보죠.

 

 

객   체

설   명

 Request

클라이언트에서 전송된 모든 웹서버 정보를 보관합니다.

 Response

서버가 클라이언트로 응답을 보내기 위해 정보를 보관합니다.

 Server

객체를 생성하거나 HTML 해석 처리를 할 수 있도록 메소드와 속성을 제공합니다.

 Application

같은 페이지를 여러 클라이언트간에 정보를 공유하기 위해서 사용됩니다.

 Session

클라이언트와 웹 서버 사이의 접속을 유지하기 위해서 사용됩니다

 ASPError

ASP 3.0 에서 새로나온 객체로 에러를 처리하기 위한 정보를 가지고 있습니다.


이들 객체 중 먼저 Request 객체에 대해 차근차근 알아 보겠습니다.

Request 객체는 서버에서 클라이언트 요구를 처리하는데 필요한 정보를 담고 있는 개체 입니다. 클라이언트에 대한 환경 정보, 클라이언트 요구 사항, 변수 등을 웹 애플리케이션에서 사용할 수 있게 해줍니다.

사용자는 브라우저를 통해서 서버에 어떤 요구를 하게 되며, 이 때 브라우저 정보나 사용자가 입력한 값 등 클라이언트에 대한 정보를 이 개체가 갖게 됩니다.

다음은 Request 객체가 제공하는 컬렉션과 속성, 메소드들입니다.


종  류

설   명

속  성

 TotalBytes

클라이언트에서 전송한 데이터의 총바이트 수

메소드

 BinaryRead

POST 방식으로 전송된 데이터를 읽을 때 사용

컬렉션

 ClientCertificate

클라이언트가 전송한 ClientCertificate 값

 Cookies

클라이언트가 전송한 쿠키 값

 Form

클라이언트가 전송한 폼 요소 값

 QueryString

HTTP 질의 문자열에 있는 변수 값

 ServerVariables

HTTP와 환경 변수 값


Request 객체는 Form을 통해 전달된 데이터를 서버에서 적절하게 사용할 수 있게 해 줍니다. 그런데, 이전 [FORM의 동작방식과 속성] 강좌에서 언급했듯이 폼에는 2가지 전송 방식이 있다고 하였습니다.

즉, GET 방식은 폼 데이터를 질의 문자열 형태로 서버에 전송하며 URL 뒤 물음표(?)와 함께 붙게 되는 방식이었고, POST 방식은 폼을 통해 전송하는 방식입니다.

그래서, Request 객체에서도 데이터를 가져오는 방법이 각 전송 방식에 따라 달라집니다.
POST 방식으로 전송된 폼 데이터는 Form 컬렉션을 이용해서 가져옵니다.
반면에, GET 방식으로 전송된 데이터는 QueryString 컬렉션을 이용해서 가져옵니다.

 

▶ QueryString 컬렉션을 사용하는 방법

1) URL 뒤에 넘어오는 변수와 데이터의 값이 다음과 같다면

 

http://www.testsite.com/test.asp?var1=abc&var2=123


여기서, 인수 목록은 "변수명=값&변수명=값..." 형식입니다. 이 방식으로 서버에 전송된 데이터는 Request 객체의 QueryString 컬렉션에 저장됩니다. 이때 각각의 "변수명=값" 에서 변수명은 키값으로 값은 데이터 값으로 저장됩니다.

따라서, Request 객체의 QueryString 컬렉션은 서버에서 다음과 같이 데이터를 처리합니다.


var1 = Request.QueryString("var1") ' "abc"

var2 = Request.QueryString("var2") ' "123"


2) 다음과 같이 <Form Method=GET> 으로 지정해준 후 submit을 한다면


<Form Method=GET Action=test.asp>

<Input type=Text Name=id>

<Input type=Text Name=email>

<Input type=Submit>

</Form>


전송 방식이 GET 방식이기 때문에 텍스트 박스의 값들은 텍스트 박스의 이름과 함께 QueryString에 저장됩니다. 그 다음에 QueryString은 Form 태그의 Action 속성에 표시된 URL의 ? 기호 다음에 덧붙여져 서버로 전송됩니다.

만일 id에 admin, email에는 admin@mail.net 이라고 입력하고 전송 버튼을 눌렀다면 서버에서는 다음과 같이 처리합니다.


ID = Request.QueryString("id") ' "admin"

Email = Request.QueryString("email") 'admin@mail.net


일반적으로 GET 방식으로 데이터를 전송할 때는 데이터 량에 제한이 있기 때문에, 서버로 많은 양의 데이터를 전송하고자 할 때는 반드시 POST 방식을 사용해야만 합니다.

▶ 참고

Request.QueryString("id") 이라는 표현을 단축해서 Request("id") 로 표현해도 됩니다.

이렇게 표현하면 ASP는 Request 객체의 모든 컬렉션을 차례대로 검색하여 id 라는 이름을 가지고 있는 컬렉션을 찾게 됩니다.

이와 같이 컬렉션을 생략하면 다음과 같은 순서로 컬렉션을 조사하여 키 값에 대응하는 데이터 값을 찾습니다.

 

  • QueryString
  • Form
  • Cookies
  • ClientCertificate
  • ServerVariable

     

    이렇게 생략을 하면 성능에 영향을 미친다는 얘기가 있는데 그 이유는 ASP가 컬렉션을 모두 검색하므로 수행시간이 증가될 수 있다는 얘기입니다.

    하지만 ASP는 클라이언트에서 요청이 들어올 때마다 소스가 해석되어 실행되므로 소스의 양이 작을수록 빨리 실행됩니다.
    즉, 생략하여 실행하면 소소의 양이 작아지게 되므로 소스가 더 빨리 실행될 수도 있습니다.

    결론적으로 굳이 성능을 따지기 이전에 보통은 코딩의 편의성 때문에 생략해서 많이 사용합니다.

     

    Get 방식으로 클라이언트에서 서버로 전달된 데이터는 QueryString 컬렉션으로 처리하게 됩니다.

    하지만, 이 방법은 보안에 취약하고, 보낼 수 있는 데이터 양이 한정되어 있기 때문에 간단한 데이터 전송에는 적당하지만 복잡하고 용량이 큰 데이터 전송방식으로는 적합하지 않습니다.

    이러한, 문제점을 해결한 방식이 Post 방식이며 이 방식으로 넘겨진 데이터를 처리하는 것이 바로 Form 컬렉션입니다.

    ▶ Form 컬렉션을 사용하는 방법


     

    <Form Method=POST Action=test.asp>

    <Input type=Text Name=id>

    <Input type=Text Name=email>

    <Input type=Submit>

    </Form>


    < Form> 태그의 Method 속성을 "POST" 로 지정해서 서버로 데이터를 넘기면 서버에서는 Form 컬렉션을 통해 데이터를 처리합

    니다. POST 방식으로 지정된 데이터는 HTTP 헤더에 포함되어 클라이언트에서 서버로 전송됩니다.

    만일 id에 admin, email에는 admin@mail.net 이라고 입력하고 전송 버튼을 눌렀다면 서버에서는 다음과 같이 처리합니다.


    ID = Request.Form("id") ' "admin"

    Email = Request.Form("email") ' admin@mail.net


    이전 강좌에서 설명했듯이 Request.Form("id") 이라는 표현을 단축해서 Request("id") 로 표현해도 됩니다.

    ▶ ServerVariables 컬렉션을 사용하는 방법

    Request 객체의 ServerVariables 컬렉션은 클라이언트에서 서버쪽으로 보내지는 여러가지 정보를 담고 있습니다.

    클라이언트 정보지만 서버에서 참조되기 때문에 ServerVariables라는 이름이 붙여졌습니다.

    만일 사용자의 브라우저의 종류 및 사용자의 IP를 알아내고자 한다면, 이 컬렉션을 이용하면 됩니다.


    <%

    ip = Request.ServerVariables("Remote_Host")

    OS = Request.ServerVariables("HTTP_User_Agent")

    SS = Request.ServerVariables("Server_Software")

    Response.Write "사용자의 IP : " & ip & "<br>"

    Response.Write "사용자의 브라우저와 OS : " & OS & "<br>"

    Response.Write "Server Software : " & SS & "<br>"

    %>


    Ø Request.ServerVariables("Remote_Host") : 사용자의 IP를

    Ø Request.ServerVariables("HTTP_User_Agent") : 사용자의 브라우저 종류와 OS를

    Ø Request.ServerVariables("Server_Software") : 서버의 웹서버 종류를 리턴합니다.

    즉, ServerVariables 컬렉션은 클라이언트에서 서버로 전송되는 클라이언트의 정보를 담고 있는 컬렉션이라고 생각하시면 됩니다.

    ▶ 참고

    Request 객체에 대한 예제 코드는 다음의 사이트를 참조하시면 됩니다.

    http://www.w3schools.com/asp/asp_ref_request.asp

     

    ▶ Cookies 컬렉션

    폼을 이용한 데이터 전송은 서버에 요구할 때마다 일어나며 값은 매번 바뀔 것입니다. 그러나 경우에 따라 연결상태에 관계없이 지속적인 데이터 값이 필요할 때가 있습니다. 이럴때 쿠키를 이용하면 클라이언트에 특정 데이터를 저장해놓고 이 값을 계속 쓸 수 있습니다.

    서버에 어떤 요구를 할 때 쿠기 정보도 같이 보내집니다. 쿠키는 클라이언트 시스템에 파일형태로 저장되어 있다가 보내지는 것이며, 브라우저가 다시 시작하더라도 이 정보는 남아 있습니다. 페이지에서 쿠키 값을 쓰려면 Cookies 컬렉션을 이용합니다.

    Request 객체를 이용해서 쿠키 값을 가져오며, Reponse 값을 이용해서 쿠키 정보를 수정하거나 새로 저장할 수 있습니다.

    클라이언트에 저장된 쿠키 정보를 읽기 위해서는 다음과 같이 쿠키이름을 지정하기만 하면 됩니다.

    VisitDate = Request.Cookies("VisitDate")

    다음 강좌에서 이야기할 Response 객체에도 Cookies 컬렉션이 있는데, 자세한 것은 Response 객체에서 또 언급하겠습니다.

    ▶ ClientCertificate 컬렉션

    ClientCertificate 컬렉션은 그리 많이 쓰이지 않은 컬렉션입니다.

    IIS 5.0 설명서에서는 이 컬렉션에 대해 다음과 같이 설명되어 있습니다.

    ClientCertificate 컬렉션은 웹 브라우저에 의해 발급된 요청에서 인증서 필드(X.509 표준으로 지정)를 검색합니다.

    웹 브라우저에서 SSL3.0/PCT1 프로토콜을 사용(즉, http://가 아닌 https://로 시작하는 URL을 사용)하여 서버에 연결하고

    서버는 인증서를 요청할 경우 브라우저는 인증서 필드를 보냅니다.

    인증서를 보내지 않으면 ClientCertificate 컬렉션은 EMPTY를 반환합니다.

    ClientCertificate 컬렉션을 사용하려면 먼저 클라이언트 인증서를 요청하도록 웹 서버를 구성해야 합니다.

    구문 : Request.ClientCertificate( Key[SubField] )

    더 자세한 내용은 IIS 5.0 설명서를 참조하세요.

    ▶ TotalBytes 프로퍼티

    TotalBytes 속성은 클라이언트에서 보내지는 HTTP 요청의 본문의 총 바이트 수를 지정합니다. 이 속성은 읽기 전용이며 많이 사용되지는 않습니다.

    구문 : Counter = Request.TotalBytes

     

    ▶ BinaryRead 메소드

    BinaryRead 메서드는 POST 요청의 일부로 클라이언트에서 서버로 보낸 데이터를 검색하는 메소드로서 이 메소드 역시 자주 사용되지 않는 메소드 입니다.

    ▶ Request 컬렉션 효과적으로 사용하기

    ASP에서 컬렉션을 액세스하는 것은 서버에 부담을 주는 작업 중의 하나라고 합니다.

    그러므로, ASP 페이지에서 한 번 이상 Request 컬렉션으로부터 값을 참조하려 한다면 그 값을 다음과 같이 지역 변수안에 저장하여 사용하는 것이 서버의 성능 향상에 도움이 됩니다.


     

    strID = Request.QueryString("ID")

    Response.Write strID

    If strID <> "admin" Then

    Response.Write "당신은 관리자가 아닙니다."

    End If


    이것으로 Request 객체에 대한 강좌는 마칩니다. 그럼, 즐거운 하루 되세요.

     

    Request 객체

     

    웹브라우저에서 사용자에 의해 정보를 전달받아 올 때 사용하는 객체입니다. Request에는 여러 가지 콜렉션이 있는데, 많이 사용하는 중요한 몇가지만 살펴보겠습니다.

     

    Request와 Response는 ASP프로그램에서 빈번히 사용하므로 잘 알아두세요.

     

    ◆QueryString 컬렉션

     

    Request.QueryString("변수")

     

    HTTP 쿼리 스트링에 포함된 변수의 값을 얻어 오는 컬렉션입니다. '쿼리 스트링이 뭐지?'하시는 분이 계실텐데. 쿼리 스트링이라는 말은 질의 문자열을 의미하는데 보통 하이퍼링크로 보낼 때 뒤에 물음표(?)를 붙이고 각 변수마다 엠퍼센드(&)로 구분하게 되어있습니다.

     

    위의 예제의 <a href = "Check.asp?asp=90%25">90%</a>에서 '?'뒤에 변수가 오고 '=' 다음에 오는 것이 그 변수의 쿼리 스트링 값이 되는 것입니다. 이러한 하이퍼링크의 형태로 보내지는 방식을 GET 방식이라고 합니다. QueryString 컬렉션은 GET 방식으로 서버로 보내진 데이터를 받아오는 역할을 합니다.

     

    ◆Form

     

    Request.Form("변수")

     

    GET 방식과는 달리 전달되는 데이터가 인코딩되어 서버로 보내지는 것을 POST 방식이라고 합니다. 이러한 POST 방식을 사용하는 데이터를 받아오는 컬렉션입니다.

    ※Request.QueryString("변수")이나 Request.Form("변수")은 Request("변수")와 같이 생략하셔도 무방합니다.

     

    ◆Cookies 컬렉션

     

    Request.Cookies("변수")

     

    쿠키라고 들어 보셨나요? 뭐라구요? 먹는 거라구요. 하하. 물론, 먹는 과자이름도 쿠키가 있죠. QueryString이나 Form 컬렉션은 하나의 브라우저의 요청에만 사용가능하고, 값이 계속 바뀌는 반면에 쿠키는 지속적으로 데이터를 저장할 수 있습니다. 특히 쿠키는 기본적으로 서버가 아닌 클라이언트에 저장됩니다. 이러한 쿠키의 여러 가지 사용법은 좀 있다가 다음의 Response 객체에서 살펴볼께요.

     

    ◆ServerVariable 컬렉션

     

    Request.ServerVariable("변수")

     

    ServerVariable 컬렉션은 참 유용한 일을 하지요. 많은 환경변수들이 있지만, 자주 쓰는 것만 보면 <표4>와 같습니다.

    <표 4> ServerVariable 컬렉션의 자주 쓰이는 환경변수

    환경변수

    설명

    REMOTE_ADDR

    클라이언트 호스트의 IP주소

    REMOTE_HOST

    클라이언트 호스트의 이름

    SERVER_NAME

    서버의 IP 또는 도메인 이름

    HTTP_USER_AGENT

    사용자의 브라우저 종류


    상대방의 IP 주소와 호스트 이름을 출력하는 예제입니다.

     

    당신의 IP는 <%=Request.ServerVariable("REMOTE_ADDR")%>입니다.<BR>

     

    당신의 Host Name은 <%=Request.ServerVariable("REMOTE_HOST")%>입니다.

    보통 익스플로어와 넷스케이프는 클라이언트 스크립트에 따라 잘 동작할 수도 있고 그렇지 않을 수도 있습니다. 그래서 브라우저의 종류에 따라서 웹페이지를 달리 생성할 때도 있습니다. 다음 예제는 ServerVariable를 이용해서 브라우저 타입을 알아오는 방법입니다.

    <%If InStr(Request.ServerVariables("HTTP_USER_AGENT"), "MSIE") Then%>

     

    MS Explore입니다.

     

    <%ElseIf InStr(Request.ServerVariables("HTTP_USER_AGENT"), "Nav") Then%>

     

    Netscape입니다.

     

    <%End If%>

    다음과 같이 ServerVariable 컬렉션을 사용하지 않고, 자바스크립트를 써서 할 수도 있습니다. 되도록 자바스크립트와 같은 클라이언트 사이트 스크립트를 쓰는 것이 서버에 부하를 줄일 수 있다고 합니다. 그래서, 꼭 필요하지 않으면 서버의 자원을 낭비하지 않고 클라이언트 사이드 스크립트를 쓰는 것이 효율적입니다.

    <script LANGUAGE="JavaScript">

    var ver = navigator.appVersion;

    if (ver.indexOf("MSIE") != -1)

    window.location.href="http://www.asp.co.kr/Explore.html"

    else if(navigator.userAgent.indexOf("Mozilla/3.0") != -1)

    window.location.href="http://www.asp.co.kr/Netscape3html"

    else if(navigator.userAgent.indexOf("Mozilla/4.0") != -1)

    window.location.href="http://www.asp.co.kr/Netscape4.html"

    </script>

     

    학주 (netbookmark) 님 블로그