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_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 메서드를 사용하여 클라이언트에게 결과를 보내는 기능
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 |