JSP 指令用於向容器傳遞頁面處理信息,不產生任何輸出內容。三大核心指令分別為 page(頁面屬性)、include(靜態包含)、taglib(標簽庫引入)。掌握它們是編寫高質量 JSP 的基礎。
語法:<%@ page attribute="value" ... %>
同一屬性在頁面中只能出現一次(import 除外),屬性名區分大小寫。
| 屬性 | 取值範圍 | 說明 | 默認值 |
|---|---|---|---|
| language | java | 指定腳本語言 | java |
| extends | 全限定類名 | 指定生成 Servlet 繼承的父類 | 無 |
| import | 包名/類名 | 導入類/包,可多次使用,逗號分隔 | 無 |
| session | true/false | 是否內置 session 隱式對象 | true |
| autoFlush | true/false | 緩衝區滿時是否自動刷新 | true |
| buffer | none / 數字kb | 緩衝區大小,autoFlush=true 時生效 | 8kb |
| isThreadSafe | true/false | 是否線程安全(多實例模式) | true |
| isErrorPage | true/false | 是否為錯誤處理頁面(可用 exception 對象) | false |
| errorPage | 相對路徑 | 發生未捕獲異常時轉向的錯誤頁 | 無 |
| contentType | MIME 類型 | 響應內容類型,如 text/html;charset=UTF-8 | text/html |
| pageEncoding | 字符集 | 頁面編碼,等同 contentType 中 charset | ISO-8859-1 |
| trimDirectiveWhitespaces | true/false | 是否移除指令前後空白字符(輸出 XML 時建議 true) | false |
false(默認):生成的 HTML 保留指令換行,源碼可讀性好但體積稍大。
true:移除指令周圍空白,輸出更緊湊,適合 XML/JSON 輸出場景。
<%@ include file="relativeURL" %>
relativeURL 為當前 Web 應用內的相對路徑(.jsp/.html/.jspx)。
容器將被包含文件的源碼合併到主頁面,再編譯為單一 Servlet 類。適用於頁頭、頁尾、導航欄等靜態片段。
<!-- Head.jsp:導航欄 -->
<table><tr><td>首頁</td><td>文檔</td><td>下載</td></tr></table>
<!-- Foot.jsp:版權信息 -->
<table><tr><td>Copyright © 2024</td></tr></table>
<!-- Include.jsp:主頁面 -->
<%@ page trimDirectiveWhitespaces="true" %>
<body>
<%@ include file="Head.jsp" %>
<p>主體內容...</p>
<%@ include file="Foot.jsp" %>
</body>
| 方式 | 語法 | 執行階段 | 適用場景 |
|---|---|---|---|
| include 指令 | <%@ include file="..." %> | 編譯期(合併源碼) | 靜態片段,性能最優 |
| include 動作 | <jsp:include page="..." /> | 運行期(分別執行再合併輸出) | 動態內容,需傳參 |
| web.xml 預包含 | <include-prelude>/<include-coda> | 容器初始化/每次請求前後 | 全站統一頁頭頁腳 |