首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> JSP 程式設計 >> 關於JSP

JSP include 指令與 include 動作差異深度解析

     編輯:關於JSP

兩種 Include 形式

<%@ 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 指令:

  • 靜態頁首、頁尾、導航列、版權聲明
  • 不需傳遞參數的共用片段
  • 追求極致效能的高流量頁面

使用 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" />

最佳實踐建議

  • 現代專案優先使用 JSTL <c:import> 替代 jsp:include,功能更強大 (支援 URL、Reader、錯誤處理)
  • 版面模板建議使用 Apache Tiles、SiteMesh 或 Thymeleaf Layout
  • 避免在被包含頁面中定義 <%! ... %> 宣告 (指令合併時會衝突)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved