JSP 指令(Directive)不產生直接輸出,而是向容器發出指示,影響生成 Servlet 的整體結構。語法格式為 <%@ directive attribute="value" %>,可在一行合併多個屬性。主要分為 page 與 include 兩類。
page 指令允許定義區分大小寫的屬性,控制從導入類到錯誤處理的方方面面:
| 屬性 | 預設值 | 說明 |
|---|---|---|
| language | java | 指定腳本語言,目前唯合法值為 java |
| extends | — | 指定 Servlet 超類,需謹慎使用,容器可能已提供基類 |
| import | — | 導入 Java 套件/類,唯一可重複出現的屬性,如 <%@ page import="java.util.*" %> |
| session | true | true 時自動綁定/創建 HttpSession;false 禁用 session 變量 |
| buffer | ≥8kb | 設定 JspWriter 緩衝區大小,可為 none 關閉緩衝 |
| autoFlush | true | 緩衝區滿時 true 自動刷新,false 拋出異常(buffer=none 時不可為 false) |
| isThreadSafe | true | true 多執行緒共用實例需自行同步;false 實作 SingleThreadModel,每請求獨立實例 |
| info | — | 可透過 getServletInfo() 取得的描述字串 |
| errorPage | — | 指定處理未捕獲異常的 JSP 頁面(相對 URL) |
| isErrorPage | false | true 表示本頁為錯誤處理頁,可使用 exception 隱含對象 |
| contentType | text/html;charset=ISO-8859-1 | 設定回應 MIME 型別與字元集,等同 response.setContentType() |
<%@ include file="relativeURL" %> 在 JSP 編譯為 Servlet 時,將指定本地檔案內容靜態合併進當前頁。包含檔案不經獨立編譯,適合重用頁首頁尾等靜態片段。若需請求期動態包含,請改用 <jsp:include> 動作。
import 集中在入口頁或透過部署描述檔 <jsp-config> 設定,避免重複。session(不需會話的頁面)以減少伺服器負擔。isErrorPage="true" 並妥善記錄 exception 堆疊。extends,除非確定容器未提供基類且確需自訂繼承體系。