對Struts2OGNL的分析是怎樣的

今天就跟大家聊聊有關(guān)對Struts2 OGNL的分析是怎樣的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

10年積累的成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先做網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有界首免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

Struts2 OGNL基礎(chǔ)上的增強

1、值棧(ValueStack)

Struts2 OGNL上下文設(shè)置為Struts2中的ActionContext(內(nèi)部使用的仍然是OgnlContext),并將值棧設(shè)為Struts2 OGNL的根對象。

我們知道,Struts2 OGNL上下文中的根對象可以直接訪問,不需要使用任何特殊的“標記”,而引用上下文中的其他對象則需要使用“#”來標記。由于值棧是上下文中的根對象,因此可以直接訪問。那么對于值棧中的對象該如何訪問呢?Struts2提供了一個特殊的OGNLPropertyAccessor,它可以自動查找棧內(nèi)的所有對象(從棧頂?shù)綏5?,直接找到一個具有你所查找的屬性的對象。也就是說,對于值棧中的任何對象都可以直接訪問,而不需要使用“#”。

假設(shè)值棧中有兩個對象:student和employee,兩個對象都有name屬性,student有學(xué)號屬性number,而employee有薪水屬性salary。employee先入棧,student后入棧,位于棧頂,那么對于表達式name,訪問的就是student的name屬性,因為student對象位于棧頂;表達式salary,訪問的就是employee的salary屬性。正如你所見,訪問值棧中的對象屬性或方法,無須指明對象,也不用“#”,就好像值棧中的對象都是OGNL上下文中的根對象一樣。這就是Struts2在OGNL基礎(chǔ)上做出的改進。

2、[N]語法

如上所述,如果想要訪問employee的name屬性,應(yīng)該如何寫表達式呢?我們可以使用[N].xxx(N是從0開始的整數(shù))這樣的語法來指定從哪一個位置開始向下查找對象的屬性,表達式[1].name訪問的就是employee對象的name屬性。

在使用[N].xxx語法時,要注意位置序號的含義,它并不是表示“獲取棧中索引為N的對象”,而是截取從位置N開始的部分棧。

3、top關(guān)鍵字

top用于獲取棧頂?shù)膶ο螅Y(jié)合[N].xxx語法,我們就可以獲取棧中任意位置的對象。

如:[0].top,[1].top等

4、訪問靜態(tài)成員

除了使用標準的OGNL表達式訪問靜態(tài)字段和靜態(tài)方法外,Struts2還允許你不指定完整的類名,而是通過“vs”前綴來調(diào)用保存在棧中的靜態(tài)字段和靜態(tài)方法。

@vs@FOO_PROPERTY@vs@someMethod()@vs1@someMethod()

vs表示ValueStack,如果只有vs,那么將使用棧頂對象的類;如果在vs后面跟上一個數(shù)字,那么將使用棧中指定位置處的對象類。

標準方法:@類全限定名@靜態(tài)屬性或方法名

< ?xml:namespace prefix = s />< s:property value="@action.SystemInfo@WEB_CONTEXT">< /s:property>

5、值棧中的Action實例

Struts2框架總是把Action實例放在棧頂。因為Action在值棧中,而值棧又是OGNL中的根,所以引用Action的屬性可以省略“#”標記,這也是為什么我們在結(jié)果頁面中可以直接訪問Action的屬性的原因。

6、Struts2中的命名對象

Struts2還提供了一些命名對象,這些對象沒有保存在值棧中,而是保存在ActionContext中,因此訪問這些對象需要使用“#”標記。這些命名對象都是Map類型。

parameters

用于訪問請求參數(shù)。如:#parameters['id']或#parameters.id,相當(dāng)于調(diào)用了HttpServletRequest對象的getParameter()方法。

注意,parameters本質(zhì)上是一個使用HttpServletRequest對象中的請求參數(shù)構(gòu)造的Map對象,一量對象被創(chuàng)建(在調(diào)用Action實例之前就已經(jīng)創(chuàng)建好了),它和HttpServletRequest對象就沒有了任何關(guān)系。

request

用于訪問請求屬性。如:#request['user']或#request.user,相當(dāng)于調(diào)用了HttpServletRequest對象的getAttribute()方法。

session

用于訪問session屬性。如:#session['user']或#session.user,相當(dāng)于調(diào)用了HttpSession對象的getAttribute()方法。

application

用于訪問application屬性。如:#application['user']或#application.user,相當(dāng)于調(diào)用了ServletContext的getAttribute()方法。

attr

如果PageContext可用,則訪問PageContext,否則依次搜索request、session和application對象。

看完上述內(nèi)容,你們對對Struts2 OGNL的分析是怎樣的有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

標題名稱:對Struts2OGNL的分析是怎樣的
URL地址:http://muchs.cn/article26/ghjicg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、定制開發(fā)定制網(wǎng)站、建站公司、服務(wù)器托管、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)