在 JSP 開發中,<jsp:include> 動作標籤是實現頁面組件化復用的核心機制。它不僅能引入靜態片段,更支援透過 <jsp:param> 向目標頁面傳遞參數,極大增強了模板的靈活性。本文將詳細解析傳參語法、接收方式及常見陷阱,並提供可直接落地的程式碼範例。
<jsp:include page="/WEB-INF/template/nav_template.jsp">
<jsp:param value="core" name="street_core"/>
</jsp:include>
/WEB-INF/ 保護直接訪問)name 為參數鍵,value 為參數值(支援 EL 表達式動態賦值)目標頁面 nav_template.jsp 可直接用 request.getParameter() 取值:
<a href="javascript:;" class="">A</a>
<a href="javascript:;" class="<%= request.getParameter("street_core") %>">B</a>
進階建議:若頁面已啟用 EL(isELIgnored="false"),更推薦使用 ${param.street_core},程式碼更簡潔且自動處理 null 安全。
典型應用是根據當前功能模組動態切換導航項的 active 樣式:
<!-- 主頁面 -->
<jsp:include page="/WEB-INF/template/nav.jsp">
<jsp:param name="activeMenu" value="${currentModule}" />
</jsp:include>
<!-- nav.jsp 片段 -->
<ul class="nav">
<li class="${param.activeMenu == 'user' ? 'active' : ''}"><a href="/user">用戶管理</a></li>
<li class="${param.activeMenu == 'order' ? 'active' : ''}"><a href="/order">訂單管理</a></li>
</ul>
pageEncoding 一致(建議統一 UTF-8),避免中文參數亂碼。jsp:param 僅在本次 include 請求有效,不會污染外層 request 參數。jsp:include 執行期動態編譯,高併發下可考慮靜態化片段或使用 <%@ include file="..." %> 指令靜態內聯(但無法傳參)。fn:escapeXml() 或手動轉義,防範 XSS 注入。善用 jsp:include + jsp:param 能讓 JSP 模板化開發更優雅:父頁面負責業務邏輯與參數準備,子頁面專注呈現邏輯,實現關注點分離。搭配 EL 表達式與 JSTL,程式碼可讀性與維護性雙贏。