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

Struts2 核心組件深度解析:ValueStack、ActionContext 與 StackContext 關係圖譜

     編輯:Java 綜合教學

Struts2 數據存儲三大核心組件關係深度解析

Struts2 請求處理涉及三個易混淆的上下文對象,理解它們的層級關係與訪問差異,是掌握框架數據流轉的關鍵。

核心定義對比

組件核心職責數據結構生命週期
ValueStack存放 Action 屬性值、表單數據棧請求級
StackContext請求/會話/應用層級 Map 容器Map 映射請求級
ActionContextAction 執行上下文總入口Map(含 ValueStack 引用)請求級

關鍵差異:訪問語法

JSP/EL 表達式中:

  • ValueStack:直接訪問屬性名,${userName}(OGNL 自動查棧)
  • StackContext:需加 # 前綴,${#request.key}、${#session.user}

ActionContext 獲取方式

// 攔截器中
ActionContext ctx = invocation.getInvocationContext();
// 或全局靜態獲取(僅請求線程有效)
ActionContext ctx = ActionContext.getContext();

// Action 類中
// 1. 接口注入實現 SessionAware/RequestAware
// 2. ActionContext.getContext()

ActionContext 核心作用

// 獲取原生 Request
HttpServletRequest request = (HttpServletRequest) ctx.get(StrutsStatics.HTTP_REQUEST);
// 獲取 Request Map
Map requestMap = (Map) ctx.get("request");

本質關係總結

  • 相同點:均為請求級線程局部變量,隨請求創建銷毀
  • 不同點:ValueStack 是棧結構(支持多層壓棧),ActionContext 是 Map 結構(聚合多種上下文)
  • 包含關係:ActionContext 內部持有 ValueStack 引用,StackContext 為其子 Map 集合

深度理解:ActionContext = { valueStack, requestMap, sessionMap, applicationMap, parameters, ... }。OGNL 表達式解析時優先搜索 ValueStack,再遍歷 ActionContext 其他 Map。

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