1. 컴파일 vs. 런타임
- 컴파일 타임 (Compile Time):
- 소스 코드(예: Java, JSP)를 컴퓨터가 실행할 수 있는 형태(예: Java의 경우 .class 파일, 바이트 코드)로 변환하는 과정.
- 이 단계에서 문법 오류, 타입 불일치 등과 같은 오류를 검사.
- JSP의 경우, JSP 컨테이너가 JSP 파일을 Servlet 코드로 변환하고, 이를 다시 Java 컴파일러가 바이트 코드로 컴파일하는 과정이 컴파일 타임에 해당.
- 런타임 (Run Time):
- 컴파일된 프로그램(바이트 코드, 기계어)이 실제로 실행되는 시점.
- 사용자의 입력, 데이터베이스와의 상호작용, 네트워크 통신 등 실제 동작이 런타임에 발생.
- JSP의 경우, 컴파일된 서블릿이 클라이언트의 요청을 받아 처리하고 응답을 생성하는 과정이 런타임에 해당.
2. <%@ include file="..." %> vs. <jsp:include page="..." />
JSP에서 다른 파일의 내용을 포함하는 방법에는 두 가지가 있다.
- <%@ include file="..." %> (정적 포함, Static Include):
- 컴파일 타임에 포함된다.
- JSP 컨테이너가 JSP 파일을 서블릿 코드로 변환하는 과정에서, include 지시어가 있는 위치에 지정된 파일(file 속성)의 내용이 그대로 복사되어 삽입됨.
- 마치 하나의 큰 JSP 파일처럼 처리됨.
- 변수나 메서드등을 공유.
- 포함되는 파일의 내용이 자주 변경되지 않는 경우(예: 정적인 헤더, 푸터)에 적합.
- <jsp:include page="..." /> (동적 포함, Dynamic Include):
- 런타임에 포함된다.
- JSP 컨테이너가 JSP 파일을 실행하는 과정에서, <jsp:include> 태그를 만나면 지정된 페이지(page 속성)를 별도로 실행하고, 그 실행 결과를 현재 페이지에 포함시킴.
- 두 JSP 파일은 별개의 서블릿으로 컴파일되고 실행됨.
- 변수나 메서드를 공유하지 않고, request, response 객체만 공유.
- 포함되는 파일의 내용이 동적으로 변경되는 경우(예: 사용자 정보, 게시물 목록)에 적합.
- include되는 jsp파일에 page지시어의 contentType이 text/html이 아닌 다른 값으로 설정되어 있으면 contentType을 다시 text/html로 설정해야 한글이 깨지지 않는다.
3. 코드 예시
main.jsp:
Java
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Include Example</title>
</head>
<body>
<h1>Main Page</h1>
<%-- 컴파일 타임 포함 (정적 포함) --%>
<%@ include file="header.jsp" %>
<p>This is the main content.</p>
<%-- 런타임 포함 (동적 포함) --%>
<jsp:include page="footer.jsp" />
</body>
</html>
header.jsp:
Java
<%-- header.jsp --%>
<h2>Header (Included using `<%@ include %>`)</h2>
<p>Current time: <%= new java.util.Date() %></p>
footer.jsp:
Java
<%-- footer.jsp --%>
<h2>Footer (Included using `<jsp:include>`)</h2>
<p>Copyright © 2023</p>
- header.jsp는 main.jsp에 컴파일 타임에 포함되므로, header.jsp의 내용이 main.jsp의 소스 코드에 그대로 삽입된 후 하나의 서블릿으로 컴파일됨. header.jsp 안의 <%= new java.util.Date() %>는 main.jsp의 컴파일 시점에 해석된다.
- footer.jsp는 main.jsp에 런타임에 포함되므로, main.jsp와 footer.jsp는 각각 별도의 서블릿으로 컴파일되고 실행된다. footer.jsp는 main.jsp와는 별개로 실행되며 그 결과만 main.jsp에 포함됨.
'개발 > JSP' 카테고리의 다른 글
JSP 내장객체와 주요 매서드 (0) | 2025.03.08 |
---|---|
JSP 액션태그 (0) | 2025.03.08 |
JSP 지시어와 스크립트 요소 (0) | 2025.03.08 |
JSP는 어떻게 작동할까? (0) | 2025.03.08 |
JSP - EL(Expression Language) (0) | 2025.03.05 |