JSP 內置對象無需聲明即可在腳本中直接使用,本質是 Servlet service() 方法的參數或局部變量。共有 9 大對象,涵蓋請求、響應、會話、應用上下文等核心領域。
| 對象 | 類型 | 作用域 | 核心用途 |
|---|---|---|---|
| request | HttpServletRequest | 請求域 | 獲取請求參數、頭信息、屬性傳遞 |
| response | HttpServletResponse | 頁面域 | 設置響應頭、重定向、輸出流 |
| session | HttpSession | 會話域 | 用戶狀態維持、購物車、登錄態 |
| application | ServletContext | 應用域 | 全局配置、數據共享、初始化參數 |
| out | JspWriter | 頁面域 | 向瀏覽器輸出內容、緩衝區控制 |
| page | Object | 頁面域 | 當前 JSP 頁面實例(類似 this) |
| pageContext | PageContext | 頁面域 | 統一訪問所有作用域屬性、頁面轉發/包含 |
| config | ServletConfig | 頁面域 | Servlet 初始化參數、上下文引用 |
| exception | Throwable | 頁面域 | 錯誤頁面異常信息(需 isErrorPage=true) |
getParameter(name) / getParameterValues(name):獲取參數getAttribute(name) / setAttribute(name, obj):請求域屬性傳遞(轉發時保持)getRequestDispatcher(path).forward(req, resp):服務端轉發getContextPath():獲取項目上下文路徑getRemoteAddr():客戶端 IPsendRedirect(url):客戶端重定向(地址欄變化)setContentType("text/html;charset=UTF-8"):設置編碼與 MIMEgetWriter() / getOutputStream():字符/字節輸出流getId():會話唯一標識(JSESSIONID)setAttribute/getAttribute:會話域存取數據setMaxInactiveInterval(sec):設置超時時間invalidate():銷毀會話(登出)getInitParameter(name):讀取 web.xml <context-param>getRealPath(path):虛擬路徑轉物理路徑getRequestDispatcher(path):跨應用轉發log(msg):寫入容器日誌print/write:輸出內容flush():強制刷新緩衝區clearBuffer():清空緩衝區(不拋異常)getBufferSize() / getRemaining():緩衝區狀態可跨作用域操作屬性:
setAttribute(name, value, scope):scope 可為 PAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE、APPLICATION_SCOPEfindAttribute(name):按頁面→請求→會話→應用順序查找forward/include(path):頁面跳轉/包含getException()、getServletConfig()、getServletContext():獲取其他內置對象JSP 編譯為 Servlet,service(req, resp) 方法中:
request、response:方法參數page = this:當前實例pageContext = PageContextImpl:工廠創建session = req.getSession():隱式創建/獲取application = pageContext.getServletContext()out = pageContext.getOut()config = pageContext.getServletConfig()forward 傳遞,重定向需用 Session 或閃存<%@ page isErrorPage="true" %> 才能用 exception