struts2之ognl運算式

來源:互聯網
上載者:User

OGNL運算式語言介紹;

OGNL是Object Graphic Navigation Language(對象圖導航語言)的縮寫,
它是一個開源項目。 Struts2架構使用OGNL作為預設的運算式語言。
OGNL相對其它運算式語言具有下面幾大優勢:
   1、支援對象方法調用,如xxx.doSomeSpecial();
   2、支援類靜態方法調用和值訪問,運算式的格式:
      @[類全名(包括包路徑)]@[方法名 |  值名],例如:
             @java.lang.String@format('foo %s', 'bar')
             或@tutorial.MyConstant@APP_NAME;
   3、支援賦值操作和運算式串聯,如price=100, discount=0.8,
        calculatePrice(),這個運算式會返回80;
   4、訪問OGNL上下文(OGNL context)和ActionContext;
   5、操作集合對象。

 Ognl 有一個上下文(Context)概念,說白了上下文就是一個MAP結構,它實現了java.utils.Map的介面.

理解Struts2中的 ValueStack:

ValueStack實際是一個介面,在Struts2中利用OGNL時,實際上使用的是實現了該介面的OgnlValueStack類,這個類是Struts2利用OGNL的基礎

ValueStack(值棧): 貫穿整個 Action 的生命週期(每個 Action 類的對象執行個體都擁有一個
                                  ValueStack 對象). 相當於一個資料的中轉站. 在其中儲存當前
                                  Action 對象和其他相關對象.
Struts 架構把 ValueStack 對象儲存在名為 “struts.valueStack” 的請求屬性中,request中

在 ValueStack 對象的內部有兩個邏輯部分:
ObjectStack: Struts  把動作和相關對象壓入 ObjectStack 中--List
ContextMap: Struts 把各種各樣的映射關係(一些 Map 類型的對象) 壓入 ContextMap 中
Struts 會把下面這些映射壓入 ContextMap 中
parameters: 該 Map 中包含當前請求的請求參數
request: 該 Map 中包含當前 request 對象中的所有屬性
session: 該 Map 中包含當前 session 對象中的所有屬性
application:該 Map 中包含當前 application  對象中的所有屬性
attr: 該 Map 按如下順序來檢索某個屬性: request, session, application

理解OGNL Context:

OgnlValueStack 類包含兩個重要的屬性   一個root和一個context。
       *    其中root本質上是一個ArrayList.
       *    而context 是一個Map(更確切的說是一個OgnlContext對象)
在這個OgnlContext對象(context)中,有一個預設的頂層對象 _root,OGNL訪問context中這個預設頂層對象中的元素時,是不需要#號的,直接通過元素的名稱來進行訪問,
而訪問其他對象時,如 request、session、attr等,則需要#號引用。
       注:Struts2將OgnlValueStack的root對象賦值給了OgnlContext 中的_root對象,在OgnlValueStack的root對象中,儲存著調用Action的執行個體,因此,在頁面上通過Struts2標籤訪問Action 的屬性時,就不需要通過#號來引用
     總結:ognl Context包含 ObjectStack屬性和ContextMap屬性

當Struts2接受一個請求時,會迅速建立ActionContext,ValueStack,action 。然後把action存放進ValueStack,所以action的執行個體變數可以被OGNL訪問。

注意: Struts2中,OGNL運算式需要配合Struts標籤才可以使用。如:<s:property value="name"/>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.