▶ 뭉충닷컴
 
mungchung.com login
Site Search
My Space
주절주절...
공부방
쥔장소개
Board
자유게시판
유용한 정보
자료실
Programming
강좌 & Articles
Spring 3.0
프로그래밍 Tip
   -ASP
   -PHP
   -JavaScript
   -HTML
   -Java/JSP
   -Database
   -Crystal Report
   -Visual Basic
   -이클립스
   -리눅스
   -기타
Windows API (VB)
Spread Sheet 7.0
컴퓨터활용 Tip
Other things
StarCraft 전략
StarCraft 문서
김용(金庸)
Son Q & Dieda

ASP로 웹 어플리케이션 주소 사용하기

조회 수 17938 추천 수 0 2006.12.10 01:21:14

asp에선 자바의 서블릿이나 닷넷의 웹어플리케이션과 같은 주소를 나타낼 수 없다. 왜냐? MS에서 asp 내놓을때 정책상으로 일부로 그렇게 한것인지 어떤지는 모르겠다. 그냥 해보니 그런 주소를 나타낼수가 없었다. 간혹 이 말이 무슨소리인지 모르는 분들이 있을까봐 예를 들어보겠다.

http://www.mungchung.com/WebApp
http://www.mungchung.com/WebApp/

이 2개의 주소가 있다. 뭐가 다른가? 뒤에 슬래쉬가 붙고 안붙고의 차이다. 요게 아무것도 아닌것 같지만 어렸을 당시엔 충격적이였다. 그 당시 어떤 사이트를 보니 뒤에 슬래쉬가 안붙고도 웹페이지가 나오는것을 보고 asp로 저런 기능이 있나해서 몇일동안 찾은적이있다. 결국 찾지 못하고 좌절하다가 JSP 개발할일이 있어서 서블릿을 공부하던중 슬래쉬 안붙이는 방법을 알게 되었다. 서블릿에서 Web Application 방식을 이용하면 뒤에 슬래쉬 안붙는 URL 처리가 되었던것이다. (닷넷 또한 Web Application 이 생겨서 이 URL 처리가 가능해졌다.)

asp에선..아니 정확히 말하면 IIS 5.0 에선 http://www.mungchung.com/WebApp 요런식의 주소에 요청에 들어오면 일단 WebApp 파일이 있는지 부터 검사를 한다. 만일 파일이 있다면(확장자가 안붙은 파일이겠죠) 다운로드 창이 떠서 WebApp 파일을 다운 받게 한다. 파일이 없다면 WebApp 폴더나 가상디렉토리로 인식해서 http://www.mungchung.com/WebApp/ 로 리다이렉트 시켜버린다.

참고
이런 IIS 방식때문에 코딩할때 http://www.mungchung.com/WebApp 라 적는것보다 
http://www.mungchung.com/WebApp/ 라고 뒤에슬래쉬 붙이는게 
서버에 한번 더 왔다 갔다 안해서 부하를 줄일 수 있다.

때문에 asp로 뒤에 슬래쉬 안붙은 URL을 나타낼 수가없었다. 하지만! 에러 페이지의 트릭을 이용하면 가능하다. 이것의 대표적인 예가 싸이월드다. 싸이월드 주소를 보면 http://www.cyworld.com/아이디 이런식으로 슬래쉬 없어도 아이디에 해당하는 사용자의 홈으로 이동한다. 이것의 실제 주소느 http://minihp.cyworld.nate.com/pims/main/pims_main.asp?tid=000000&urlstr=&urlstrsub= 이런 모양이지만 그런식의 처리를 해서 사용자들이 쉽게 주소를 외울 수 있게해준다.

 

 

지금부터 이렇게 처리하는 방법을 간략하게 적어보려고한다. 이해를 쉽게 돕기 위해서 예제 프로그램을 간략하게 만들었다. 예제 프로그램은 다음과 같다.

자신의 홈페이지가 하나 있다고하자(물론 이 홈피는 asp로 만들어진 홈이여야한다) 사용자들이 http://www.myhome.com/empas 라고 적으면 바로 엠파스로 접속 할 수 있고 http://www.myhome.com/mungchung 라고 치면 나의 홈피로 접속 할수 있도록 할것이다.

첫째. DB부터 구축한다.

첨부파일 다운받아서 tb_url_create.sql 에 있는 쿼리문을 쿼리분석기에서 실행시킨다. 참고로 테이블명은 TB_URL 이고 컬럼은 url_name, url_title, url 이렇게 딱 3개만 있다. url_name은 주소뒤에 붙을 명칭이다. http://www.myhome.com/mungchung 요런식의 주소에서 mungchung 에 해당된다. url_title은 익스플로워 제목에 보여질 부분이다.(컬럼은 만들어두고 사용 안함 -_-) url은 mungchung가 이동할 URL이다. 즉! http://www.mungchung.com 을 말한다.

둘째. 에러 페이지를 만든다.

일단 코드 전체를 보자. 아래 코드 404_error_redirect.asp로 저장한 후 웹서버 루트디렉토리 안에 넣는다. (귀찮다면 첨부파일 다운받아도 된다.)

<% Option Explicit ' DB 관련 변수 Dim DBCon Dim strConn Dim strSql Dim rs Dim strQueryString Dim strServerName Dim strServerPort Dim errorNum Dim errorURL Dim url_name Dim url_param Dim instr_url Dim db_url_name Dim db_url_title Dim db_url ' DB 연결 문자 변수 strConn = strConn&"Provider=SQLOLEDB.1;Persist Security Info=True;" strConn = strConn&"Data Source=localhost;" ' Server Name strConn = strConn&"User ID=;" ' User ID strConn = strConn&"Password=;" ' User Password strConn = strConn&"Initial Catalog=TEST;" ' DataBase Set DBCon = Server.CreateObject("ADODB.Connection") DBCon.Open strConn strQueryString = Request.ServerVariables("QUERY_STRING") strServerName = "http://"&Request.ServerVariables("SERVER_NAME")&"/" strServerPort = Request.ServerVariables("SERVER_PORT") ' 에러번호와 URL을 받아온다. errorNum = (Split(strQueryString,";"))(0) errorURL = (Split(strQueryString,";"))(1) if errorNum = "404" and right(errorURL,1) <> "/" then url_name = replace(errorURL,strServerName,"") instr_url = InStr(url_name,"?") ' URL 뒤에 QueryString 가 있을 경우 if instr_url > 0 then url_param = mid(url_name,instr_url+1, len(url_name)-instr_url) url_name = left(url_name,instr_url-1) end if ' 테이블을 검사해서 등록된 주소인지 확인한다. strSql = "Select url_name, url_title, url From TB_URL Where url_name='" & url_name & "'" Set rs = DBCon.Execute(strSql) if rs.eof then ' 등록된 주소가 아니면 에러페이지 보여주는 함수 호출 Call ErrorPage_404(errorURL) else db_url_name = rs(0) db_url_title= rs(1) db_url = rs(2) ' URL 뒤에 Query String가 있었다면 URL뒤에 붙여준다. if url_param <> "" then db_url = db_url & "?" & url_param end if ' 등록된 주소로 이동시킨다. Call UrlFramePage(db_url_name, db_url) end if end if rs.close Set rs = nothing DBCon.close Set DBCon = nothing '--------------------------------------------------- ' URL을 프레임을 통해서 보여준다. '--------------------------------------------------- Sub UrlFramePage(pUrlName, pUrl) dim outStr outStr = outStr & "<html>" & vbCrLf outStr = outStr & "<head>" & vbCrLf outStr = outStr & "<title>" & pUrlName & "</title>" & vbCrLf outStr = outStr & "</head>" & vbCrLf outStr = outStr & "<frameset rows=""0,*"" border=0>" & vbCrLf outStr = outStr & " <frame src=""about:blank"" name=blank marginwidth=0 marginheight=0 leftmargin=0 topmargin=0 noresize>" & vbCrLf outStr = outStr & " <frame src="""&pUrl&""" name=body scrolling=auto marginwidth=0 marginheight=0 leftmargin=0 topmargin=0>" & vbCrLf outStr = outStr & "</frameset>" & vbCrLf outStr = outStr & "</html>" & vbCrLf Response.Write outStr Response.End End Sub '--------------------------------------------------- ' 404 에러페이지 보여주는 함수 '--------------------------------------------------- Sub ErrorPage_404(errorURL) Response.Write errorURL & " 이 페이지를 찾을 수 없습니다." End Sub %>

DB 연결등에 해당하는 가장 기본적인 설명은 패스하겠다. -_-

strQueryString  = Request.ServerVariables("QUERY_STRING")
strServerName   = "http://"&Request.ServerVariables("SERVER_NAME")&"/"
strServerPort   = Request.ServerVariables("SERVER_PORT")

일단 가장 기본적인 정보인 서버명과 포트정보를 받아온다. 서버명은 현재 웹서버의 서버명이고 포트는 웹서버로 이용하는 포트이다. Request.ServerVariables("QUERY_STRING") 에는 에러정보를 넘겨준다. "에러번호;에러URL" 이런식의 구조로 되어있다.

errorNum = (Split(strQueryString,";"))(0)
errorURL = (Split(strQueryString,";"))(1)

Split 함수를 이용해서 errorNum(에러번호) 와 errorURL(에러난 URL)을 변수에 저장시킨다.

if errorNum = "404" and right(errorURL,1) <> "/" then

에러번호 404는 Page Not Found 이다. 즉 해당하는 페이지가 실제 서버에 없다는 의미이다. 위의 조건절을 해석하면 "페이지가 없으면서 errorURL 뒤에 슬래쉬가 없을경우 실질적으로 프로그램이 시작한다"

url_name = replace(errorURL,strServerName,"")
instr_url = InStr(url_name,"?")

' URL 뒤에 QueryString 가 있을 경우
if instr_url > 0 then
    url_param = mid(url_name,instr_url+1, len(url_name)-instr_url)
    url_name = left(url_name,instr_url-1)
end if

이 strServerName 변수는 사용자가 입력한 주소값이다. 즉 http://www.myhome.com/mungchung 이 값을 말한다. 이 주소에서 mungchung 이 값만 가져오고 이 값을 url_name변수에 할당한다.

만일 이 주소에 파라미터를 넘겨주고 싶다면? http://www.myhome.com/mungchung?myparam=aaa 이런식으로 적을경우 자동적으로 IIS가 myparam=aaa 이걸 파라미터로 인식하지 않는다. 그렇기 때문에 수동으로 코딩해줘야한다. 일반적으로 물음표뒤부터는 파라미터로 인식하므로 물음표 뒤부터의 값을 파라미터보고 url_param 변수에 저장한다.

' 테이블을 검사해서 등록된 주소인지 확인한다.
strSql = "Select url_name, url_title, url From TB_URL Where url_name='" & url_name & "'"
Set rs = DBCon.Execute(strSql)
if rs.eof then
    ' 등록된 주소가 아니면 에러페이지 보여주는 함수 호출
    Call ErrorPage_404(errorURL)
else
    db_url_name = rs(0)
    db_url_title= rs(1)
    db_url      = rs(2)

    ' URL 뒤에 Query String가 있었다면 URL뒤에 붙여준다.
    if url_param <> "" then
        db_url = db_url & "?" & url_param
    end if

    ' 등록된 주소로 이동시킨다.
    Call UrlFramePage(db_url_name, db_url)
end if

url_name를 가지고 DB에 값이있는지 검사한다. DB에 값이 없다면 정의하지않은 URL 이므로 ErrorPage_404 함수를 호출 해서 에러문구를 보여준다. 만일 DB에있다면 UrlFramePage 함수를 호출해서 URL에 해당하는 페이지를 보여준다.

마지막으로 UrlFramePage 함수 설명이다. 이 함수를 보면 알겠지만 프레임을 뿌려준다. 빈페이지 하나와 실제주소에 해당하는 페이지 하나를 통합해서 보여주는 프레임이다.

셋째. IIS 셋팅

간단하다. 이미지보고 따라해라 -_-

넷째. 테스트

http://localhost/mungchung 라고 들어가보자. 나의 홈피가 아주 잘 보인다. 익스플로러 제목표시줄을 보면 mungchung라 적혀있다.

이번엔 DB에도 없고 폴더나 가상디렉토리로도 없는 주소로 이동하려고해보자. http://localhost/mungchung1 이렇게 들어가려고 하면 위의 코딩에서 정의한 에러메시지가 뜬다.

 

아주 간단하게 에러페이지를 이용해 웹 어플리케이션과 같은 주소 이용하는 방법을 알아봤다. 이런 방법을 이용하면 회원들의 홈페이지 주소를 짧게 하거나 커뮤니티 주소를 짧게 해주는데 유용하다. 주소를 간단하고 짧게 해주는 방법중엔 각 회원별로 가상디렉토리를 생성해주는 방식도 있는데 이건 ADSI를 이용하므로 이 방식보단 조금 더 복잡하다. 또한 회원별로 폴더를 생성해야 하기 때문에 나중에 관리하기가 힘들어질수도 있다. 그렇기 때문에 개인적으로는 이 방식을 선호한다

좀 더 멋지게 만들고 싶다면. 한가지 처리를 더 해줘야한다. 예를 들자면 내 홈에 접속하기 위해서(그럴리는 없지만-_-) http://www.myhome.com/mungchung 라고 입력했는데 이미 mungchung 폴더를 생성해 뒀다면? IIS는 폴더가 있기 때문에 에러로 인식안해서 mungchung 폴더로 이동해버린다. 때문에 404_error_redirect.asp 페이지까지 오질 못한다. 그래서 URL을 생성할때 가상디렉토리나 폴더로 이미 있는 명칭일경우 생성하지 못하도록하는 오류처리를 해줘야한다. (귀찮은 처리니 패스 -_-;;;)

 

오랜만에 이미지 캡쳐까지 뜨니 힘들다 -_-

문서 첨부 제한 : 0Byte/ 2.00MB
파일 크기 제한 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수
27 keyfile을 이용한 ssh 접속 방법 뭉충닷컴 2010-10-28 13719
26 멀티 브라우저 지원하는 frame, iframe 접근 코딩 방법 [3] 뭉충닷컴 2010-07-21 26490
25 crontab을 이용한 Tomcat 서버 자동 재시작 shell 뭉충닷컴 2009-08-28 25132
24 자바스크립트로 각 form의 element(요소)에 접근 방법 file [2] 뭉충닷컴 2008-09-11 57637
23 ERwin 에서 Logical의 컬럼명을 코멘트(Comment)로 변경하기 file [2] 뭉충닷컴 2008-01-16 31863
22 Tabular Data Control 마지막 강좌! 뭉충닷컴 2007-06-14 15707
» ASP로 웹 어플리케이션 주소 사용하기 file 뭉충닷컴 2006-12-10 17938
20 VB로 WebBrowser 컨트롤의 HTML 제어 file 뭉충닷컴 2006-12-01 21424
19 ASP 페이징 쉽게 처리하기 file [4] 뭉충닷컴 2006-08-29 24367
18 두개의 비슷한 DB를 비교해서 변경된 부분 찾아내기 file 뭉충닷컴 2006-05-03 15008
17 ASP에서 Class 를 이용해보자 file 뭉충닷컴 2006-02-26 24876
16 Hotmail의 DHTML EDITOR 편집기를 이용해보자. file [34] 뭉충닷컴 2006-02-04 30253
15 Tabular Data Control 응용 - 제목 Sort (정렬) 쉽게 하기 [3] 뭉충닷컴 2006-01-27 14144
14 스크립트(Script) 코드를 암호화 시켜보자(Encode/Decode) [2] 뭉충닷컴 2005-06-10 19116
13 dll을 이용한 로그인 file [1] 뭉충닷컴 2005-11-25 22036
12 Tabular Data Control 응용 - 페이징 처리하는 3가지 방법 file [1] 뭉충닷컴 2005-11-23 16283
11 Query를 잼있고, 유용하게 사용해보자 file [3] 뭉충닷컴 2005-10-01 14729
10 Tabular Data Control 응용 - 테이블의 행 배경색이 격으로 변하게하기 뭉충닷컴 2005-09-25 15803
9 폼(Form) 검증해주는 스크립트(Script) file [15] 뭉충닷컴 2005-06-07 19333
8 asp 로 서버에 zip 압축/압축해제(풀기) 예제 file [8] 뭉충닷컴 2005-08-12 19805
7 MS-SQL의 osql.exe 이용 하기 (도스상에서 sql 구문 이용) 뭉충닷컴 2005-09-25 19322
6 SQL Script 로 ERD와 테이블 생성 손쉽게하기 뭉충닷컴 2005-09-25 21790
5 Tabular Data Control 기초 다지기 4 - 마지막! file 뭉충닷컴 2005-09-25 14712
4 Tabular Data Control 기초 다지기 3 file 뭉충닷컴 2005-09-25 14480
3 Tabular Data Control 기초 다지기 2 file 뭉충닷컴 2005-09-25 14187
2 Tabular Data Control 기초 다지기 1 file [1] 뭉충닷컴 2005-09-25 15260
1 OWC를 이용한 웹에서 엑셀 그래프 그리기 file [4] 뭉충닷컴 2007-12-19 19087