JSP(Jakarta Server Pages,原 JavaServer Pages)是一種伺服器端動態網頁技術。本質上是「嵌入 Java 程式碼的 HTML」:靜態模板 + 專用標籤 + Scriptlet/Expression/Declaration。容器(如 Tomcat)在首次請求時將 `.jsp` 自動轉譯為 Servlet(`_jspService`)、編譯、載入、實例化;後續請求直接以多線程並發呼叫同一實例的 `_jspService`。
Tomcat 預設工作目錄:$CATALINA_HOME/work/Catalina/localhost/_/org/apache/jsp/ 可見生成的 Servlet 原始碼與 class 檔,利於除錯。
| 屬性 | 用途 | 預設值 / 備註 |
|---|---|---|
language | 指定腳本語言 | java(唯一標準支援) |
extends | 指定生成 Servlet 繼承的父類別 | 容器內部基底類別,極少自訂 |
import | 匯入 Java 套件/類別,可多次或逗號分隔 | java.lang.*, javax.servlet.*, javax.servlet.jsp.*, javax.servlet.http.* |
session | 是否參與 HTTP Session | true;設 `false` 可節省 Session 建立開銷 |
buffer | 輸出緩衝區大小 | 8kb;`none` 關閉緩衝直接輸出 |
autoFlush | 緩衝區滿時是否自動刷新 | true;`false` 會拋出例外 |
isThreadSafe | 宣告 Servlet 是否執行緒安全 | true;`false` 容器會同步化 `_jspService`(效能差) |
info | 頁面描述資訊 | 可透過 `Servlet.getServletInfo()` 取得 |
errorPage | 發生未捕獲例外時轉向的錯誤頁面 | 相對/絕對路徑,如 /error.jsp |
isErrorPage | 宣告本頁為錯誤處理頁 | `true` 時可使用隱含物件 exception |
contentType | 回應 MIME 型別與字元集 | text/html; charset=ISO-8859-1;建議明確設 UTF-8 |
pageEncoding | 原始檔編碼 | 若未設,依 `contentType` 解析 charset;建議同步設 `UTF-8` |
isELIgnored | 是否忽略 EL 運算式 ${...} | false(啟用 EL);舊專案相容性用 |
deferredSyntaxAllowedAsLiteral | 允許 #{...} 作為字面值 | false;JSF 相容用 |
trimDirectiveWhitespaces | 移除指令行前後空白 | false;設 `true` 可縮小輸出 HTML 體積 |
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" session="false" trimDirectiveWhitespaces="true" %>web.xml <error-page>,減少每頁重複 errorPage。development=false(Tomcat `web.xml` 的 `jsp` servlet 參數)。JSP 雖為經典技術,理解其「翻譯→編譯→多執行緒服務」模型與 page 指令微調行為,對維護舊系統、除錯生成的 Servlet 原始碼仍具實戰價值。