struts2框架由什么組成,java ognl使用_java框架篇---struts之OGNL詳解

 2023-11-18 阅读 22 评论 0

摘要:OGNL(Object?Graph?Navigation?Language),是一種表達式語言。使用這種表達式語言,你可以通過某種表達式語法,存取Java對象樹中的任意屬性、調用Java對象樹的方法、同時能夠自動實現必要的類型轉化。如果我們把表達式看做是一個帶有語義的字符串,那

OGNL(Object?Graph?Navigation?Language),是一種表達式語言。使用這種表達式語言,你可以通過某種表達式語法,存取Java對象樹中的任意屬性、調用Java對象樹的方法、同時能夠自動實現必要的類型轉化。如果我們把表達式看做是一個帶有語義的字符串,那么OGNL無疑成為了這個語義字符串與Java對象之間溝通的橋梁。既然OGNL那么強大,那么讓我們一起來研究一下他的API,看看如何使用OGNL.

OGNL的API看起來就是兩個簡單的靜態方法:

public static Object getValue( Object tree, Map context, Object root ) throws OgnlException;

struts2框架由什么組成?public static void setValue( Object tree, Map context, Object root, Object value ) throws OgnlException

1.OGNL表達式的計算是圍繞OGNL上下文進行的。

OGNL上下文實際上就是一個Map對象,由ognl.OgnlContext類表示。它里面可以存放很多個JavaBean對象。它有一個上下文根對象。

上下文中的根對象可以直接使用名來訪問或直接使用它的屬性名訪問它的屬性值。否則要加前綴“#key”。

java field.set?2.Struts2的標簽庫都是使用OGNL表達式來訪問ActionContext中的對象數據的。如:。

3.Struts2將ActionContext設置為OGNL上下文,并將值棧作為OGNL的根對象放置到ActionContext中。

4.值棧(ValueStack) :

可以在值棧中放入、刪除、查詢對象。訪問值棧中的對象不用“#”。

框架Java,Struts2總是把當前Action實例放置在棧頂。所以在OGNL中引用Action中的屬性也可以省略“#”。

5.調用ActionContext的put(key,value)放入的數據,需要使用#訪問。

OGNL中重要的3個符號:#、%、$:

“#”主要有三種用途:

java struts、訪問OGNL上下文和Action上下文,#相當于ActionContext.getContext();下表有幾個ActionContext中有用的屬性:

名稱

作用

例子

java object。parameters

包含當前HTTP

請求參數的Map

#parameters.id[0]

java spring。作用相當于

request.getParameter("id")

request

包含當前

java.lang.integer cannot be?HttpServletRequest

的屬性

(attribute)的Map

#request.userName相當于

volatile Java,request.getAttribute("userName")

session

包含當前

HttpSession的

屬性(attribute)

的Map

#session.userName相當于

session.getAttribute("userName")

application

包含當前應用的

ServletContext

的屬性(attribute)

的Map

#application.userName相當于

application.getAttribute("userName")

attr

用于按request >

session > application

順序訪問其屬性

(attribute)

#attr.userName相當于

按順序在以上三個范圍(scope)

內讀取userName屬性,直到找到為止

用于過濾和投影(projecting)集合,如books.{?#this.price<100};

構造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。

"%“符號

%符號的用途是在標志的屬性為字符串類型時,計算OGNL表達式的值,這個類似js中的eval,很暴力。

"$"符號

$符號主要有兩個方面的用途。

—??? 在國際化資源文件中,引用OGNL表達式,例如國際化資源文件中的代碼:reg.agerange=國際化資源信息:年齡必須在${min}同${max}之間。

—??? 在Struts 2框架的配置文件中引用OGNL表達式,例如:

ListPhotos.action?albumId=${albumId}

下面代碼實例對OGNL有更深的了解:

Cat.java

packagecom.oumyye.struts2.ognl;public classCat {privateDog friend;publicDog getFriend() {returnfriend;

}public voidsetFriend(Dog friend) {this.friend =friend;

}publicString miaomiao() {return "miaomiao";

}

}

Dog.java

packagecom.oumyye.struts2.ognl;public classDog {privateString name;publicDog() {

}publicDog(String name) {super();this.name =name;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}

@OverridepublicString toString() {return "dog: " +name;

}

}

User.java

packagecom.oumyye.struts2.ognl;public classUser {private int age = 8;publicUser() {

}public User(intage) {super();this.age =age;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}

@OverridepublicString toString() {return "user" +age;

}

}

OgnlAction.java

packagecom.oumyye.struts2.ognl;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.HashSet;importjava.util.List;importjava.util.Map;importjava.util.Set;importcom.opensymphony.xwork2.ActionSupport;public class OgnlAction extendsActionSupport {privateCat cat;private Map dogMap = new HashMap();private Set dogs = new HashSet();privateString password;privateUser user;privateString username;private List users = new ArrayList();publicOgnlAction() {

users.add(new User(1));

users.add(new User(2));

users.add(new User(3));

dogs.add(new Dog("dog1"));

dogs.add(new Dog("dog2"));

dogs.add(new Dog("dog3"));

dogMap.put("dog100", new Dog("dog100"));

dogMap.put("dog101", new Dog("dog101"));

dogMap.put("dog102", new Dog("dog102"));

}publicString execute() {returnSUCCESS;

}publicCat getCat() {returncat;

}public MapgetDogMap() {returndogMap;

}public SetgetDogs() {returndogs;

}publicString getPassword() {returnpassword;

}publicUser getUser() {returnuser;

}publicString getUsername() {returnusername;

}public ListgetUsers() {returnusers;

}publicString m() {return "hello";

}public voidsetCat(Cat cat) {this.cat =cat;

}public void setDogMap(MapdogMap) {this.dogMap =dogMap;

}public void setDogs(Setdogs) {this.dogs =dogs;

}public voidsetPassword(String password) {this.password =password;

}public voidsetUser(User user) {this.user =user;

}public voidsetUsername(String username) {this.username =username;

}public void setUsers(Listusers) {this.users =users;

}

}

ognl.jsp

OGNL表達式語言學習
  1. 訪問值棧中的action的普通屬性: username =
  2. 訪問值棧中對象的普通屬性(get set方法): | | | wrong: --%>
  3. 訪問值棧中對象的普通屬性(get set方法):
  4. 訪問值棧中對象的普通方法:
  5. 訪問值棧中對象的普通方法:
  6. 訪問值棧中action的普通方法:
  7. 訪問靜態方法:
  8. 訪問靜態屬性:
  9. 訪問Math類的靜態方法:
  10. 訪問普通類的構造方法:
  11. 訪問List:
  12. 訪問List中某個元素:
  13. 訪問List中元素某個屬性的集合:
  14. 訪問List中元素某個屬性的集合中的特定值: |
  15. 訪問Set:
  16. 訪問Set中某個元素:
  17. 訪問Map:
  18. 訪問Map中某個元素: | |
  19. 訪問Map中所有的key:
  20. 訪問Map中所有的value:
  21. 訪問容器的大小: |
  22. 投影(過濾):
  23. 投影:1}.{age}"/>
  24. 投影:1}.{age}"/>
  25. 投影:1}.{age} == null"/>
  26. []:

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/177752.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息