JSP 容器自動宣告九個隱式物件,讓頁面作者專注表現邏輯,無需手動實例化。本文系統梳理每個物件的核心功能、適用場景與最佳實踐,承接上期「Session 作用域」主題,完整覆蓋四大功能面向。
| 物件 | 型別 | 核心用途 |
|---|---|---|
| application | ServletContext | 全域應用層級共享資料 |
| config | ServletConfig | 讀取初始化參數 |
| exception | Throwable | 錯誤頁面取得例外資訊 |
| out | JspWriter | 輸出流控制 |
| page | Object (Servlet) | 當前頁面實例,鮮少直接使用 |
| pageContext | PageContext | 統一管理四大作用域屬性,自訂標籤開發核心 |
| request | HttpServletRequest | 請求參數、Header、作用域屬性 |
| response | HttpServletResponse | 回應 Header、狀態碼、Cookie |
| session | HttpSession | 跨請求用戶狀態管理 |
原則:能用 page 就不用 request,能用 request 就不用 session,能用 session 就不用 application。
皆透過 RequestDispatcher(從 application/config/pageContext/request/session 任一取得 ServletContext 後 getRequestDispatcher(path)):
application.log(msg) / application.log(throwable, msg):寫入容器日誌(實作由廠商決定,查閱伺服器文件確認位置)<%@ page errorPage="ErrorMessage.jsp" %> 指定錯誤頁<%@ page isErrorPage="true" %>,即可透隱式 exception 取得完整堆疊,並可記錄日誌、顯示友善訊息IllegalStateException)JspWriter 緩衝輸出,print/println 直接寫入。out。在 web.xml <init-param> 定義,透過 config.getInitParameter(name) 或 getInitParameterNames() 讀取。適用靜態、少變設定(如客服信箱、預設分頁大小)。
isErrorPageout 僅限標籤開發或極複雜輸出邏輯