成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

對Struts2 OGNL的分析與簡介

開發 后端
本文將對Struts2 OGNL進行分析,包括在Struts2 OGNL基礎上的增強,以及值棧與相關語法和TOP關鍵字。

Struts2 OGNL基礎上的增強

1、值棧(ValueStack)

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

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

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

2、[N]語法

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

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

3、top關鍵字

top用于獲取棧頂的對象,結合[N].xxx語法,我們就可以獲取棧中任意位置的對象。

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

4、訪問靜態成員

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

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

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

標準方法:@類全限定名@靜態屬性或方法名

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

5、值棧中的Action實例

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

6、Struts2中的命名對象

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

parameters

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

注意,parameters本質上是一個使用HttpServletRequest對象中的請求參數構造的Map對象,一量對象被創建(在調用Action實例之前就已經創建好了),它和HttpServletRequest對象就沒有了任何關系。

request

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

session

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

application

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

attr

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

以上就是對Struts2 OGNL的分析與簡介

【編輯推薦】

  1. 在Eclipse中開發struts應用程序
  2. 手把手教你在Eclipse中配置開發Struts
  3. Eclipse下開發struts完整解決亂碼問題
  4. Struts相關背景介紹
  5. 使用Easy Struts for Eclipse開發Struts
責任編輯:張燕妮 來源: javaeye.com
相關推薦

2009-07-14 17:10:44

struts2webwork

2012-12-18 16:38:26

2012-03-08 13:15:10

JavaStrutsOGNL

2009-06-05 09:48:49

Struts2簡介開源技術

2009-06-04 09:41:50

struts2上傳文件

2013-07-19 09:36:04

struts2struts2漏洞

2013-07-18 15:09:27

2011-05-13 09:53:02

strutsAjax

2009-07-29 09:54:34

struts2和str

2009-06-25 15:11:28

Struts2教程Struts2程序

2012-08-30 09:48:02

Struts2Java

2012-05-10 14:00:06

StrutsjsonJava

2009-06-04 09:20:19

struts2 if標使用

2009-02-04 10:51:07

2012-12-18 16:18:06

2009-06-05 10:43:29

struts2 checheckbox實例

2009-07-03 09:35:57

Struts2 JSP

2009-06-04 08:01:25

Struts2攔截器原理

2017-07-11 09:42:22

漏洞

2009-06-04 08:34:24

Struts2配置struts.xml
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久99精品久久久久久 | 亚洲精品第一国产综合野 | 欧美一级黄色免费 | 日韩精品在线观看一区二区 | 欧美日韩在线视频观看 | 久久久精彩视频 | 成人午夜精品 | 精品欧美| 精品一区欧美 | 一区二区久久 | 又爽又黄axxx片免费观看 | 天天人人精品 | 日韩美av | 精品视频一区二区 | 黄色大片免费播放 | 天天综合日日夜夜 | 国产精品久久久久久久久久久久久久 | 国产精品成人一区二区 | 久久国产麻豆 | aaaaaaa片毛片免费观看 | 中文字幕日韩欧美一区二区三区 | 日本中文字幕在线观看 | 国产 日韩 欧美 中文 在线播放 | 99精品久久久久久中文字幕 | www.4hu影院 | 国产精品久久久久久一区二区三区 | 日韩精品无码一区二区三区 | 亚洲一区二区精品视频在线观看 | 国产福利久久 | 日日操av | 999久久久久久久久 国产欧美在线观看 | 国产精品一区三区 | 国产 日韩 欧美 中文 在线播放 | 在线亚洲一区二区 | 色视频网站| 毛片网站在线观看视频 | 欧美日韩国产一区二区三区 | 国产激情在线观看 | 精品国产一区二区 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 亚洲国产欧美精品 |