[스크랩] JSP에서의 include

개발/JAVA/JSP 2007/09/28 10:26 posted by zekill



JSP에서 인클루딩 방식 2가지와 함께 인클루드 파일을 수정하였을때 적용되지 않는 부분이 소개되어 있어 예전에 이것을 몰라 헤매던게 생각나 포스트합니다...^^;;;
인클루딩 파일을 수정하였을때 적용되지 않는 문제에 대한 해결방법은 글 본문 중 붉은 색으로 처리해놓았습니다.


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



[원문] http://aboutjsp.com/lec/include.jsp
저자 : 이선재(hsboy)


JSP 에서는 두가지 방법으로 다른 문서를 현재의 문서에 포함 시킬수 있습니다. 이번 강좌에서는 이러한 두가지 include 문에 대해서 알아 봅니다.

* include 란?

다른 웹 언어(PHP or ASP등)를 프로그래밍 해본 경험이 있으신 분들은 include 가 무었인지 잘 알고 있을 것입니다.
include 란 현재의 문서에 다른 문서, 즉 다른 파일의 내용을 포함시켜 출력하는 것을 말합니다. 예를 들어 doc1.jsp 라는 문서의 내용이 아래와 같다고 합시다.

doc1.jsp
<%@ page contentType="text/html;charset=euc-kr"%>
<%
    out.print("<h2>이것은 doc1.jsp의 내용입니다.</h2>");
%>

그리고 doc2.jsp 의 내용이 아래와 같을때

doc2.jsp
<%
    out.print("<h2>이것은 doc2.jsp의 내용입니다.</h2>"); 
%>

위의 두개 문서의 출력을 한번에 보고자 할 때 include를 사용합니다.

doc3.jsp
<%@ page contentType="text/html;charset=euc-kr"%>

<jsp:include page="doc1.jsp" flush="true" />

<%@include file="doc2.jsp" %>

위의 doc3.jsp 를 출력하면 아래와 같은 화면이 출력됩니다.

doc3.jsp 실행화면

사용자 삽입 이미지

위의 소스에서 눈여겨 볼 부분이 doc2.jsp 의 상단 부분인데, doc2.jsp에는 page Directive가 생략 되어 있습니다. 이것은 두가지 include 방식의 차이 때문인데, 자세한 설명은 아래에서 하도록 하겠습니다.
또한 이러한 기능을 SSI(Server Side Include)를 이용해서 구현할수도 있는데 이것은 apache웹서버에서 지원하는 내용 이므로 여기에서는 다루지 않도록 하겠습니다. 자세한 내용이 궁금하신분은 여기를 참고 하시기 바랍니다.


* JSP Action - <jsp:include page="URI" flush="true" />

[syntax]
1). body 구문이 없는 경우
<jsp:include page="URI" flush="true" />

2). body 구문이 있는 경우
<jsp:include page="URI" flush="true">
<jsp:param name="파라메터이름" value="파라메터값" /> 
/* xxx.jsp?파라메터이름=파라메터값 */ </jsp:include>

위와 같이 두가지 사용 용법이 있으며, 두번째 방법을 사용하면 해당 jsp파일에 파라메터값도 넘겨 줄수가 있습니다.
JSP Action 구문의 include 는 include되는 파일과 include 시키는 파일(doc1.jsp와 doc3.jsp)를 각각 컴파일 한후 두 파일의 실행 결과를 한곳에 합쳐서 출력을 하게 됩니다. 즉, 완전히 "별도로" 동작하게 됩니다.
여기에서 flush="true" 문장은 true나 false 가 들어 갈수 있는 부분으로써 include를 실행하기 전에 out.flush()를 실행할지 여부를 결정하는 것입니다. 물론 true일때 out.flush()를 실행하겠지요. JSP 스펙 1.1 까지는 반드시 true로 설정이 되어 있어야만 했으니, 1.2 부터는 true/false중 원하는것을 선택하면 됩니다.


* include 지시어 - <%@ include file="URI" %>

include 지시어 와 Action 구문과의 가장 큰 차이점은 include 지시어는 컴파일 되기전에 파일이 내용이 합쳐진다는 것입니다. 즉, doc3.jsp 는 doc2.jsp의 내용을 자신의 문서내에 포함하여 하나의 파일로 인식한다는 것입니다. doc2.jsp 에 보면 page Directive 가 생략이 되어 있는데, 그것이 바로 이러한 이유 때문입니다.

doc2.jsp에도 page Directive를 설정해 주었다면 에러가 발생할 것입니다. 하나의 페이지에 두번 선언을 하는 꼴이 되어 버릴테니까 말이죠.


* Action 구문과 include 지시어의 중요한 차이점

JSP프로그래밍을 조금이라도 접해 보신 분들이라면 누구나 아는 대로 JSP는 먼저 servlet 으로 변환되고, 그 다음 servlet 이 컴파일 되어 그결과를 화면에 출력해 주게 되어 있습니다.
그런데, Action 구문을 사용 하였을 때에는 두개의 파일 각각 다른 파일처리 되어 두개의 servlet 파일 생성하게 됩니다. 따라서 어느 한 파일이 수정되면 곧바로 적용되어 화면에 출력이 되게 됩니다.

하지만 include 지시어 문을 사용하게 되면 하나의 servlet 파일이 생성되게 됩니다. 이로 인해 엄청난 차이점이 발생하게 되는데, JSP의 특성상 JSP파일이 조금이라도 수정이 되어 있으면 servlet 으로 재 변경되어 다시 컴파일이 이루어 지게 됩니다. 그런데, doc2.jsp 파일을 내용을 수정하고, doc3.jsp 파일을 부르게 되면 수정되기 전의 doc2.jsp 파일의 내용이 출력됩니다.

또다시 doc3.jsp 파일을 살짝 고치고 doc3.jsp 을 부르게 되면 이제서야 수정된 doc2.jsp파일의 내용이 화면에 출력 되게 될 것입니다. 눈치 빠르신 분들은 알아 차리셨으리라 생각됩니다만..
이렇게 된 원인은 아무리 doc2.jsp의 내용이 수정된다 하더라도 JSP엔진에서는 doc3.jsp가 수정이 되지 않아 JSP 엔진에서는 수정되지 않은 같은 파일로 인식하여, servlet 파일을 다시 생성하지 않았기 때문입니다.

따라서, include 지시어 문을 사용하셨을 경우에는 두개의 파일 모두 수정해 주어야(doc3.jsp는 공백하나가 추가 되더라도 수정되어야 합니다) 원하는 결과를 얻을수가 있게 됩니다.
이경우 하나의 파일을 여러개의 파일에서 include 지시어 로 include 하였다면 이것은 치명적일수도 있습니다. 예를 들어 dbcon 같은 내용을 만들어 include 해서 사용하는 경우 상당히 많은데, 이럴때 큰 문제 거리가 될수도 있습니다.
이러한 문제점을 한번에 해결하는 방법이 있는데, ...tomcat/ 디렉토리에 보면 work 라는 디렉토리가 있습니다. 이곳이 바로 변환된 servlet 파일들이 저장되어 있는 곳인데, 이 디렉토리를 완전 삭제 한후에 tomcat을 재시작 시키면, 변경된 내용들이 한번에 적용이 될것입니다.(모든 servlet 파일이 재작성되니 당연한 결과 이겠지요)
그런데 이러한 특징은 tomcat 5 버젼대부터 달라지게 되었는데, include되는 파일을 수정하더라도 서블릿 컨테이너가 알아서 모두 재 컴파일 해준다는 것입니다. 필자가 확인한 바로는 OC4J 최신 버젼에서도 tomcat 5와 같이 자동으로 처리되었습니다.

2007/09/28 10:26 2007/09/28 10:26

2003 IIS에서 몇가지...

운영체제/Windows 2007/09/01 23:18 posted by zekill
1. 다른 경로 INCLUDE

속성-홈디렉토리-구성-옵션-부모경로사용체크


2. 업로드 제한(IIS 중지 후 수정적용 뒤 적용)

첨부파일이 200K 이상이면 안되는 문제

C:\WINDOWS\system32\inetsrv\MetaBase.xml
886 라인의...
AspMaxRequestEntityAllowed="204800" 을 변경...

단위는 바이트


3. HWP 등 특정 파일 링크 안됨

속성 - HTTP 헤더 - MIME 형식- 새형식
* 혹은 *.hwp
application/unkown 등 아무거나 등록

.* 로 하면 html등의 파일도 그냥 열린다는 말이 있음...
확인해 본 결과... 로컬에서는 그냥 정상적이지만...--;
로컬이 아닌 경우 이런 문제가 발생하는 걸로 사료됨--;
2007/09/01 23:18 2007/09/01 23:18
코드 변경 사항이 변경이 되지 않을 경우

WAS가 Orion 2.0 이고 스트러츠를 사용하고 있지만
다른 환경에서도 비슷한 경우가 있을지도 모르겠다...

우선 자바클래스 파일들은 재시작해주면 되긴하는데..

가끔 JSP파일을 수정하였는데도 서버를 몇번 재시작 해도 되지 않는 경우가 있었다
혼자 열라 삽질 중에 도저히 변경이 되질 않아 의헌이형한테 물어봤더니
혹시 인클루딩 된 JSP파일이냐고 물어보길래 맞다고 하였더니 상위를 터치해주라는 말씀......
아...열라 잘된다...ㅜㅜ

인클루딩 되어있는 JSP파일 을 수정했는데 적용이 되지않는다면
그 파일을 인클루딩 하고 있는 모체 파일을 터치 해주라....ㅜㅜ
2007/09/01 22:54 2007/09/01 22:54
#include <atlbase.h>
#include <atlconv.h>
2007/09/01 22:09 2007/09/01 22:09
TAG ,

php 인클루딩 환경변수 설정

개발/PHP 2007/09/01 22:05 posted by zekill
코드내에서 환경설정이 가능하더라...

// Works in all PHP versions
ini_set('include_path', '/inc');
// Works in all PHP versions
echo ini_get('include_path');

// Works as of PHP 4.3.0
set_include_path('지정할경로');
// Works as of PHP 4.3.0
echo get_include_path();
2007/09/01 22:05 2007/09/01 22:05