[출처] http://technet.tmaxsoft.com/kr/inquiry/faq/jeus/readBoardForm.do?bbsCode=faq_jeus&fc=inquiry&sc=inquiry_faq&tc=inquiry_faq_jeus¤tPage=1&seqNo=260&categoryId=&productCode=&range=20&searchType=ALL&searchText=include


상세질문

<%@ include 를 사용한 경우 include된 파일이 변경된 경우 반영이 되지 않습니다.
자동으로 반영하려면 어떻게 해야 하나요?



답 변

JSP의 include의 방식에는 <%@ include (action),
이 중 a.jsp가 수행 도중 b.jsp의 include 구문을 만나면 b.jsp로 제어권이 넘어가서 수행된 후 다시 a.jsp로 제어권이 넘어와서 계속 수행됩니다.
그래서 b.jsp가 변경된 경우 변경사항이 자동으로 반영됩니다.

그리고 <%@ include (directive)는 include하는 JSP(a.jsp)와 include되는 JSP(b.jsp)가 하나의 servlet으로 변환되어서 a.jsp 내에 b.jsp가 완전히 포함되는 형태로 변환됩니다.
<%@ include (directive)의 목적은 JSP가 Servlet으로 변환되어 컴파일 될 때에
특정 코드나 text를 포함하기 위해서 입니다.
따라서 b.jsp가 변경된 경우 a.jsp는 b.jsp가 변경되었는지 모르기 때문에 include 된 JSP의 변경시 이것을 인지하지 못합니다.

<%@ include (directive) 를 사용하는 경우 JSP container가 include된 파일이 변경된 경우 자동으로 반영해 주기 위해서는 include하는 파일이 수행될 때 마다 include된 파일의 변경 여부를 검사해서 변경되었다면 include 하는 파일을 recompile 해 주어야 합니다.
이것은 JSP container에게는 상당히 부하를 주는 작업입니다.
그래서 JSP Spec에서는 include된 파일의 변경시 반영 여부는 명시하지 않고 있습니다.

JEUS에서는 개발과 운영의 편의성을 위해서 이것을 옵션으로 지정하여 변경시 자동 반영이 되게 설정할 수 있습니다.
하지만 이 옵션을 true로 설정하는 경우 불필요한 검사가 들어가게 되므로 수행 속도에 지장을 주게됩니다. 반드시 JSP 파일의 변경이 빈번한 경우에만 설정하십시오.

1. JEUS 3.x

$JEUS_HOME/config/<HOSTNAME>/<SERVLET_ENGINE_NAME>/container.xml에 설정
---------------------------------------------------------
<Container>
...
<ContextGroup>
...
<JSPEngine ...
CheckIncludedJspFile="true"
... />
---------------------------------------------------------

2. JEUS 4.x

$JEUS_HOME/config/<HOSTNAME>/<SERVLET_ENGINE_NAME>/WEBMain.xml에 설정
---------------------------------------------------------
<web-container>
...
<context-group>
...
<jsp-engine>
...
<check-included-jspfile>true</check-included-jspfile>
...
</jsp-engine>
...
</context-group>
...
</web-container>
---------------------------------------------------------

+ Recent posts