:::: 개발 ::::/::: A S P :::

[본문스크랩] Request와 Response 객체 활용

nayha 2009. 12. 28. 14:08
[ASP] 한번 되돌아보자..(Request와 Response 객체 활용) | ASP 강좌 및 팁2006.07.07 13:57
 http://cafe.naver.com/myprogramming/8833

BinaryRead를 호출한 다음에는 일반 Request 컬렉션을 사용할 수 없습니다


■ Request와 Response 객체 활용 구성


- 기본 구성도

             [그림] Request와 Response 객체 구성 현황


■ Request 객체


                       [표] Request 객체 구성

콜렉션

속성

메서드

QueryString

TotalBytes

BinaryRead

Form

Cookies

ClientCertificate

ServerVariables


- HTTP 요청 중에 클라이언트가 웹 서버로 보낸 값을 저장


Request[.collection|property|method](variable)

Request 객체에 사용되는 컬렉션은


                 [표] Request 객체 사용에 대한 컬렉션

컬렉션

설 명

QueryString

HTTP 쿼리 문자열의 변수 값

Form

HTTP 요청 본문의 폼 객체 값

Cookies

HTTP 요청에 보내진 쿠키 값

ClientCertificate

필드 값이 HTTP 요청에 보내진 클라이언트 보증서에 저장

ServerVariables

환경 변수 값


그 속성으로는....

(1) TotalBytes


클라이언트가 요청 본문에 보내는 총 바이트 수를 지정


사용 메서드로는....


(2) BinaryRead


POST 요청의 일부로서 클라이언트에서 웹 서버로 보내진 데이터를 저장


사용 매개 변수로는....


  ① QueryString 컬렉션 

  ② Form 컬렉션 

  ③ Cookies 컬렉션 

  ④ ClientCertificate 컬렉션 

  ⑤ ServerVariables 컬렉션  

 


■ QueryString 컬렉션


GET 메서드를 사용하여 HTTP Request 본문에 보내진 쿼리 문자열의 변수 값으로 사용


  Request.QueryString(variable)[(index)|.Count]


매개 변수로서....


(1) variable - 저장할 HTTP 쿼리 문자열의 변수 이름을 지정


(2) index -


variable에 대한 여러 값들 중 하나를 저장할 수 있는 선택적인 매개 변수로서, 이 값은 1에서 Request.QueryString(variable).Count 까지 임의의 정수가 될 수 있다.


QueryString 컬렉션을 사용할 경우, 다음과 경우를 생각해보자.!


HTTP 쿼리 문자열은 물음표(?) 다음의 값으로 지정할 수 있다. 즉 하나의 쿼리 문자열을 작성하는 데에는 몇 가지 다른 프로세스를 사용


예를 들어, HTML 앵커 태그는 다음과같이 사용


  <A HREF= "example.asp?string=this is a sample">string sample</A>


예를 들어, 다음의 요청을 서버로 보낼 경우....


  http://localhost/names.asp?var=kim&var=lee

"names.asp"에는 다음 스크립트가 포함


<!-- names.asp --> 

<% 

For Each item In Request.QueryString("var") 

  Response.Write item & "<br>" 

Next 

%> 

 


실행 결과 : 각각 “kim"과 ”lee" 데이터가 출력

앞의 예를 Count를 사용하여 작성할 수도 있다.


<% 

For I = 1 To Request.QueryString("var").Count    

  Response.Write Request.QueryString("var")(I) & "<br>" 

Next 

%> 

 


예를들면....


QueryString 컬렉션에 Count 속성을 사용하여 클라이언트에서 값이 입력되는 개수만큼 데이터를 나타낼 수 있다.


<!-- QueryString_1.asp --> 

<!-- 다수의 값 형식들을 표시 --> 

<%Total = Request.QueryString("name").Count%> 

<% Response.Write "클라이언트에서 입력된 매개변수의 개수 :" & Total %> <br> 

<p> 

<%For i = 1 to Total%> 

  <%= Request.QueryString("name")(i)  %> <br> 

<%Next%> 

 


위의 스크립트를 실행하기 위해 브라우저 주소란에 다음과같이 입력한다.


http://localhost/QueryString_1.asp?name=kim&name=lee&name=nam


여기서 “?”는 asp 파일과 입력된 매개변수와 구별하기 위해 사용하며, “&” 기호는 여러 매개 변수 값을 구별할 때 사용하는 기호 


실행 결과는....

                        [그림] 실행 결과


■ Form 컬렉션 - POST 메서드로 보낸 값


   Request.Form(element)[(index)|.Count]


매개 변수로서....


(1) element - 컬렉션에서 값을 찾을 폼 요소 이름을 지정


(2) index -


하나의 매개 변수의 여러 값 중 하나를 사용할 수 있는 선택적인 매개 변수로서, 이 값은 1에서 Request.Form(parameter).Count까지의 정수를 사용

<% 

For Each item In Request.Form("system_name") 

  Response.Write item & "<br>" 

Next 

%> 

 

결과 : "Print"와 “Mouse" 값을 출력

For...Next 루프를 사용해도 같은 결과를 얻을 수 있다.


<% 

For i = 1 To Request.Form("system_name").Count 

  Response.Write Request.Form("system_name")(i) & "<br>" 

Next 

%> 

 


반복 인수를 이용하면 다음 스크립트에서와 같이 매개 변수 이름을 표시


<% For Each x In Request.Form %> 

Request.Form( <%= x %> ) = <%= Request.Form(x) %> <BR> 

<% Next %> 

 

이 스크립트는 브라우저에 다음 내용을 표시


system_name = Print 

system_name = Mouse 

 


또한 Form 컬렉션은 QueryString 컬렉션과 비슷한 방법으로 값을 저장한다. 예를 들어, 사용자가 긴 이름 목록을 입력하여 양식을 작성하면 다음과 같은 스크립트를 사용하여 이름들을 찾을 수 있다.


<% For i = 1 to Request.Form.Count %> 

<% =Request.Form("names")(i) %> 

<% Next %> 

 

예를 실행해보자.!


<!-- form_1.asp --> 

<FORM  METHOD = "post" ACTION = "form_1_response.asp"> 

<P>당신의 이름 : <INPUT NAME = "name_1" SIZE = 12> 

<P>당신의 취미 : <SELECT NAME = "name_2"> 

<OPTION>골프  

<OPTION>축구  

<OPTION>배구  

<OPTION>농구</SELECT> 

<p><INPUT TYPE = SUBMIT> 

</FORM> 

 


실행시키면....

                          [그림] 실행 결과


쿼리 전송 단추를 눌러서 실행해보면,....

                           [그림] 실행 결과


위 그림은 "form_1_response.asp" 파일이 실행되면서, 폼에서 입력된 결과가 전달된 것을 볼 수 있다.


<!-- form_1_response.asp --> 

안녕하세요,  <%= Request.Form("name_1") %>.<br>  

당신은 <%= Request.Form("name_2") %>를(을) 좋아하군요.!<br> 

<p> 

폼에서 보낸 매개변수와 데이터 :  <%= Request.Form %>  

 


다음은 사용자가 실제로 텍스트가 아닌 수치 정보를 입력했는지 결과를 확인하는 스크립트로 다음과같이 작성할 수 있다.


<!-- Form_2.asp --> 

<% If Isnumeric(Request.Form("Age")) then %>                   

  <p>안녕하세요.<%=Request.Form("Name")%>님,  

        당신의 나이는 <%=Request.Form("age")%> 입니다. 

<%Else %> 

  <p>나이는 필히 숫자를 입력하세요..... 

<%End If %>  

<FORM METHOD= "POST"  ACTION="form_2.asp"  >    

이름 : <INPUT TYPE="text" NAME="Name"  size=15> 

나이 : <INPUT TYPE="text" NAME="Age" size=5> 

<INPUT TYPE="submit" VALUE="실행">                        

</FORM> 

 


위 스크립트를 실행하면....

                           [그림] 실행 결과


■ Cookies 컬렉션 - HTTP 요청에서 보내진 쿠키의 값을 찾을 수 있게 한다.


  Request.Cookies(cookie)[(key)|.attribute]


① Response.Cookies - 쿠키 값 설정 

② Request.Cookies - 쿠키 값 가져오기 

 


매개 변수로서는....


(1) cookie - 검색해야 하는 쿠키 값을 지정


(2) key -  쿠키 사전에서 하위 키 값을 찾는데 사용하는 선택적 매개 변수


(3) attribute - 쿠키 자체에 관한 정보를 지정


쿠키가 쿠키 사전인지 여부(쿠키에 키가 있는지 여부)를 판별하려면 아래 스크립트를 사용한다.


  <%= Request.Cookies("myCookie").HasKeys %>


여기서 myCookie는 쿠키 사전으로서, 앞의 값은 True로 평가되며, 반대의 경우는 False로 평가된다.


■ Cookie 활용 절차


(1) Response를 이용하여 쿠키 값을 설정하는데, 만일 쿠키가 없으면 새로 작성


'testcookie라는 쿠키에 값(computer)을 넣는다. 

Response.cookies("testcookie") = "computer"    

 


(2) 정의된 쿠키 값을 가져올 때는 다음과같이 사용


'testcookie라는 쿠키의 정의 값을 읽어온다. 

Reqeust.cookies("testcookie")      

 


(3) 쿠키는 사전으로서 다음과같이 사용


Response.cookies("testcookie")("test1") = "value1" 

Response.cookies("testcookie")("test2") = "value2" 

Response.cookies("testcookie")("test3") = "value3" 

 


이렇게 하면 testcookie에서 key 값으로 test1,test2,test3을 사용할 수가 있다. 즉 testcookie라는 쿠키사전은 "test_3=value3&test_2=value2&test1=value1"란 값을 가지고 있으며, 이들 모두 쿠키사전에 저장된다.


예를 들면....(Cookies_2.asp)


<% 

' 문자열을 쿠키에 설정 

Response.Cookies("myCookie1") = "안녕하세요." 

' 날짜 및 시간을 기억하는 함수를 쿠키에 설정 

Response.Cookies("myCookie2") = Now() 

%> 

기억된 쿠키 값 클라이언트에 출력<br><hr> 

<% 

'Request.Cookies는 설정된 쿠키 값을 가져온다. 

Response.Write Request.Cookies("myCookie1") & "<br>" 

Response.Write Request.Cookies("myCookie2") 

%> 

 


결과는....

                          [그림] 출력 결과

■ ServerVariables 컬렉션 - 미리 정의된 환경 변수 값을 저장


  Request.ServerVariables (server environment variable)  

 

매개 변수로서....


▶ server environment variable 값


(1) ALL_HTTP - 클라이언트가 보낸 모든 HTTP 헤더

(2) ALL_RAW - 원본 형식으로 된 모든 헤더를 찾는다.

(3) APPL_MD_PATH - 응용 프로그램에 대한 메타베이스 경로를 찾는다.

(4) APPL_PHYSICAL_PATH - 메타베이스 경로에 따라 실제 경로를 찾는다.

(5) AUTH_PASSWORD - 클라이언트의 인증 대화 상자에 입력한 값

(6) AUTH_TYPE - 사용자를 인증하기 위해 서버가 사용하는 인증 방법

(7) AUTH_USER - 인증된 사용자 이름

(8) CERT_COOKIE - 클라이언트 보증서를 위한 고유 ID

(9) CERT_FLAGS - 클라이언트 보증서가 있는 경우 bit 0은 1로 설정

(10) CERT_ISSUER - 클라이언트 보증서의 발급 필드

(11) CERT_KEYSIZE - SSL(Secure Sockets Layer) 연결 키 크기의 비트 수

(12) CERT_SECRETKEYSIZE - 서버 보증서 개인 키의 비트 수

(13) CERT_SERIALNUMBER - 클라이언트 보증서의 일련 번호 필드

(14) CERT_SERVER_ISSUER - 서버 보증서의 발급 필드

(15) CERT_SERVER_SUBJECT - 서버 보증서의 제목 필드

(16) CERT_SUBJECT - 클라이언트 보증서의 제목 필드

(17) CONTENT_LENGTH - 클라이언트가 제공한 내용의 길이

(18) CONTENT_TYPE - GET, POST 및 PUT 등의 내용을 첨부 데이터 유형

(19) GATEWAY_INTERFACE - 서버에서 사용되는 CGI 개정 기능

(20) HTTPS_SERVER_ISSUER - 서버 보증서의 발급자 필드.

(21) HTTPS_SERVER_SUBJECT - 서버 보증서의 제목 필드.

(22) PATH_INFO - 클라이언트가 제공한 추가 경로 정보

(23) QUERY_STRING - HTTP 요청의 물음표(?) 다음에 오는 문자열에 저장된 쿼리 정보.

(24) REMOTE_ADDR - 요청을 만드는 원격 호스트의 IP 주소.

(25) REMOTE_HOST - 요청을 만드는 호스트 이름.

(26) REQUEST_METHOD - 요청을 만들기 위해 사용한 방법

(27) SCRIPT_NAME - 실행되는 스크립트의 가상 경로

(28) SERVER_NAME - 서버의 호스트 이름, DNS 별명 또는 IP 주소

(29) SERVER_PORT - 요청이 보내진 포트 번호

(30) SERVER_PROTOCOL - 요청된 정보 프로토콜의 이름 및 버전


ServerVariables 컬렉션을 이용하여 전체 환경 변수를 출력시키는 예.!


<!-- servervariables_1.asp --> 

<% 

'서버 환경 변수 출력 

For each item_list in request.servervariables 

    response.write "<b>" & item_list & "</b>: " 

    response.write request.servervariables(item_list) & "<br>" 

Next 

%> 

 


실행 결과는....

                     [그림] 출력 결과


■ TotalBytes 속성 - 본문에서 클라이언트가 내보내는 총 바이트 수를 지정하는 기능


  Counter = Request.TotalBytes


다음 스크립트는 변수를 Request 객체에 들어 있는 총 바이트 수와 같게 지정


<% 

Dim bytecount 

bytecount = Request.TotalBytes 

%> 

 


■ Response 객체


                   [표] Response 객체 구성

컬렉션

속성

메서드

Cookies

Buffer

AddHeader

CacheControl

AppendToLog

Charset

BinaryWrite

ContentType

Clear

Expires

End

ExpiresAbsolute

Flush

IsClientConnected

Redirect

PICS

Write

status


Response 객체를 사용하여 클라이언트에 결과를 보낼 수 있다.


  Response.collection|property|method

컬렉션은 Cookies 쿠키 값을 지정한다. 즉 컬렉션을 사용하여 쿠키 값을 설정할 수 있다.


속성으로는....


                   [표] Response 객체에 대한 속성

속 성

설  명

Buffer

페이지 결과가 버퍼 처리가 되었는지 여부를 나타낸다.

CacheControl

프록시 서버가 ASP로 작성한 결과를 캐시에 놓을 수 있을지 여부를 결정

Charset

내용-형식 헤더에 문자 집합 이름을 추가

ContentType

응답에 대한 HTTP 내용 형식을 지정

Expires

브라우저에 캐시된 페이지가 만료되기 전의 기간을 지정

ExpiresAbsolute

브라우저에 캐시된 페이지가 만료되는 날짜 및 시간을 지정

IsClientConnected

클라이언트가 서버와 연결이 해제되었는지를 나타낸다.

Pics

응답 헤더의 pics-label 필드에 PICS 레이블 값을 추가

Status

서버에서 보낸 상태 표시줄의 값


메서드로는....


                   [표] Response 객체에 대한 메서드

메서드

설  명

AddHeader

HTML 헤더 name을 value로 설정한다.

AppendToLog

요청에 따라 문자열을 웹 서버 로그 항목 끝에 추가한다.

BinaryWrite

문자 집합을 변환하지 않고 주어진 내용을 현재 HTTP 출력으로 작성한다.

Clear

버퍼에 있는 모든 HTML 결과를 지운다.

End

“.asp” 파일 처리를 멈추고 현재 결과 값을 보낸다.

Flush

버퍼에 있는 결과를 즉시 보낸다.

Redirect

전달 메시지를 브라우저에 보내고 그 결과 다른 URL에 연결한다.

Write

현재 HTTP에 변수를 문자열로 쓴다.


■ Cookies 컬렉션


  Response.Cookies(cookie)[(key)|.attribute] = value


(1) key  - 쿠키는 사전으로 사용되고 key는 value로 설정

(2) attribute  - 쿠키 자체 정보를 지정


속성 매개 변수는....


               [표] Cookies 컬렉션에 대한 속성 매개 변수와 설명

속성 매개 변수

설  명

Domain

쓰기 전용. 지정하면 쿠키는 지정된 도메인 요청에만 보내진다.

Expires

쿠키 만료 날짜로서, 이 날짜는 세션이 끝난 후 쿠키가 클라이언트 디스크에 저장된 순서대로 설정되어야 한다. 현재 날짜 이전의 날짜로 속성이 설정되지 않으면 쿠키는 세션이 끝날 때 만료된다.

HasKeys

읽기 전용으로 쿠키에 키를 포함할지 여부를 지정

Path

쓰기 전용으로, 지정하면 쿠키는 지정된 경로 요청에만 보내진다. 만일 속성을 설정하지 않으면 응용 프로그램 경로가 사용

Secure

쓰기 전용으로, 쿠키 보안 여부를 지정


(3) Value - key 또는 attribute을 할당하도록 값을 지정


예에서 처럼 key로 쿠키를 작성하면....


<%  

Response.Cookies("mycookie")("type1") = "sugar" 

Response.Cookies("mycookie")("type2") = "ginger snap" 

%>  

 

다음의 헤더를 보내게 된다.


  Set-Cookie:MYCOOKIE=TYPE1=sugar&TYPE2=ginger+snap


만일 key를 지정하지 않고 이후 myCookie를 지정하면 type1과 type2가 없어지게 된다.


다음 예를 보면....


  <% Response.Cookies("myCookie") = "chocolate chip" %>


앞의 예에서 type1과 type2 key는 없어지고 이들 값은 버려진다. 즉 myCookie 쿠키는 새 chocolate chip값을 가지게 된다.


반대로 key가 있는 쿠키를 호출하면 쿠키에 포함된 비 key 값들이 없어진다. 예를 들어, 앞의 코드는 다음에 아래대로 Response.Cookies를 호출하면....


  <% Response.Cookies("myCookie")("newType") = "peanut butter" %>

chocolate chip 값이 버려지고 newType은 peanut butter로 설정된다.


다음 구문을 이용하여 쿠키에 key를 포함할 지를 결정한다.


  <%= Response.Cookies("myCookie").HasKeys %>


myCookie가 쿠키 사전이라면 앞의 값은 True가 되고, 그렇지 않을 경우 값은 False가 된다.


만일 반복 인수를 사용하면 쿠키 속성을 설정할 수 있다. 예를 들어, 모든 쿠키를 특정 날짜에 만료되도록 하려면 다음 스크립트를 이용한다.


<%  

For Each cookie in Response.Cookies 

  Response.Cookie(cookie).Expires = #July 4, 1999# 

Next 

%>  

 

또한 반복 인수를 이용하면 한 모음의 모든 쿠키 값 또는 한 쿠키의 모든 key를 설정할 수 있다. 하지만 key가 없는 쿠키에서 불렀을 경우는 반복 인수가 실행되지 않는다. 이것을 방지하려면 먼저 “.HasKeys” 구문을 이용하여 쿠키에 key가 있는지를 확인하여야 한다.


다음 예를 보면....


<%  

If Not cookie.HasKeys Then 

  '쿠키 값 설정  

  Response.Cookies(cookie) = "" 

Else 

  ' 쿠키 콜렉션에 각 Key 값을 설정한다. 

  For Each key in Response.Cookies(cookie) 

    Response.Cookies(cookie)(key) = "" 

  Next key 

%>  

 


다음 예제는 쿠키 값 설정 방법과 속성에 값을 지정하는 방법을 나타낸다.


<%  

Response.Cookies("name").Domain = "www.cookiemonster.com"  

Response.Cookies("name").Expires = Date + 365  

Response.Cookies("name").Expires = #January 01, 1999# 

Response.Cookies("name").Path = "/this/is/the/path" 

Response.Cookies("name").Secure = True  

%>  

 


예를 들면....


<% Response.buffer = True %> 

  <form action="<%=Request.ServerVariables("URL")%>" method="post">  

   이름:  

   <input type="text" name="name" value="<%=Request("name")%>" size="20">  

   <input type="submit" value="submit">  

  </form>  

cookie 정보 설정<br><p> 

<%  

' 폼에 입력된 데이터를 전달 

f_name = Request("name")  

'쿠키 값 설정 

Response.Cookies("name") = f_name 

%>  

<!-- 클라이언트에 쿠키 값 출력 --> 

Response.Cookie("name") =<%=f_name%><br> 

 


결과는....


                          [그림] 출력 결과


■ 쿠키 값 설정 및 읽어오기 활용


(1) 폼에서 사용자 ID와 Password를 입력한다.


<!-- Cookies_3.asp  --> 

<!-- 사용자 ID 와 Password를 입력하는 폼 --> 

<HTML> 

<BODY> 

<FORM ACTION="Cookies_3_Response.asp" METHOD="POST"> 

사용자 ID : <INPUT TYPE="TEXT" NAME="user_id"><br> 

사용자 Password : <INPUT TYPE="password" NAME="user_password"><br><p> 

<INPUT TYPE="SUBMIT" VALUE="Submit"> 

</FORM> 

</BODY> 

</HTML> 

 


출력 결과.....

                            [그림] 출력 결과


여기서 사용자 ID와 Password를 각각 “kim"과 ”1234“를 입력하였다.


(2) 폼에서 입력한 사용자 ID와 Password 및 만료 날짜를 쿠키에 저장한다.

<% 

'Cookies_3_response.asp 

' 폼에서 입력된 ID와 Password를 현재 쿠키 값으로 설정 

Response.Cookies("user_id")= Request.Form("user_id") 

Response.Cookies("user_id").Expires="Jan 1, 2002" 

Response.Cookies("user_password")= Request.Form("user_password") 

%> 

<HTML> 

<BODY> 

쿠키에 저장했음. 

</BODY> 

</HTML> 

 


실행 결과....

                               [그림] 출력 결과


(3) 저장된 쿠키 값을 가져온다.


<!-- Cookies_3_read.asp  --> 

<% 

'저장된 쿠키 값을 가져온다. 

Name_id = Request.Cookies("user_id") 

Name_password = Request.Cookies("user_password") 

%> 

<HTML> 

<BODY> 

쿠키에 저장된 사용자 ID와 Password<br> 

<hr> 

사용자 ID : <%=name_id%><br> 

사용자 Password : <%=name_password%> 

</BODY> 

</HTML> 

 


실행 결과....

                            [그림] 출력 결과


■ ContentType 속성 - HTTP 내용 형식 지정


기본값 : “text/HTML”


  Response.ContentType [= ContentType ]

다음은 내용 형식을 Channel Definition Format(CDF)로 설정한 예


  <% Response.ContentType = "application/x-cdf" %>


다음은 ContentType 속성을 다른 일반 값으로 설정한 예


<% Response.ContentType = "text/HTML" %> 

<% Response.ContentType = "image/GIF" %> 

<% Response.ContentType = "image/JPEG" %> 

 

■ End 메서드 - 웹 서버가 스크립트 처리를 멈추고 현재의 결과 값을 클라이언트로 보낸다.


  Response.End


예를 들면....


<!-- Response.End_1.asp -->  

<% 

test_1 = 10 

test_2 = 20 

'출력됨 

response.write test_1 & "<br>" 

Response.End 

'출력되지 않음 

response.write test_2  

%> 

 


결과는....

                             [그림] 출력 결과


만일 Response.Buffer를 True로 설정한 경우에 Response.End를 요청하면 버퍼가 지워진다.


참고로 결과 값을 사용자에게 보내지 않으려면 다음을 호출해야한다.


<%  

Response.Clear 

Response.End 

%>  

 


예를 들면....


<% Response.Buffer = TRUE %>  

<% 

test_1 = 10 

test_2 = 20 

response.write test_1 & "<br>" 

'모든 자료가 출력되지 않음 

Response.Clear 

Response.End 

response.write test_2 

%> 

 


결과는 클라이언트 브라우저에 전혀 자료가 출력되지 않는다.


■ Write 메서드 - 지정한 문자열을 현재 HTTP로 출력


      Response.Write variant


예제는 Response.Write 메서드를 사용하여 클라이언트에게 결과를 보내는 기능


I just want to say <% Response.Write "Hello World." %>  

Your name is: <% Response.Write Request.Form("name") %>  

 


예를 들면....


<!-- ResponseWrite_1.asp --> 

<html><head> 

<title>ResponseWrite_1.asp</title> 

</head><body> 

<%  

   '문자열을 연결해서 출력 

   Name_1 = "홍길동" 

   Name_2 = "학생" 

   Name_3 = Name_1 & "은 " & Name_2  & " 입니다." 

   Response.Write Name_3 

%> 

</body></html> 

 


실행 결과는....

v

 


반응형