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

JSP 九大內建物件詳解:pageContext、四大作用域與 Servlet/JSP 協作模式

     編輯:Java 綜合教學

JSP 九大內建物件詳解:pageContext、四大作用域與 Servlet/JSP 協作模式

JSP 容器在翻譯階段自動提供九大隱式物件,免去手動創建。本文系統梳理 pageContext 核心角色、四大作用域選擇原則、JSP 映射配置與 MVC 分工模式。

一、pageContext:九大物件的入口與作用域管理器

pageContext 是 PageContext 類別實例,提供兩大核心功能:

  1. 獲取其他八大隱式物件:
方法對應隱式物件類型
getException()exceptionThrowable
getPage()pageObject (this)
getRequest()requestHttpServletRequest
getResponse()responseHttpServletResponse
getServletConfig()configServletConfig
getServletContext()applicationServletContext
getSession()sessionHttpSession
getOut()outJspWriter
  1. 統一操作四大作用域屬性:
// 設定屬性
pageContext.setAttribute("key", value, PageContext.REQUEST_SCOPE);
pageContext.setAttribute("key", value, PageContext.SESSION_SCOPE);
pageContext.setAttribute("key", value, PageContext.APPLICATION_SCOPE);
pageContext.setAttribute("key", value, PageContext.PAGE_SCOPE); // 預設

// 取得屬性(自動按 PAGE→REQUEST→SESSION→APPLICATION 順序查找)
Object val = pageContext.getAttribute("key");

// 移除屬性
pageContext.removeAttribute("key", PageContext.SESSION_SCOPE);

二、四大作用域:生命週期、範圍與選擇指南

作用域對應物件生命週期可見範圍典型用途
PagepageContext請求開始→響應結束當前 JSP 頁面頁面級暫存資料、標籤庫協作
Requestrequest請求開始→響應結束(含 forward)同一請求鏈(含轉發)Controller 傳遞資料給 View、表單回顯
Sessionsession瀏覽器關閉/超時失效同一用戶多請求登入狀態、購物車、用戶偏好
Applicationapplication (ServletContext)容器啟動→關閉全應用所有用戶全域配置、快取、計數器

選擇原則口訣

  • 只在當前頁用 → pageContext
  • 需在轉發鏈共享 → request
  • 用戶會話期間反覆用 → session
  • 全系統共享、跨用戶 → application

三、JSP 映射配置:將 JSP 註冊為 Servlet

在 web.xml 中以 <jsp-file> 替代 <servlet-class>,可為 JSP 定義 URL 模式、初始化參數:

<servlet>
    <servlet-name>index</servlet-name>
    <jsp-file>/index.jsp</jsp-file>
</servlet>
<servlet-mapping>
    <servlet-name>index</servlet-name>
    <url-pattern>/jsp/*</url-pattern>
</servlet-mapping>

效果:訪問 /jsp/xxx 實際執行 /index.jsp,支援前綴路由、隱藏真實路徑。

四、Servlet + JSP = Controller + Template(MVC 模式)

  • Servlet(Controller):接收請求、調用 Service、決定邏輯流向、準備資料模型、request.setAttribute、RequestDispatcher.forward 轉發。
  • JSP(View/Template):僅負責展示,使用 EL、JSTL、標籤庫渲染資料,不含業務邏輯。
// Servlet 範例
@WebServlet("/user/list")
public class UserListServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List users = userService.findAll();
        req.setAttribute("users", users);
        req.getRequestDispatcher("/WEB-INF/views/user/list.jsp").forward(req, resp);
    }
}

JSP 中直接用 ${users}、<c:forEach> 迭代顯示。

五、九大隱式物件速查表

物件類型作用域主要用途
pageContextPageContextpage統一入口、作用域操作
requestHttpServletRequestrequest獲取參數、Header、屬性
responseHttpServletResponsepage設定狀態碼、Header、輸出
sessionHttpSessionsession會話狀態管理
applicationServletContextapplication全域資源、初始化參數
configServletConfigpageServlet 初始化參數
outJspWriterpage輸出內容到響應體
pageObjectpage當前 Servlet 實例(this)
exceptionThrowablepage錯誤頁面獲取異常

六、總結

掌握九大隱式物件與四大作用域,是編寫乾淨、可維護 JSP 的基礎。配合 web.xml 映射與 Servlet/JSP 分工,可構建清晰的 MVC 架構,為後續引入 Spring MVC、Thymeleaf 等現代框架打下堅實基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved