반응형

MSSQL 2005  >>   SQL Server business intelligence Development Studio

 

사용 하여 에이전트 작업 간편화

 

작업 목적  제휴사 관련 데이타 전달 작업

 

제휴사 관련 데이타 view 작업(필요한 데이타 만 추출 ) 뷰 제작후

 

디비 > 작업 > 데이타 내보내기

 

데이터 원본 (sql Native Client ) ( 실제 디비 선택)

 

대상 >>플랫 파일 대상 >> 파일이름 선택후 ( csv ) >> 데이타 내보내기 >>

패키지 저장 및 실행 옵션시 SSIS 패키지 선택 >>파일 시스템 선택  >> SSIS 로 패키지 제작

 

MSSQL 2005  >>   SQL Server business intelligence Development Studio  선택

 

새 프로젝트

비지니스 인텔리전스 프로젝트

탬플릿 선택

Integration Services 프로젝트

 

SSIS 패키지 선택  기존 패키지 불러오기 패키지 경로 ( 암호 alba)

 

불러와서

 

스케쥴 작업 

 

파일 시스템 ( 해당 파일 삭제후 )

 

데이터 흐름작업( 실제 디비에서 데이타 불러와서 csv파일 저장)

 

ftp 작업 제휴 관련 데이타 ftp로 전송

 

작업 완료

 

해당 작업시 해당 폴더에 sql 에이전트 사용자 폴더 수정,삭제 권한 추가 부여

 

완료 시 정상적으로 ftp 전송

 

작업완료 ;;

 

대충 정리 차후 제대로 정리가 필요함 ㅋㅋ;;

 

 

 

반응형
반응형
 

실행계획에 대해서 몇마디 적어보려고 합니다.

 

저희 팀에도 개발자가 몇 명 있습니다.

쿼리분석기로 쿼리를 작성하여, 이 쿼리가 어떻게 실행되는지 보기 위해 실행계획을 확인하는데, 중요한 부분을 놓치곤 합니다.

 

다음과 같은 쿼리가 있습니다.


select * from CE_ACCT where MANDT = '100' and PAOBJNR = '0000000607'

 

이 쿼리의 실행계획은,

 

이 테이블은 클러스터드 인덱스 한개만 있으므로 위 그림으로 보면 데이터 액세스 방식이 'clustered index seek'임을 알수 있습니다.

물론 마우스 포인터를  가져다 대면 'clustered index seek'라고 나오겠지요.

 

그리고는 '인덱스 잘 사용하고 있군'하고 넘어가는 경우가 종종 있습니다.

 

하지만, 사실 이 그림만 봐서는 방식은 인덱스 조회인데, 제대로 인덱스를 사용하고 있는지 알 수가 없습니다. 

좀더 자세한 내용을 알기 위해서는 꼭 실행 계획의 'Argument'를 확인하셔야 합니다.

 

인덱스 조회 노드에 마우스 포인터를 가져가 보면,

위 그림에서 '인수'라고 쓰인 부분이 바로 'Argument'입니다.

set statistics profile on 옵션을 준 후에 text plan을 보면, 결과창에 'Argument' 칼럼이 있습니다. 바로 이 값을 확인해 봐야 합니다.

 

OBJECT:([PRD].[dbo].[CE_ACCT].[cx]), SEEK:([CE_ACCT].[MANDT]=[@1]), 

WHERE:([CE_ACCT].[PAOBJNR]=[@2]) ORDERED FORWARD

Argument에는 크게 두가지 부분으로 나뉩니다.

SEEK WHERE

SEEK 부분이 바로 쿼리 조건 중 인덱스 조회를 할 때 사용되어지는 칼럼 입니다.

WHERE 부분은 그렇게 인덱스를 통해 걸러진 결과집합을 가지고 필터로 걸러 내는 역할을 하는 칼럼입니다.

 

다시 예제 쿼리로 돌아가서,

우선 조회되는 테이블의 인덱스는 MANDT, AKTBO, PAOBJNR로 구성된 클러스터드 인덱스 입니다.

그리고 이 인덱스의 선택도를 보면

dbcc show_statistics (CE_ACCT,cx)


앞 두 칼럼 MANDT, AKTBO의 선택도는 낮고 제일 뒤에 있는 칼럼인 PAOBJNR 만 선택도가 굉장히 좋은 것을 알수 있습니다.

 

where 절의 조건 칼럼은 MANDT, PAOBJNR이고 이 두 칼럼 모두가 인덱스에 포함되어 있는데, 하나는 인덱스 조회용으로, 또 하나는 필터 용으로 사용되었을까요? 다시한번 엄밀히 말하면 PAOBJNR 칼럼의 조건은 인덱스에서 사용되지 않은 것입니다. 이 PAOBJNR칼럼의 선택도가 좋음에도 불구하고 왜 사용되지 못했을까요?

 

이유는, 인덱스의 칼럼 순서와 인덱스 구조 때문입니다.

인덱스 구조에 대한 설명은 여기서 하지 않고, 결론만 말씀 드리면, 인덱스 생성시 칼럼의 순서대로, 인덱스 칼럼이 사용될 수 있습니다.

다시 말하면, 위와 같은 순서의 인덱스에서는 PAOBJNR 칼럼이 인덱스 조회시 사용되려면, AKTBO 칼럼에 대한 조건이 where 절에 들어가 있어야 한다는 얘기지요.

 

그러므로 이 쿼리의 성능을 최적화 하기 위해서는 두가지 방법이 있습니다.

1. 쿼리에 AKTBO 조건이 포함되도록 한다.

2. 인덱스 칼럼의 순서를 변경한다. MANDT, AKTBO, PAOBJNR --> MANDT, PAOBJNR, AKTBO

물론 인덱스 칼럼의 순서를 변경하는 일은 극히 신중을 기해야 합니다.

 

그래서 AKTBO 칼럼에 대한 조건을 주고 쿼리를 실행해 보면


select * from CE_ACCT where MANDT = '100' and PAOBJNR = '0000000607' and AKTBO = 'X'

 

OBJECT:([PRD].[dbo].[CE_ACCT].[cx]), SEEK:([CE_ACCT].[MANDT]=[@1] AND [CE_ACCT].[AKTBO]=[@3] AND [CE_ACCT].[PAOBJNR]=[@2]) ORDERED FORWARD

실행계획의 Argument 부분에 SEEK 만 있고, WHERE 부분은 없어진 것을 알 수 있습니다.

그러면 두 쿼리의 비용과 I/O를 비교해 보겠습니다.


(1개 행 적용됨)

Table 'CE_ACCT'. Scan count 1, logical reads 395, physical reads 0, read-ahead reads 0.


(1개 행 적용됨)

Table 'CE_ACCT'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0.

 

AKTBO 조건이 유무에 따라서 비용이 98.93% 대 1.07% 그리고 I/O 차이는 395 대 3으로

엄청난 성능 향상을 가져왔습니다.

 

 

위 쿼리를 가지고 재미있는 실험을 하나 해보겠습니다.

아래 두 쿼리의 I/O를 비교하면 어떤차이가 있을까요? (쿼리1의 결과는 1행만을 반환 합니다. 그리고 쿼리2는 10000행을 반환 하고요.)

 

--쿼리1

select * from CE_ACCT where MANDT = '100' and PAOBJNR = '0000000607'

 

--쿼리2

select * from CE_ACCT where MANDT = '100'

 

결과는,

--쿼리1

(1개 행 적용됨)

Table 'CE_ACCT'. Scan count 1, logical reads 395, physical reads 0, read-ahead reads 0.

 

--쿼리2

(10000개 행 적용됨)

Table 'CE_ACCT'. Scan count 1, logical reads 395, physical reads 0, read-ahead reads 0.

 

놀랍게도, I/O는 같습니다.

이유는 두 쿼리의 실행계획의 Argument를 보면 이해할 수 있습니다.

--쿼리1

OBJECT:([PRD].[dbo].[CE_ACCT].[cx]), SEEK:([CE_ACCT].[MANDT]=[@1]),  WHERE:([CE_ACCT].[PAOBJNR]=[@2]) ORDERED FORWARD

--쿼리2

OBJECT:([PRD].[dbo].[CE_ACCT].[cx]), SEEK:([CE_ACCT].[MANDT]=[@1]) ORDERED FORWARD

쿼리1의 실행계획은 위에서 이미 설명 드렸습니다.

두 쿼리다 인덱스 조회 방식을 사용하고 있고 SEEK 부분이 같습니다. 물론 쿼리1은 WHERE 부분에 아주 선택도가 좋은 칼럼 PAOBJNR의 조건이 있기 때문에 결과는 1행만 반환하는것이고요.

결과가 1행만 반환했다고 해서 실제 디스크에서 읽는 I/O의 양이 꼭 적은 것은 아닙니다. 위 실험에서 보듯이...

그러므로 위 두 쿼리는 MANDT = '100' 조건만으로 인덱스를 사용하여 디스크(혹은 메모리)에서 읽은 다음, 첫번째 쿼리만 PAOBJNR 칼럼으로 필터링하여 결과를 보여주는 것입니다. 그러므로 동일한 I/O가 발생되는 것이지요.

 

그러면 이제 마무리를 지어볼까 합니다.

1. 먼저, 실행계획을 볼 때에는 꼭 'Argument'를 확인하라고 말씀드렸습니다. 추가로, graphical plan 보다 text plan을 추천합니다.

가끔 쿼리가 긴 경우, graphical plan 의 Argument의 뒷부분이 짤리기도 합니다. 또한 text plan은 보다 더 많은 유용한 정보를 보여 줍니다.

2. 인덱스 조회 방식일 때, Argument 에는 SEEK와 WHERE의 두부분으로 나뉜다고 말씀 드렸습니다. SEEK 부분에 있는 칼럼이 인덱스를 제대로 사용하는 칼럼이고, WHERE 부분의 칼럼은 다 읽어 놓은 결과에서 여러분 화면으로 데이터를 보내서 보여줄 때 필터 역할만 합니다.

3. 인덱스 칼럼의 순서대로 인덱스를 사용할 수 있습니다. 그러므로, 인덱스 칼럼의 순서와 맨 앞에 오는 칼럼을 결정하는 일은 너무나 중요합니다.

 

나름대로 중요하다고 생각되는 내용을 두서없이 적어 봤습니다. 이 글을 읽고 조금이나마 도움이 되셨기를 바랍니다.

 

 

잘보겠습니당 ^_^

반응형
반응형
 

앞으로 우리가 사용하게될 인터넷 혹은 웹대한 방향성을 제시한 일종의 패러다이다.

그렇다면 기존의 Web을 'Web1.0'이라고 하겠는데 과연 이 Web2.0과 그것과는 무엇이 다른가?

 

 

1. Web2.0은 새로운 기술이 아니다. Web 환경의 변화의 방향을 제시한 것이다.

 

지난 2005년 샌프란시스코에서 Web2.0 컨퍼런스가 열렸다. 가장 사람들에게 의문점을 안겨준 것은 바로 'Web2.0'이라는 단어다. 이 Web2.0은 새로운 기술도 아니고 새로운 표준도 아닌 앞으로 Web 변화할 혹은 추구하게 될 최종 종착지에서의 모습을 말한다.

 

맨 처음 Web 등장했을 때는 간단한 이미지와 텍스트로 이루어진 정보가 대부분이었다. 막강한 인터넷 산업의 발전을 등에 업은 Web 이미지나 텍스트외에 다양한 포맷의 문서, 동영상, 파일등을 주고 받을수 있는 사용자 공간으로 변모했다.

 

하지만 Web2.0은 여기서 더 나아간다.

예를 들어, 현재도 그렇게 하고 있지만, 인터넷 온라인 영화를 본다고 했을 경우 Web을 통해서 실시간으로 영화감상을 할수 있다. 이 순간에 Web이라는 것이 영화플레이어로 변모하는 것이다. 또 다른 가능성은 Web을 통해 문서를 편집하는 것이다. 현재는 각종 워드프로세서 프로그램을 운영체제에 설치해야 하지만 Web2.0환경에서는 Web을 통해서 워드프로세서를 제공하는 싸이트에 접속하면 얼마든지 워드 작업을 할수 있다. 이 뿐아니라 음악감상을 하고 싶으면 음악을 심지어 그래픽 작업도 웹에서 이루어지길 기대한다.

 

 

2. 데스크탑과 Web의 경계를 허물다.

 

Web2.0은 위의 예제와 같이 데스크탑이라는 컴퓨터 분야를 집어 삼킬지도 모른다. 결정적으로 운영체제 자체가 없어질도 모른다. 간단히 인터넷이 되는 TV 에서 모든 것을 할수 있을지도 모른다. 웹서핑, 영화, 음악, 워드, 그래픽등 모든것이 Web으로 통하는 것이 Web2.0이다.

 

이렇게 되면 컴퓨터의 한분야인 데스크탑분야는 사라질 것이며 거기에 의존하는 많은 기업들이 쓰러질 것이다. 또한 보다 쉽게 임베이딩이 될지도 모른다. 조그마한 PDA에서 고품격의 워드프로세서 작업을 하게 될지도 모른다.

 

 

3. Web2.0을 위한 기술들, 아키텍쳐의 병합, 그리고 표준.

 

Web2.0을 위한 기술들 중에서 현재 와 닫는 것이 Weblog, RSS, Wiki, Ajax 등과 같은 것이다. Weblog 줄여서 Blog라고 하는 것은 이 시대를 이끌 새로운 대표 단어로 모두 인정하는 것이다. RSS는 보다 빠른 정보공유 또는 정보제공을 가능하게 해준다. Wiki는 기존의 게시판을 대체하는 어떤 주제에 대한 토론을 가능하게 해준다. Ajax는 표준 호환성 문제 개선에 선봉장이다.

 

이러한 Web2.0은 중심에는 표준이 자리하고 있다. 어떤 곳에서도 모두 동일한 성능과 표현, 구조등은 표준화된 스펙을 요구한다. 어떠한 웹이라라는 환경과 어떠한 아키텍쳐에서도 동일한 구조, 표현등을 위해서는 표준을 준수해야만 한다.

 

비단 이러한 것 외에도 Web을 통해서 소외받을수 있는 장애자나 노인, 어린이등을 위해서라도 표준화는 절실하다.

 

 

4. Web2.0 벌써 시작일지도... Web is Everthing

Web2.0은 뭔가 새로운 것이 아니다. 앞으로 그렇게 변모해야 할 목표다.   컴퓨터라는 기기에 의존하지 않고도 Web이라는 매체를 통해서 많은 것을 하게 됨으로써 이제  Web은 가정생활 속의 일부가 될지도 모른다. Web을 통해서 문서작업을 하고 영화를 보고, 음악을 감상하고 책을 읽게 될 그런 Web 환경.

 

모든 것은 웹으로 통하게 된다.

반응형
반응형

JDK 1.5.0 설치

Download Page

https://sdlc6c.sun.com/ECom/EComActionServlet;jsessionid=B4B09576DEC1CA4CE5A7288FA2B15D16

Accept 를 선택해야 다운받을 수 있다


설치될 폴더를 지정해준다

 



환경변수 등록

내 컴퓨터 오른 클릭 후 속성

Advanced 탭에서 Environment Variables 버튼 클릭

 


Path 등록

 


CLASSPATH 등록

 


Tomcat 5.5 설치

Download

http://ftp.kaist.ac.kr/pub/Apache/tomcat/tomcat-5/v5.5.17/bin/apache-tomcat-5.5.17.exe


설치 주르륵 해 나간다

필자는 이 화면에서 고민하다가 그냥 Next 눌렀다


 

설치 폴더 설정  


 

비밀번호 적어주고 Next (안적어도 무방하다) 


jre1.5.0이 설치되어있는 폴더가 맞는지 확인한다(경로가 다르다면 잡아준다)

 

톰캣도 CLASSPATH를 등록해준다

 

설치 완료 후 실행시킬것이냐 물어보는데 일단은 실행시키지 않는다

 

Flex 설치

별거 없음... 그냥 Next Next Next... Serial Number만 제대로 적어주면 됨


Flex 폴더의 flex.war, profiler.war, samples.war 를 톰캣 webapps 폴더에 복사

 

복사하는 것만으로 윈도우가 알아서 폴더를 만들고 그 폴더에 압축을 푼다

(만약 안된다면 톰캣을 다시 시작하면 된다. 물론 직접 압축을 풀어도 상관없다) 



Tomcat5.5\conf 폴더에 있는 server.xml 을 열고 아래 코드를 추가한다

<Context path="/flextest" reloadable="true" docBase="C:\Java\Tomcat 5.5\webapps\ROOT\flex" workDir="C:\Java\Tomcat 5.5\work" />  

 

주욱 내려가서 </HOST> 윗줄에 추가한다

 

path 는 web-root/접근명(디렉토리명과 달라도 가능)

docBase 는 위의 path 로 접근했을때 읽어올 파일들이 저장되어 있는 local path

workDir 는 path 로 접근했을때 사용되는 App 들이 컴파일되어 저장되는 위치

server.xml 수정이 끝났으면 Tomcat을 재실행한다


Tomcat 5.5\webapps\flex 폴더에 hello.mxml 파일을 만들고 소스를 적어준다


<?xml version="1.0"?>

<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml">

        <mx:Panel title="It's ZeLkOvA" marginTop="0" marginBottom="10" marginLeft="10" marginRight="10">

                <mx:Label text="Hello Flex!" color="#6601D7" fontSize="24"/>

        </mx:Panel>

</mx:Application>

 

Tomcat을 실행한다

 

Start 버튼을 누르고 OK 한다

 


http://127.0.0.1:8080/flex/hello.mxml 로 확인한다

 

 

여기까지는 영어는 되지만 한글이 들어가면 에러가 난다

(Flex Builder 설치 안하고 한글 쓰려면 맨 아래의 설명 참고)

<?xml version="1.0"?>

<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml">

        <mx:Panel title="It's ZeLkOvA" marginTop="0" marginBottom="10" marginLeft="10" marginRight="10">

                <mx:Label text="안녕 플렉스!" color="#6601D7" fontSize="24"/>

        </mx:Panel>

</mx:Application>

 

 

한글 잡아주기.. 참..간단하다..

 

<?xml version="1.0" encoding="euc-kr"?>

<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml">

        <mx:Panel title="It's ZeLkOvA" marginTop="0" marginBottom="10" marginLeft="10" marginRight="10">

                <mx:Label text="Hello Flex!" color="#6601D7" fontSize="24"/>

                <mx:Label text="안녕 플렉스!" color="#6601D7" fontSize="24"/>

        </mx:Panel>

</mx:Application>

 

한글 잘나온다..


Flex builder 설치

이거도 별거없다... Next 연타

설치 후 실행하면 시리얼 적으라고 나온다 설명 필요없다(알아서 하시길..)

 

Flex Builder 실행시키고 hello.mxml 파일의 소스를 수정한다

<?xml version="1.0"?>

<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml">

        <mx:Panel title="It's ZeLkOvA" marginTop="0" marginBottom="10" marginLeft="10" marginRight="10">

                <mx:Label text="Hello Flex!" color="#6601D7" fontSize="24"/>

                <mx:Label text="안녕 플렉스!" color="#6601D7" fontSize="24"/>

        </mx:Panel>

</mx:Application>


http://127.0.0.1:8080/flex/hello.mxml 로 확인한다

반응형
반응형

 
우편번호 테이블 설계화면입니다.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
zip_search.asp 파일 실행시 초기화면입니다. 기본적으로 [시도선택]콤보박스는 최초 페이지가 읽혀질 때 우편번호 테이블에서 읽어옵니다. [구군선택]콤보박스는 초기에는 아무 내용도 없지만, [시도선택]콤보박스에서 원하는 시도를 선택하면  Ajax를 이용하여 해당 구군을 표시하게 됩니다.
 
 
 
초기에는 구군콤보박스에 아무 내용도 들어있지 않습니다.
 
 
 
시도를 선택하고 난 이후의 구군콤보박스의 모습입니다. Ajax를 이용하여 비동기식으로 원하는 자료를 테이블에서 쿼리한 결과입니다.
 
 


원하는 동을 입력한 후 검색을 하면 역시 Ajax를 이용하여 검색된 결과를 표시하도록 하였습니다. 아래 소스를 통해서 자세히 알아보도록 하겠습니다.

 

 

<!--  Zip_Search.asp -->
<!--#include file="dbcon.inc"-->
<%
     response.charset = "euc-kr"

     set rs = server.CreateObject("adodb.recordset")
     sql = "select distinct sido from tb_zip order by sido "
     rs.open sql, db, 1
%>

<script>
 var ajax_gugun;

 function get_gugun_list(sido)
 {  
      ajax_gugun = new ActiveXObject("Microsoft.XMLHTTP");
      ajax_gugun.onreadystatechange = get_gugun_list_callback;
      ajax_gugun.open("GET", "Zip_GugunList.asp?sido=" + sido, true);

      ajax_gugun.send();
 }

 

 function get_gugun_list_callback()
 {
      if(ajax_gugun.readyState == 4){   
           if(ajax_gugun.status == 200){
                if(typeof(document.all.div_gugun) == "object"){
                    document.all.div_gugun.innerHTML = ajax_gugun.responseText;
                }
           }
      }
 }

 

 var ajax_addr;
 function get_addr_list(){
      var sido, gugun, dong;

      sido = document.frmZip.sido.value;
      gugun = document.frmZip.gugun.value;
      dong = document.frmZip.dong.value;

      if (dong.length < 2)            return false;
    

      ajax_addr = new ActiveXObject("Microsoft.XMLHTTP");

      ajax_addr.onreadystatechange = get_addr_list_callback;
      ajax_addr.open("GET", "Zip_AddrList.asp?sido=" + sido + "&gugun=" + gugun + "&dong=" + dong, true);
     

      ajax_addr.send();
 }

 

 function get_addr_list_callback()
 {
      if(ajax_addr.readyState == 4){
          if(ajax_addr.status == 200){
              if(typeof(document.all.div_zip_list) == "object"){
                    if(ajax_addr.responseText.length > 0){
                         document.all.div_zip_list.style.display = "";
                         document.all.div_zip_list.innerHTML = ajax_addr.responseText;
                    }
                   else
                         document.all.div_zip_list.style.display = "none";     
               }
          }
     }
 }

</script>

 

<style>
      input, select, td {  font-family:tahoma;font-size:9pt; }
</style>

 

<table border="0" cellpadding="4" cellspacing="0" width="400">
<form name="frmZip">
 <tr>
  <td>
   <select name="sido" onChange="get_gugun_list(this.value);">
       <option value="">시도선택</option>
    <% Do Until rs.eof %>
          <option value="<%=rs("sido")%>" ><%=rs("sido")%></option>
    <%
               rs.movenext
          Loop

          rs.close
          Set rs = Nothing
    %>
   </select>
  </td>
  <td>
   <div id="div_gugun">

       <select name="gugun" >   
             <option value="">구/군선택</option>    
       </select>

   </div>
  </td>
  <td>
     동이름 : <input type="text" name="dong" style="width:50">
     <input type="button" value="검색" onClick="get_addr_list();" style="width:40;border-style:solid;border-width:1">
  </td>
 </tr>
 <tr>
  <td colspan="3" align="center">
       동이름을 입력하시오(2글자 이상)<br>
       (예 : 논현, 구의1동, .. )
  </td>
 </tr>
</form>
</table>

 

<div id="div_zip_list" style="display:none;overflow-y:scroll; height:300;width:400"></div>
 

 

<!--  Zip_GugunList.asp -->
<!-- #include file="dbcon.inc"-->

<%
     response.charset = "euc-kr"

     sido = request("sido")
 
     sql = "select distinct gugun from tb_zip where sido = '" & sido & "'   order by gugun"
     Set rs = server.CreateObject("adodb.recordset")
     rs.open sql, db, 1
%>

 <select name="gugun" >   
      <option value="">구/군선택</option>  

<% Do Until rs.eof  %>
      <option value="<%=rs("gugun")%>" ><%=rs("gugun")%></option>
<%
          rs.movenext
      Loop

      rs.close
      Set rs = Nothing
%>

 </select>

 

 

<!--  Zip_AddrList.asp -->
<!--#include file="dbcon.inc"-->
<%
     response.charset = "euc-kr"

     sido = request("sido")
     gugun = request("gugun")
     dong = request("dong")

     If sido = "" And gugun = "" Then
          
sql = "select zipcode, sido, gugun, dong, ri, build, addr from tb_zip where dong like '%" & dong & "%'"
     ElseIf sido <> "" And gugun = "" Then
       
  sql = "select zipcode, sido, gugun, dong, ri, build,  addr from tb_zip where sido = '" & sido & "' and dong like '%" & dong & "%'" 
     ElseIf sido <> "" And gugun <> "" Then
        
  sql = "select zipcode, sido, gugun, dong, ri, build,  addr from tb_zip where sido = '" & sido & "' and gugun = '" & gugun & "' and dong like '%" & dong & "%'" 
     End If

 

     Set rs = server.CreateObject("adodb.recordset")
     rs.open sql, db, 1
%>

 

<table cellpadding="3" cellspacing="3" border="1" width="400">
<%
     Do Until rs.eof
         zip = "[" & Left(rs("zipcode"), 3) & "-" & Right(rs("zipcode"), 3) & "]"
%>
   <tr>
     <td>
         <a href="#"><%=zip%> </a>
    </td>
    <td>
         <%=rs("addr")%>
    </td>
   </tr>
<%  
       rs.movenext
    Loop
%>
</table>

반응형
반응형
    

 

 

<!---------------------->

<!-- ajaxTest.asp -->

<!---------------------->

 

<script>
    var ajax_test;

 

    function getHttpRequest(){
        var tt = document.forms[0].ttt.value;

 

        // 비동기 요청/응답에 사용할 객체 생성
       ajax_test = new ActiveXObject("Microsoft.XMLHTTP");  


       // 콜백함수 연결
       // 요청 객체의 readyState값이 변경될 때마다 콜백함수 호출
       ajax_test.onreadystatechange = ajax_test_rev;    


       // 요청에 대한 초기화 작업
       // 매개변수:1. 전송방식, 2. 요청할 파일(URL), 3.동기(false)/비동기(true)여부
       ajax_test.open("GET", "test.asp?ttt=" + tt, true);   


       // 요청 개시
       // 비동기 방식이라면 바로 요청하고, 동기식이면 서버 응답이 있을 때까지 대기한 후 요청함
       ajax_test.send();
   }

 

   // 상태변경시마다 호출될 콜백함수
   function ajax_test_rev(){
        if(ajax_test.readyState == 4){  // 객체의 상태(0:비초기화, 1:로딩, 3:상호작용, 4: 완료)
        if(ajax_test.status == 200){ // http 상태(200:확인, 404:파일못찾음, 202:값없음)
        if(typeof(document.all["dd"]) == "object"){
                    // 응답된 텍스트를 원하는 레이어에 출력
                    // responseText에 응답된 내용이 저장되어 있음
                   document.getElementById("dd").innerHTML = ajax_test.responseText;
             }
        }
    }
 }


    var dragflag = false;
    var dragobj,dragfrm,x,y,sleft,sright;

   

   function move(e){
       if(dragflag){
             dragobj.style.left = sleft + event.clientX - x;
             dragobj.style.top = sright + event.clientY - y;
       }
       return false;
  }

 

  function drags(obj, e){
       dragobj = eval("document.all."+obj);
       

       dragflag = true;
       sleft  = parseInt(dragobj.style.left + 0);
       sright = parseInt(dragobj.style.top + 0);
       x = event.clientX;
       y = event.clientY;
  

       document.onmousemove = move;
       return false;
   }

  

   document.onmouseup = new Function("dragflag = false;");
</script>

 

<body>
   <form name="frm_dd">
        <input type="text" name="ttt"><br>
        <!-- 버튼 클릭 시 test.asp페이지 요청을 위해 getHttpRequest() 호출 -->
        <input type="button" onclick="document.all.dd.style.display='';getHttpRequest();" value="비동기 파일응답받기">
        <input type="button" onclick="document.all.dd.style.display='none';" value="감추기">
    </form>

 

    <!-- 요청한 페이지를 표시할 레이어 -->
    <div id="dd" style="position:absolute;display:none;left:100px;top:100px;width:200px;height=200px;"></div>

</body>

 

 

 

<!---------------------->

<!------ Test.asp ---->

<!---------------------->

 

<%
 response.charset = "euc-kr"
%>
 <BODY>
       <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
       <tr height="32">
            <td align="left" onMousedown="drags('dd',event);" bgColor="red">
                  <div id="ddtitle" style="border-style:solid;border-width:1px;width:100%;width:100%;height:100%">
                         <font color="#ffffff"> 이동막대 </font>
     &nbsp;&nbsp;&nbsp;&nbsp;
                         <span id="vv" style="cursor:hand;font-size:9pt" onClick="document.all.ddsub.style.display='';">[최대화]</span>
                         <span id="hh" style="cursor:hand;font-size:9pt" onClick="document.all.ddsub.style.display='none';">[최소화]</span>
                   </div>
               </td>  
           </tr>
           <tr height="168">
               <td>

                    <div id="ddsub" style="border-style:solid;border-width:1px;width:100%;height:100%">

                            <h1><%=request("ttt")%></h1>

                    </div>

              </td>
         </tr>
    </table>
 </BODY>

 

 

반응형
반응형

abs() - 절대값구하기
array(배열) - 배열을 반환
asc() - 문자의 ANSI문자값을 반환
atn() - 아크 탄젠트로 반환


cbool() - boolean형식으로 반환
cbyte() - byte형식으로 반환
ccur() - currency형식으로 반환
cdate() - date형식으로 반환
cdbl() - double형식으로 반환
chr() - asc()함수의 반대, ANSI문자를 일반문자로 변환
cint() - interger형식으로 반환
clng() - long형식으로 반환
cos(각도) - 주어진 각도의 코사인 값을 반환
createobject()

 - 자동화 인터페이스를 통해 다른 응용프로그램이나 프로그래밍 도구에 나타나는 객체에 대한 참조를 만들어 반환
cstr() - string형식으로 반환

 

date() - 현재의 날자를 반환
DateDiff(간격, 날짜1, 날짜2 [,firstdayofweek[, firstweekofyear]])

 - 간격인수 yyyy(년) q(분기), m(월), y(일[일년기준]), d(일), w(요일), ww(주[일년기준]), h(시),

   n(분), s(초)
dateserial(년,월,일) - 주어진 년,월,일에 대한 date형식을 반환

 

exp() - 주어진 수에대한 자연로그(승수로 거듭제곱하는 수) 밑인 e를 반환

filter(inputstring,값[,include[,비교]]))

 - inputstring는 검색할 문자열의 1차원 배열. include는 true나 false값을 가지는데, true로 설정되면

   값발견시 그값을 가진 배열을 반환하고,flase로 설정되면 검색에 맞지않는 부분의 배열을 반환. 비교는 비교형

   식을 나타내는 숫자값입니다
fix() - 주어진 수의 정수를 반환
formatcurrency() - 원화 형식으로 반환 예) 1,000
formatdatetime() - 날자와 시간으로 형식화하여 반환
formatnumber(숫자,소수자릿수) - 숫자로 형식화된 식을 반환 소숫점 몇째자리...
formatpercent(수,소수자리수) - 퍼센트형식으로 반환 기본 소수2째자리까지.

 

hex() - 주어진 수를 16진수로 변환
hour() - 0과23 사이의 시간을 나타낸다

inputbox(프롬프트[,제목][,기본값][,xpos][,ypos][,helpfile,context]) - 대화상자
instr([시작,]문자열1,문자열2[,비교])

 - 시작은 문자열 검색 시작위치, 문자열1은 검색할 문자이며, 문자열2는 찾아야할 문자, 비교는 비교상수를 나타냄
instrrev() - instr()과 반대로 문자 끝에서부터 검색
int() - 주어진 수의 정수부분을 반환
isarray() - 주어진 변수가 배열인지 판단하는 boolean값을 반환
isdate() - 주어진 식이 날짜로 전환 될수 있는지 나타내는 boolean값을 반환
isempty() - 주어진 변수가 초기화 되었는지 나타내는 boolean값을 반환
isnull() - 주어진 식이 유효한 데이터가 있는지 없는지 boolean값을 반환
isnumberic() - 주어진 식이 숫자로 값이 정해질 수 있는지 나타내는 boolean값 반환
isobject() - 자동화 객체를 참조하는지 여부를 나타내는 boolean값을 반환

 

join(목록[,구분기호])

 - 배열에 포함되어 있는 여러 문자열을 결합하여 만든 문자열을 반환. 목록은 1차원 배열이름, 구분기호는 문자열을

   구분하기위해 사용하고 기본값은 "" 공백

 

lbound(배열이름[,차원])

 - 주어진 배열에서 사용할 수 있는 가장 작은 첨자를 반환. 배열이름은 배열 변수의 이름, 차원은 배열의 차원중

   가장 작은 값을 나타냄

lcase() - 주어진 문자를 소문자로 반환
left(문자열,수) - 주어진 문자를 왼쪽으로부터 주어진 수만큼의 문자열을 반환
len() - 주어진 문자열의 문자 개수를 세는 함수
loadpicture(그림파일의이름) - 그림객체를 반환
log() - 주어진수의 자연 로그를 반환
ltime() - 앞에 공백이 없는 문자열을 반환

 

mid(문자열,시작[,길이]) - 주어진 문자열에서 주어진 위치에서부터의 길이만큼의 문자를 반환
minute(시간) - 시간에서 분값(0~59)을 반환
month(날짜) - 달의 값(1~12)을 반환
monthname(달) - 주어진달의 숫자표현을 문자표현으로 바꾸어준다
msgbox(프롬프트[,단추][,제목][,helpfile,context])

 - 프롬프트는 대화상자 안의 내용. 단추는 단추모양,제목은 제목표시줄이름, helpfile은 도움말위치,context는

   도움말 문맥번호


now() - 현재 날자와 시간을 반환

 

oct() - 주어진 숫자의 8진수 값을 나타내는 문자를 반환

replace(문자열,찾을문자열,바꿀문자열[,시작[,횟수[,비교]]])

 - 문자열은 바꿀 대상, 찾을문자열은 문자열에서 바꾸어야 할 문자, 바꿀문자열은 찾은 문자열을 대치할 문자열,

   시작은 검색시작위치. 횟수는 바꾸는 횟수, 비교는 바꿀 때의 비교형식
right(문자열,수) - 주어진 문자의 오른쪽으로 부터 주어진 수만큼의 문자를 반환
rnd(수) - 난수를 반환 수는 생략가능
round(수) - 반올림한 수를 반환, 소수 첫째자리 반올림
rtrim(문자열) - 뒤에 공백이 없는 문자열을 반환

 

scriptengine() - 사용중인 스크립트 언어를 나타낼때 사용
scriptenginebuildversion() - 사용중인 스크립트 엔진의 버전 수를 반환
scriptenginemajorversion() - 사용중인 스크립트 엔진의 주 버전 수를 반환
scriptengineminorversion() - 사용중인 스크립트 언어의 보조 버전 수를 반환
second(시간) - 시스템 시간중 초값(0~59)을 반환
sgn(수) - 주어진 숫자의 부호를 나타내는 정수를 반환 0보다크면 1, 같으면 0, 작으면 -1을 반환
sin() - 주어진 라디안 값의 사인값을 반환
space(수) - 주어진 수만큼의 공백이 포함된 문자열을 반환
split(문자열[,구분기호[,수[,비교]]])

 - 문자열은 배열에 포함될 문자열, 구분기호는 문자열 구분하기 위한기호를 표시. 생략시 "" 공백, 수는 반환될

    문자열의 수를 나타냄, 비교는 바꿀때의 비교형식
sqr(수) - 주어진 수의 제곱근을 반환
strcomp(문자열1,문자열2[,비교]) - 두개의 문자열을 비교하여 결과값을 반환
strreverse(문자열) - 주어진 문자열을 뒤에서부터 읽은 문자열을 반환
string(수,문자) - 주어진 문자가 주어진 수만큼의 반복된 문자열을 반환

 

tan(수) - 주어진 라디안 값의 수 만큼의 탄젠트 값을 반환
time() - 현재 시간을 반환
timeserial(시, 분, 초) - 주어진 시간,분,초에 대한 시간 값을 반환
timevalue(시간) - 시간이 포함된 date형식을 반환해주는 함수
trim(문자열) - 앞뒤 공백이 없는 문자열을 반환해 줄 때 사용
typename(변수이름) - 주어진 변수의 정보를 나타내는 문자열 반환

ubound(배열이름[,차원]) - 배열의 차원으로 가장 큰 첨자를 반환, 배열함수의 개수 - 1 반환
ucase(문자열) - 주어진 문자를 대문자로 바꾸어 줍니다

 

vartype(변수) - 변수의 형식을 나타내는 값을 반환

weekday(날짜[,firstday of week])

 - 요일을 나타내는 정수를 반환, firstday for week는 첫째요일을 숫자로

weekdayname(요일,약어, firsrday of week) - 요일은 숫자, 약어는 약어의 유무의 부울값

 

year() - 현재의 년도를 나타낼때 쓰임

 
반응형
반응형

<HTML>
<HEAD>
<TITLE> Formatcurrency </TITLE>
</HEAD>

<BODY>
1. <%=formatcurrency(25000000)%> 결과값: \25,000,000 <br>
      '통화단위로 표시해준다.  \editplus에서는 원화표시가 안된다.<p>
2. <%="$" & formatNumber(25000000,0)%> $25,000,000.00<br>
      '컴마만 찍어준다. 따라서 달라는 내가 직접 표시해준다.<br>
   ,0을 넣어주면 소숫점값을 빼준다.<p>

3. <%=formatDateTime(now, 0)%>  결과값: 2005-05-17 오후 12:43:09 <br>
4. <%=formatDateTime(now, 1)%>  결과값:2005년 5월 17일 화요일 <br> 
5. <%=formatDateTime(now, 2)%>  결과값:2005-05-17 <br>
6. <%=formatDateTime(now, 3)%>  결과값:오후 12:43:09  <br>
7. <%=formatDateTime(now, 4)%>  결과값:12:43 <p>

8. <%=formatpercent(50/100)%> 결과값: 50.00%<p>
   <%=formatpercent(0.45)%> 결과값: 45.00%<p> 

<%
  str="Everybody Call me Great taeyo"
  response.Write Instr(str,"body") & "<br>"  '결과값: 6
  response.Write Lcase("SuperMan") & "<br>" '결과값:superman<소문자출력>
  response.Write Ucase("SuperMan")& "<br>"  '결과값:SUPERMAN<대문자출력>
%>

</BODY>
</HTML>

원단위 변환

반응형
반응형
[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

 


반응형
반응형

***  한페이지에서 처리

<!-- 인터페이스 가격체크 -->

<script language="JavaScript">
<!--
 function account(){

 var frm = document.frmReg;

  if ((frm.houseType[0].checked) == false && (frm.houseType[1].checked) == false)
  {
   alert('주택여부를 선택하여 주십시오');
   frm.houseType[0].focus();
   return;
  }

  if ((frm.goodType_code[0].checked) == false && (frm.goodType_code[1].checked) == false )
  {
   alert('거래종류를 선택하여 주십시오');
   frm.goodType_code[0].focus();
   return;
  }

   if(frm.price.value == ''){
    alert("거래금액을 입력하여 주십시오");
    frm.price.value = '';
    frm.price.focus();
    return;
   }else{
   if (!ChkNum(frm.price.value)) {
    alert("거래금액은 숫자만 입력 가능합니다!");
    frm.price.value = '';
    frm.price.focus();
    return;
   }
  }
  document.frmReg.action = 'Taxd.asp';
  document.frmReg.submit();
 }

 function ChkNum(Num) {
  var num ="0123456789";
  for (var i=0; i< Num.length; i++){
    if(-1 == num.indexOf(Num.charAt(i))){
     return false;
    }
  }
  return true;
 }

//-->
</script>

<!-- 변수 받아 계산처리 -->

<%
Dim houseType,houseTypeText
Dim goodType_code,goodTypeText '(1:매매,교환 2:임대, 전세)
Dim price,brokerage,brokerageText

houseType   = Request("houseType")
goodType_code = Request("goodType_code")
price     = Request("price")  * 10000

 Select Case houseType
  Case 1 : houseTypeText = "일반주택"
  Case 2 : houseTypeText = "주택외 비거주용 건물, 토지"
 End Select

 Select Case goodType_code
  Case 1 : goodTypeText = "매매, 교환"
  Case 2 : goodTypeText = "임대, 전세"
 End Select

 IF goodType_code = 1 Then '매매, 교환

  IF houseType  = 2 Then
   brokerage   = " ~ " & formatnumber(price * 0.009,0)
   brokerageText = "~ 0.9%"
  Else
   IF price < 50000000 Then
    brokerage   = price * 0.006
    brokerageText = "0.6%"
    IF brokerage > 250000 Then brokerage = 250000
   ElseIF price >= 50000000  and price <= 200000000 Then
    brokerage   = price * 0.005
    brokerageText = "0.5%"
    IF brokerage > 800000 Then brokerage = 800000
   Else
    brokerage   = price * 0.004
    brokerageText = "0.4%"
   End IF
    brokerage = formatnumber(brokerage,0)
  End IF

 Else '임대, 전세

  IF houseType  = 2 Then
   brokerage   = " ~ " & formatnumber(price * 0.009,0)
   brokerageText = "~ 0.9%"
  Else
   IF price < 50000000 Then
    brokerage   = price * 0.005
    brokerageText = "0.5%"
    IF brokerage > 200000 Then brokerage = 200000
   ElseIF price >= 50000000  and price <= 100000000 Then
    brokerage   = price * 0.004
    brokerageText = "0.4%"
    IF brokerage > 300000 Then brokerage = 300000
   Else
    brokerage   = price * 0.003
    brokerageText = "0.3%"
   End IF
    brokerage = formatnumber(brokerage,0)
  End IF

 End IF
%>

<!-- 체크값-->

<form name="frmReg" method="post">

                             <input type="radio" name="houseType" value=1 />
                              주택&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                              <input type="radio" name="houseType" value=2 />
                              주택 외 부동산 </td>

</form>

<a href="javascript:account();"><!-- 함수 호출 -->

반응형

+ Recent posts