<%@ include file="header.jsp" %> <-- 指令 (Directive) -->
<jsp:include page="header.jsp" flush="true" /> <-- 動作 ->
| 特性 | include 指令 (@ include) | include 動作 (jsp:include) |
|---|---|---|
| 處理階段 | 翻譯階段 (編譯期) | 請求階段 (執行期) |
| 原始碼處理 | 將目標檔案內容合併到主檔案,再編譯成單一 Servlet | 目標頁面獨立編譯為 Servlet,執行結果合併到回應 |
| 產出檔案 | 單一 .java/.class | 多個 .java/.class |
| 參數傳遞 | 不支援 | 支援 <jsp:param> |
| 動態性 | 靜態:檔案路徑固定 | 動態:可用運算式決定路徑 |
| 變數範圍 | 共享主頁面變數 (同一 Servlet) | 獨立頁面上下文 (各自 Servlet) |
| 效能 | 略優 (單一 Servlet) | 略低 (多 Servlet 協作) |
| 除錯 | 行號對應較複雜 | 獨立檔案易除錯 |
JSP 容器將頁面轉換為 Servlet (JSP 頁面實作類) 並編譯,這兩步構成翻譯階段。@ include 在此階段將內容合併。
<%@ include file="/common/header.jsp" %>
<div class="content">主內容</div>
<%@ include file="/common/footer.jsp" %>
<jsp:include page="/common/header.jsp" flush="true">
<jsp:param name="title" value="歡迎頁面" />
<jsp:param name="user" value="${loginUser.name}" />
</jsp:include>
<div class="content">主內容</div>
<jsp:include page="/common/footer.jsp" flush="true" />
<c:import> 替代 jsp:include,功能更強大 (支援 URL、Reader、錯誤處理)<%! ... %> 宣告 (指令合併時會衝突)