JSP 指令告知容器如何編譯處理頁面。三大指令:page(頁面屬性)、include(靜態包含)、taglib(標籤庫)。本文整理 page 所有屬性表、include 編譯期包含機制與 jsp:include 動態包含差異、taglib 基礎語法。
<%@ 指令名 屬性="值" ... %>
| 屬性 | 取值 | 說明 | 預設 |
|---|---|---|---|
| language | java | 頁面腳本語言 | java |
| extends | 完整類名 | 生成 Servlet 繼承的父類 | 容器預設 |
| import | 類名/包名* | 匯入類/包,可重複寫多行 | java.lang.*, javax.servlet.*, javax.servlet.jsp.*, javax.servlet.http.* |
| session | true/false | 是否內建 session 物件 | true |
| buffer | none / 數字kb | 輸出緩衝區大小 | 8kb |
| autoFlush | true/false | 緩衝區滿時自動刷新 | true |
| isThreadSafe | true/false | 是否支援多執行緒並發 | true |
| info | 任意字串 | 頁面描述,可用 getServletInfo() 取得 | - |
| errorPage | 相對路徑 | 未捕獲例外導向的錯誤頁 | - |
| isErrorPage | true/false | 本頁是否為錯誤頁(可用 exception 物件) | false |
| contentType | MIME; charset=... | 回應內容型別與編碼 | text/html; charset=ISO-8859-1 |
| pageEncoding | 字元集名稱 | JSP 檔案本身編碼(編譯時讀取用) | ISO-8859-1 |
<%@ include file="header.jsp" %>
| 特性 | <%@ include %> | <jsp:include> |
|---|---|---|
| 處理階段 | 編譯期 | 請求期 |
| 產出 Servlet | 1 個 | 各自獨立 |
| 參數傳遞 | 不支援 | 支援 <jsp:param> |
| 目標檔案變更 | 需重編譯 | 即時生效 |
| 效能 | 極高(無額外請求) | 略低(內部轉發) |
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<c:forEach var="i" begin="1" end="5">${i}</c:forEach>
prefix:標籤前綴(自訂)。uri:標籤庫唯一識別(TLD 檔案定義或容器映射)。自訂標籤庫開發請參考後續專文。
pageEncoding 決定原始碼讀取編碼;contentType charset 決定瀏覽器解碼編碼。兩者必須一致(建議皆設 UTF-8)。<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
session="true" buffer="16kb" autoFlush="true" isThreadSafe="true"
errorPage="/error/500.jsp" %>
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="https://java.sun.com/jsp/jstl/fmt" %>