1. 程式人生 > >Struts2的值棧詳解

Struts2的值棧詳解

          ssh中頁面和action之間資料儲存和傳遞有多種方式,URL傳值,模型驅動,表單傳值,以及我們本文要介紹的值棧等。每種方式都有它的特點和適用範圍,小編根據自身的適用經驗和網上的查詢結果,對值棧的基本原理和適用方法做了一個彙總。

1 值棧是什麼?

一句話概括,值棧是對應每一個請求物件的資料儲存中心。Struts2的一個很重要的特點就是引入了值棧。之前我們通過快取或者模型驅動在action和頁面之間傳遞資料,資料混亂,並且

難以管理,快取還有時間和數量限制,使用起來非常的困難。值棧的引入解決了這個問題,它可以統一管理頁面和action之間的資料,供actionresult

interceptor等使用。我們大多數情

況下不需要考慮值棧在哪裡,裡面有什麼,只需要去獲取自己需要的資料就可以了,大大的降低了開發人員的工作量和邏輯複雜性。

2 值棧能幹什麼?

值棧能夠執行緒安全的為每個請求提供公共的資料存取服務。每當有請求訪問時,Struts2都會為每個請求建立一個新的值棧,也就是說,值棧和請求時一一對應的,不同的請求,值棧也

不一樣,值棧封裝了一次請求所有操作的相關資料。正是因為值棧和請求的對應關係,因而值棧能保證每個請求訪問資料時的執行緒安全。

3 值棧有什麼?

狹義值棧:主要用力啊存取動態EL運算需要的值和結果,當然ognlValueStack物件主要是用來支援OGNL

運算的。狹義值棧中存放著一些OGNL可以存取訪問的資料,比如:

          action例項,這樣就可以通過OGNL來訪問action例項中的屬性的值了

          OGNL表示式運算的值

          OGNL表示式產生的中間變數,比如Struts2標籤,在JSP中使用標籤,可以訪問值棧中的資料。

廣義值棧:指的是ActionContext物件,actioncontext物件是action執行的上下文,每個actioncontext都是一個容器,包含著action執行所需要的資料,比如引數,會話等。

actioncontext中存放了很多的值,比如:

         request

parameters:請求中的引數,這裡的引數都是從請求物件中複製出去的。

         requestattribute:請求中的屬性,他的資料型別是map,存放著請求物件的屬性資料,這些資料和請求物件的attribute是聯動的。

         sessionattribute:會話中的屬性,資料型別是map這些屬性和會話物件的attribute是聯動的。

         applicationattribute:應用中的屬性,資料型別是map

         valuestack:也就是狹義值棧,actioncontextvaluestackOGNL訪問的根,也即是說,在預設情況下,OGNL預設訪問valuestack裡面的值。

4 值棧如何使用?

         valuestack是存放在actioncontext中的,它是通過OGNL表示式來訪問的,我們可以在JSP頁面通過Struts2標籤來訪問資料。valuestack首先是一個堆疊,所以他滿足堆疊的使用特點,當值棧中存在多個物件,且有相同屬性時,值棧會按照從棧頂到棧底的順序,尋找第一個匹配的物件。

獲取值棧:ValueStack testValueStack =ActionContext.getContext().getValueStack();

如何使用:valuestack主要方法如下:

<span style="font-size:18px;">       testValueStack.push(Object arg0); 向棧頂壓入一個物件。
       testValueStack.pop(); 獲取值棧的頂層物件,並且移走這個物件。
       testValueStack.peek();   獲取頂層物件,但是不移走這個物件
       testValueStack.set(String arg0, objectarg1);  向值棧中新增一個物件。
       testValueStack.setValue(String arg0,object arg1);  向值棧中新增一個物件。</span>

應用:action中程式碼:

<span style="font-size:18px;">publicString execute() {
// 查詢熱門商品、放到值棧中
List<Product>hotProductList = productService.findHotProduct();
ActionContext.getContext().getValueStack()
.set("hotProductList",hotProductList);
return"success";
 
}</span>

jsp程式碼:

定義Struts2標籤

<span style="font-size:18px;"><%@tagliburi="/struts-tags" prefix="s"%>  </span>

訪問值棧資料

<span style="font-size:18px;"><s:iteratorvar="p" value="hotProductList"></span>


相關推薦

Struts2

          ssh中頁面和action之間資料儲存和傳遞有多種方式,URL傳值,模型驅動,表單傳值,以及我們本文要介紹的值棧等。每種方式都有它的特點和適用範圍,小編根據自身的適用經驗和網上的查

(ValueStack)

什麼是值棧 之前web階段,在servlet裡面進行操作,把資料放到域物件裡面,在頁面中使用el表示式獲取到。域物件在一定範圍內,存值和取值。 在struts2裡面提供了本身的一種儲存機制,類似於域物件,是值棧,可以存值和取值。 在action裡面把資料

【基於初學者的SSH】struts2 struts2標簽庫+ognl表達式

radi ring etl action 值棧 多選 https submit 技術分享 一:什麽是值棧:struts2裏面本身提供的一種存儲機制,類似於域對象,值棧,可以存值和取值  特點:先進後出,最上面的元素叫做棧頂,也叫壓棧。  <s:debug><

C# 定時器傳問題

ati bll main 實例 詳解 use object handle source //傳參數定時器 private static System.Timers.Timer aTimer; Main(ApprovalID); public static void

(十)Struts2 /OGNL

下界 ads gre char void world 獲取值 efi expr 值棧是一組對象,按照提供的順序存儲以下這些對象: 序號對象和說明 1 Temporary對象 實際中存在各種在頁面執行期間創建的temporary對象。例如,JSP標簽循環集合的當前叠代值

struts2使用配置

doc jsp 特定 ext mes struts-2 system 瀏覽器 con struts2.xml的文件配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC

struts2存取數據小結(使用ognl表達式)

color idt 直接 com ble per 小結 如果 ges 前言:使用ognl和struts2標簽庫的時候要在 jsp頁面 中 加入這麽一行 <%@ taglib uri="/struts-tags" prefix="s" %> struts(統

Struts2 總結(ValueStack)

由於 壓入 system 因此 getc 進行 接口 上下文 通過 1、獲取值棧 1 //獲取值棧的第一種方式 2 ValueStack valueStack1 = (ValueStack) ServletActionContext.getRequest(

Struts2的Action

Struts2的Action詳解Struts2中的action,主要是完成業務邏輯操作。Action替代在servlet中完成的作用。Action的學習主要有兩點如何創建一個struts2的action如果訪問一個struts2的action1. Action類創建方式(三種)創建一個pojo類Pojo(pl

[轉載][C++]C++11 左、右、右引用

找到 延長 引用 () 字面量 別名 賦值 例子 左值 我之前以為左值就是等號左邊的值,右值就是等號右邊的值。 我 太天真 ?_? 原文地址:https://blog.csdn.net/hyman_yx/article/details/52044632 (侵刪 ------

struts2命名的一個bug

turn 如果 class ima 應該 方法 src inf code Action中的的屬性名和值棧中屬性名應該數絕對對應的關系,但是如果引用名和get方法寫成如下形式: private List<User> uList; public List

Java中返回

package text 希望 得到 輸出 turn void 方法 dem package com.company; //java中main()函數中調用其他方法的兩種方式//1.實例化對象 public class returnDemo { public s

第21講 struts2OGNL訪問JavaBean,List集合 Map物件

一,OGNL訪問JavaBean 1在專案HeadFirstStruts2chapter04 ,新建com.cruise.model包,Student類,name age屬性,全參構造和無參構造,package com.cruise.model;public class 

JVM 虛擬機器

棧幀 棧幀 (Stack Frame) 是用於支援虛擬機器進行方法呼叫和方法執行的資料結構,它是虛擬機器執行時資料區中的虛擬機器棧 (Virtual  Machine  Stack)的棧元素 。棧幀儲存了方法的區域性變量表、運算元棧、動態連線和方法返回地址等資訊。每一個方能從

Kafka:無丟失提取kafka的kafka的消費過程

目錄: 1、需求 2、程式碼步鄹 3、程式碼展現 4、pom.xml檔案 5、結果展現 ——————————————————————————————————– 1、需求 前提:將org.apache.spark.streaming.kafka.KafkaCluster這個類抽出來變成Kafka

C++11 左、右、右引用(轉載)

左值、右值 在C++11中所有的值必屬於左值、右值兩者之一,右值又可以細分為純右值、將亡值。在C++11中可以取地址的、有名字的就是左值,反之,不能取地址的、沒有名字的就是右值(將亡值或純右值)。舉個例子,int a = b+c, a 就是左值,其有變數名為a,通過&a

struts2

OGNL 1.1 OGNL的全稱是Object Graph Navigation Language(物件圖導航語言),它是一種強大的表示式語言 1.2 OgnlContext(ongl上下文)其實就是Map OgnlContext=根物件(1)+非根物件(N

專案經理三大法寶之一掙管理

1.什麼是掙值管理 2.掙值管理三大基本引數 3.掙值管理評價指標 4.掙值管理如何用於完工估算 正文: 工作分解結構(WBS),關鍵路徑法(CPM),還有掙值管理(EVM)是專案經理必須掌握的三大法寶。 WBS是專案範圍定義清楚以後進行的工作,主要是分解出可

第21講 struts2OGNL訪問JavaBean,List集合 Map物件

一,OGNL訪問JavaBean 1在專案HeadFirstStruts2chapter04 ,新建com.cruise.model包,Student類,name age屬性,全參構造和無參構造,package com.cruise.model;public class St

Struts2配置檔案

個框架配置檔案是使用它的核心所以有很大的必要了解 配置檔案(分多個檔案配置是為了分組開發) 記住struts的配置檔案要配置到src根目錄下 struts-base.xml檔案詳解這是struts2的基礎配置檔案必須的 <?xml version="1.0