jsp에서 include 하는 방식에는 두 가지가 있다. 정적인 include 지시문 <%@include file=""%> 그리고 동적인 include 지시문 <jsp:include page=""/> 이다. 이 두 가지 방식의 차이를 알아보았다.
1. 정적인 include 지시문 <%@include file=""%>
jsp가 컴파일되기 전에 include한 파일이 부모 페이지에 삽입되어 컴파일된다. 즉, include 페이지에서 선언한 변수를 부모 페이지에서 별도의 변수 선언 없이 사용 가능하다. 단순하게, include한 파일의 코드가 텍스트로 포함되어 컴파일된다고 생각하면 된다. a.jsp에 b.jsp를 include할 경우 b.jsp의 코드는 a.jsp 안에 복사되어 컴파일되는 것이다.
jsp파일이 java파일로 수정되기 전에 include한 파일의 모든 코드가 부모의 jsp로 복사된다. 그 후에 부모의 jsp는 java -> class파일 -> html문서 -> 웹 브라우져 의 순서로 처리된다.
주의할 점은 포함되는 페이지의 한글을 제대로 처리하기 위해 한글 인코딩을 해주는 코드를 생략해서는 안 된다.
1 | <%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> | cs |
부모 페이지에 include한 파일이 많을경우 include 페이지에서 선언된 변수를 추적해야 하기 때문에 유지보수에 단점이 있다.
2. 동적인 include 지시문 <jsp:include page=""/>
사용자가 부모페이지 호출 시 실행되어질 시점에 include한 파일이 삽입된다. 1번과 다르게 부모페이지와 include페이지는 변수를 공유하지 않는다. include한 페이지의 변수를 부모페이지에서 사용하고자 하면 <jsp:param name="" value="<%= %>"/> 형식으로 부모페이지에 지정해주어야 한다.
부모 jsp가 java -> class -> html 문서로 처리되어 실행되어질 시점에 삽입된 후 브라우저로 렌더링된다. 해당 파일이 수정되는 경우 다시 컴파일이 진행된다. 즉, a.jsp에 b.jsp를 include할 경우 a..jsp에 b.jsp의 실행 결과 html문서가 삽입된다. a.js 페이지를 처리하는 도중 <jsp:include page=""/>를 만나면 프로그램 실행 제어가 b.jsp로 넘어간다. b.jsp의 실행이 끝나면 다시 a.jsp로 돌아와 남은 코드를 실행한다.