首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> JSP 程式設計 >> JSP 入門

JSP 九大隱含物件完整指南

     編輯:JSP 入門

JSP 九大隱含物件完整指南

JSP 容器自動建立九個隱含物件,開發者可直接在 Scriptlet、EL 運算式、JSTL 中使用,無需宣告。理解其型別、範圍與常用方法,是撰寫高效 JSP 的基礎。


九大隱含物件總覽

物件名稱Java 型別範圍主要用途
requestHttpServletRequestRequest接收請求參數、標頭、屬性、轉發
responseHttpServletResponsePage設定狀態碼、標頭、Cookie、輸出流
outJspWriterPage輸出文字內容至回應主體
sessionHttpSessionSession跨請求儲存用戶狀態 (登入資訊、購物車)
applicationServletContextApplication全域共享資料、初始化參數、資源存取
configServletConfigPageServlet/JSP 初始化參數
pageContextPageContextPage存取所有範圍屬性、轉發、包含、錯誤處理
pageObject (this)Page當前 JSP 頁面實例 (極少直接使用)
exceptionThrowablePage錯誤頁面 (isErrorPage="true") 取得例外

詳細說明與常用操作

1. request (HttpServletRequest)

  • 參數:getParameter(), getParameterValues(), getParameterMap()
  • 屬性:setAttribute(), getAttribute() (Request 範圍,Forward 共享)
  • 標頭/Cookie/Session/路徑/輸入流 參考 HttpServletRequest 完整指南

2. response (HttpServletResponse)

  • 狀態碼:setStatus(), sendRedirect(), sendError()
  • 標頭:setHeader(), addHeader(), setContentType()
  • Cookie:addCookie()
  • 輸出流:getWriter(), getOutputStream()
  • 緩衝區:flushBuffer(), reset(), isCommitted()
  • 參考 HttpServletResponse 完整指南

3. out (JspWriter)

<% 
  out.print("不換行輸出");
  out.println("換行輸出");
  out.write("字串");
  out.flush(); // 強制輸出緩衝區
%>
  • 繼承 PrintWriter 大部分方法
  • 支援緩衝區控制 (page 指令 buffer="8kb", autoFlush="true")
  • 例外為 IOException (PrintWriter 不拋出)

4. session (HttpSession)

<%
  session.setAttribute("loginUser", user);   // 存入
  User u = (User) session.getAttribute("loginUser"); // 取出
  session.removeAttribute("tempData");       // 移除
  session.invalidate();                      // 銷毀整個 Session
  session.setMaxInactiveInterval(30*60);     // 設定逾時 30 分鐘
%>

參考 Session 會話管理完整指南

5. application (ServletContext)

<%
  // 全域共享資料
  application.setAttribute("onlineCount", 100);
  Integer count = (Integer) application.getAttribute("onlineCount");
  
  // 初始化參數 (web.xml )
  String dbUrl = application.getInitParameter("dbUrl");
  
  // 資源路徑
  String realPath = application.getRealPath("/WEB-INF/config.xml");
  InputStream is = application.getResourceAsStream("/WEB-INF/config.xml");
  
  // 跨應用轉發 (需 crossContext="true")
  // RequestDispatcher rd = application.getRequestDispatcher("/otherApp/page.jsp");
%>

6. config (ServletConfig)

<%
  // JSP 初始化參數 (web.xml  )
  String adminEmail = config.getInitParameter("adminEmail");
  String servletName = config.getServletName(); // JSP 編譯後的 Servlet 名稱
%>

較少直接使用,常見於框架初始化。

7. pageContext (PageContext) - 萬用鑰匙

<%
  // 存取四大範圍屬性
  pageContext.setAttribute("pageVar", "P", PageContext.PAGE_SCOPE);
  pageContext.setAttribute("reqVar", "R", PageContext.REQUEST_SCOPE);
  pageContext.setAttribute("sessVar", "S", PageContext.SESSION_SCOPE);
  pageContext.setAttribute("appVar", "A", PageContext.APPLICATION_SCOPE);
  
  // 尋找屬性 (依範圍優先序: Page → Request → Session → Application)
  Object val = pageContext.findAttribute("name");
  
  // 移除特定範圍屬性
  pageContext.removeAttribute("name", PageContext.SESSION_SCOPE);
  
  // 取得其他隱含物件
  HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();
  HttpSession sess = pageContext.getSession();
  ServletContext app = pageContext.getServletContext();
  JspWriter out = pageContext.getOut();
  
  // 包含/轉發 (等同 jsp:include / jsp:forward)
  pageContext.include("/fragment.jsp");
  pageContext.forward("/target.jsp");
  
  // 錯誤處理
  pageContext.handlePageException(new RuntimeException("錯誤"));
%>

8. page (Object)

  • 當前 JSP 頁面實例 (this)
  • 極少直接使用,主要為完整性保留

9. exception (Throwable)

  • 僅在錯誤頁面 (<%@ page isErrorPage="true" %>) 可用
  • 取得導致錯誤的例外:exception.getMessage(), exception.printStackTrace()

EL 運算式中的隱含物件

EL 提供 11 個隱含物件 (含 param/header/cookie/initParam 等 Map):

EL 隱含物件型別對應 JSP 物件 / 說明
pageContextPageContext同 JSP pageContext
requestScopeMapRequest 範圍屬性 Map
sessionScopeMapSession 範圍屬性 Map
applicationScopeMapApplication 範圍屬性 Map
paramMap<String,String>單一參數值 (request.getParameter())
paramValuesMap<String,String[]>多值參數 (getParameterValues())
headerMap<String,String>單一標頭值
headerValuesMap<String,String[]>多值標頭
cookieMap<String,Cookie>Cookie Map (名稱→Cookie 物件)
initParamMap<String,String>Context 初始化參數

範圍選擇指南

資料性質建議範圍隱含物件生命週期
單一請求處理中繼資料Requestrequest / pageContext一次請求 (含 Forward)
用戶登入狀態、購物車Sessionsession瀏覽器關閉或逾時
全域配置、快取資料、線上人數Applicationapplication伺服器啟動至關閉
頁面片段區域變數PagepageContext / out單一 JSP 執行期間

最佳實踐

  1. 優先使用 EL + JSTL,減少 Scriptlet (<% %>) 直接操作隱含物件。
  2. 最小化範圍:能用 Request 就不用 Session,能用 Page 就不用 Request。
  3. 避免在 Application 存放大量資料,記憶體洩漏風險,改用 Redis/快取框架。
  4. Session 存放可序列化物件,支援分叢集複寫/持久化。
  5. 錯誤頁面善用 exception 物件,記錄完整堆疊,使用者端顯示友善訊息。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved