ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ASP - 동적 인클루드(include)
    개발 관련/ASP 2009. 10. 9. 15:47

    Dynamic Include Files 개요

    ASP로 프로그래밍을 하면 #include를 사용하는 것은 기본이다. 기본적인 내용은 "include 사용 방법"을 참고하기 바란다. #include를 사용하다 보면 정해진 파일을 삽입하는 것이 아니라 동적으로 파일들을 삽입해야 하는 경우가 한 번쯤은 발생하게 된다. 물론 이미 이런 경험을 갖고 있을 수도 있겠다. 경험해본 사람은 알겠지만 ASP에서 동적으로 파일을 include시킨다는 것은 쉬운 일이 아니다. 흔히 이런 일이 닥칠 때 시도해 보는 것은 include 시킬 파일 이름을 변수로 저장한 다음 그 변수를 #include 지시자에 전달해 주는 것이다.

    다음 코드를 보자:

    <%
    '파일 명을 저장할 변수 선언
    Dim MyFile

    '선언된 변수에 원하는 파일명 설정
    MyFile = Request("SomeFileName")

    'include 지시자에 파일 명을 담고 있는 변수 전달
    %>
    <!--#include file=<%=MyFile%>-->

     

    이미 경험해 본 사람은 알겠지만 위의 코드는 제대로 동작하지 않는다. 왜냐하면 ASP에서는 서버측 스크립트가 처리되기 전에 이미 include 문에 있는 파일을 삽입해 버리기 때문이다. 위의 코드는 include 파일을 발견할 수 없다는 에러를 발생시킬 것이다.

    include문을 사용하는 이유 중의 하나는 쉽게 변하지 않는 영역(머리글, 바닥글...)에 해당하는 부분을 독립적인 파일 형태로 관리하여 그 기능을 필요로 하는 여러 파일에 쉽게 삽입 가능하도록 하기 위함이며 또한 원하는 부분을 고치면 다른 곳에도 영향을 미치게 하기 위해서이다. 이런 목적이라면 우리가 보통 하던대로 #include 문을 사용하면 된다. 그런데 가끔은 사용자의 행동에 따라 다른 ASP 파일을 삽입시켜야 하는 경우들이 있다. 이런 이유 때문에 파일을 동적으로 삽입시킬 수 있는 방법들을 모색하게 되었다. 위의 코드를 보면 알겠지만 동적 파일 삽입이 얼핏 쉽게 구현될 것 같아 시도를 해보면 막상 생각지 않은 벽에 부딪히게 된다.

    자, 지금부터 이 문제를 해결해 보도록 하자. 여기서는 FSO(FileSystemObject) 개체를 이용하도록 하겠다. 동적으로 삽입시키고 싶은 파일의 내용을 FSO 개체를 이용하여 읽어 들인 후 그 내용을 변수에 담아 그 변수를 활용하는 것이다. 아래 코드에 나타난 함수 "getFileContents"는 함수에 전달된 파일명을 열고 그 파일의 내용을 읽어들인 후 그 내용을 문자열로 반환해주는 역할을 한다. 동적 파일 삽입에 있어서 가장 핵심 모듈이다.

    아래 내용을 getFileContents.inc 라는 이름으로 저장해 보자.

    <%

    '삽입시킬 파일의 이름을 이 함수에 전달
    Function getFileContents(strIncludeFile)
    Dim objFSO
    Dim objText
    Dim strPage


    'FSO(FileSystemObject Object) 개체 생성 Set objFSO = Server.CreateObject("Scripting.FileSystemObject")


    '그 파일을 열고(OpenTextFile) TextStream 개체(objText)에 그 내용을 전달 'Server 개체의 "MapPath" 함수는 주어진 파일의 물리적인 경로를 알려줌
    Set objText = objFSO.OpenTextFile(Server.MapPath(strIncludeFile))


    'Read and return the contents of the file as a string.
    getFileContents = objText.ReadAll

    objText.Close
    Set objText = Nothing
    Set objFSO = Nothing
    End Function
    %>

     

    이 함수를 이용하면 동적으로 원하는 파일을 삽입시킬 수 있다. 다음 장의 예제를 통해 어떤 식으로 활용하는지 살펴보도록 하자.

     

    제공 : 코리아인터넷닷컴, a 2001년 04월 17일
    저자 : Daniel Joe
    동적으로 ASP 파일을 삽입시키는 방법 (2) : 예제: 동적으로 원하는 파일 삽입하기


    예제: 동적으로 원하는 파일 삽입하기
    먼저, 다음 코드를 그대로 저장해보자. 여기서는 "maintemplate.inc" 파일로 저장하겠다. "<!-- INCLUDE FILE HERE -->"라고 적혀 있는 부분이 있는데 나중에 이 부분이 자동으로 동적으로 삽입되는 파일로 대치될 것이다.

    <html>
    <body>
    <h2>코리아인터넷닷컴에 오신 것을 환영합니다!</h2>
    <table width="500" border="1">
    <tr>
    <td>
    <!-- INCLUDE FILE HERE -->
    </td>
    </tr>
    </table>
    </body>
    </html>

     

     

     

    --------------------------------------------------------------------------------

    다음 코드를 살펴 보자. 이 파일은 디폴트로 삽입되는 파일이다. 이 파일을 "includedefault.inc"라는 이름으로 저장해 보자. 이 파일은 사용자가 삽입시키고 싶은 파일을 선택하도록 하는 폼으로 구성되어 있다. 여기서는 세 개의 파일(includefile1.inc, includefile2.inc, includefile3.inc)을 선택할 수 있도록 할 것이다.

    <!-- BEGIN DEFAULT INCLUDE -->
    <form method="post">
    <h3>삽입시키고 싶은 파일 이름을 선택하세요!</h3>
    <p>
    <select id=cboFile name=cboFile>
    <option value="includefile1.inc">파일 #1</option>
    <option value="includefile2.inc">파일 #2</option>
    <option value="includefile3.inc">파일 #3</option>
    </select>
    <input type="submit" value="Submit">
    </p>
    </form>
    <!-- END DEFAULT INCLUDE -->

     

     

     

    --------------------------------------------------------------------------------

    사용자가 선택하면 동적으로 삽입시킬 아주 간단한 파일들을 만들어 보자. 아래의 코드들을 각각 "includefile1.inc", "includefile2.inc", "includefile3.inc" 라는 파일명으로 저장해 보자.

    <!-- BEGIN INCLUDE FILE #1 -->
    <h2 style="color:red">파일 #1을 선택하셨습니다.</h2>
    <br>
    <a href="dynamicinc3.asp">원래 페이지로 돌아가기</a>
    <!-- END INCLUDE FILE #1 -->

     


    <!-- BEGIN INCLUDE FILE #2 -->
    <h2 style="color:green">파일 #2를 선택하셨습니다.</h2>
    <br>
    <a href="dynamicinc3.asp">원래 페이지로 돌아가기</a>
    <!-- END INCLUDE FILE #2 -->

     


    <!-- BEGIN INCLUDE FILE #3 -->
    <h2 style="color:blue">파일 #3을 선택하셨습니다.</h2>
    <br>
    <a href="dynamicinc3.asp">원래 페이지로 돌아가기</a>
    <!-- END INCLUDE FILE #3 -->

     

     

     

    --------------------------------------------------------------------------------

    이제 마지막 코드이다. 다음 파일을 "dynamicinc3.asp"라는 파일명으로 저장하고 웹 서버에 이 모든 파일을 복사한 후 테스트 해보도록 하자.

    <!-------------------------------------------------------------
    FSO 개체로 동적 삽입 파일 내용을 읽을 함수가 미리 인클루드 되어 있어야 한다.
    -------------------------------------------------------------->

    <!--#include file="getFileContents.inc"--><%


    '메인 페이지의 내용과 include 파일의 내용을 담을 변수 선언
    Dim strMain, strInclude

    '메인 페이지 내용을 읽은 후 strMain에 저장strMain = getFileContents("maintemplate.inc")

    'cboFile 선택 상자의 값을 체크해서
    '있으면 해당 include 파일을 읽고 없으면 디폴트 include 파일을 읽은 후'strInclude 변수에 저장
    If Request.form("cboFile") = "" Then
    strInclude = getFileContents("includedefault.inc")
    Else
    strInclude = getFileContents(Request.form("cboFile"))
    End If

    '적절한 include 파일 내용을 읽어들였으면 Replace 함수를 이용해'메인페이지 템플릿의 "<!-- INCLUDE FILE HERE -->" 부분을'읽어 들인 include 파일 내용을 대치시킴
    strMain = replace(strMain,"<!-- INCLUDE FILE HERE -->",strInclude)

    '이제 strMain 값을 클라이언트 브라우저에 출력시키면 끝!
    Response.Write strMain

    %>

    출처 : http://cafe.daum.net/lyjiny/


     

     

Designed by Tistory.