<%@ include %> vs <jsp:include >

2025. 3. 8. 21:38·개발/JSP

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 &copy; 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
'개발/JSP' 카테고리의 다른 글
  • JSP 내장객체와 주요 매서드
  • JSP 액션태그
  • JSP 지시어와 스크립트 요소
  • JSP는 어떻게 작동할까?
함수형 인간
함수형 인간
잘 까먹는 개발자의 두뇌 확장 장치
  • 함수형 인간
    개발 기록 노트
    함수형 인간
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 글 목록 (84)
      • 기타 (1)
      • 개발 (82)
        • Java (6)
        • Javascript (1)
        • Spring (20)
        • jQuery (0)
        • Git (0)
        • servlet (11)
        • JSP (6)
        • HTML (0)
        • CSS (10)
        • SQL (9)
        • JSTL (3)
        • Mybatis (4)
        • Design Patterns (0)
        • HTTP (2)
        • Devtools (0)
        • IntelliJ (5)
        • JDBC (1)
        • Lombok (3)
        • Logging (1)
      • 책 리뷰 (0)
  • hELLO· Designed By정상우.v4.10.3
함수형 인간
<%@ include %> vs <jsp:include >
상단으로

티스토리툴바