从一个客户端的请求开始:

先经过Web.xml 到达struts.xml:

自动编译
访问静态属性和方法要设置的
模块包含,包含ognl.xml

被包含的ognl.xml:

/ognl.jsp
ognl

OgnlAction 类:

package com.bjsxt.struts2.ognl;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;import com.opensymphony.xwork2.ActionSupport;public class OgnlAction extends ActionSupport {    private Cat cat;    private Map
dogMap = new HashMap
(); private Set
dogs = new HashSet
(); private String password; private User user; private String username; private List
users = new ArrayList
(); public OgnlAction() { 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")); } public String execute() { return SUCCESS; } public Cat getCat() { return cat; } public Map
getDogMap() { return dogMap; } public Set
getDogs() { return dogs; } public String getPassword() { return password; } public User getUser() { return user; } public String getUsername() { return username; } public List
getUsers() { return users; } public String m() { return "hello"; } public void setCat(Cat cat) { this.cat = cat; } public void setDogMap(Map
dogMap) { this.dogMap = dogMap; } public void setDogs(Set
dogs) { this.dogs = dogs; } public void setPassword(String password) { this.password = password; } public void setUser(User user) { this.user = user; } public void setUsername(String username) { this.username = username; } public void setUsers(List
users) { this.users = users; }}

Cat类:

package com.bjsxt.struts2.ognl;public class Cat {                                                                                                            private Dog friend;                                                                                                            public Dog getFriend() {        return friend;    }    public void setFriend(Dog friend) {        this.friend = friend;    }    public String miaomiao() {        return "miaomiao";    }}

Dog类:

package com.bjsxt.struts2.ognl;public class Dog {                                                                                           private String name ;                                                                                           public Dog() {                                                                                               }    public Dog(String name) {        super();        this.name = name;    }                                                                                           public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @Override    public String toString() {        return "dog: " + name;    }}

S类:

package com.bjsxt.struts2.ognl;public class S {    public static String STR = "STATIC STRING";                                                                               public static String s() {        return "static method";    }}

User类:

package com.bjsxt.struts2.ognl;public class User {    private int age = 8;                                                                           public User() {                                                                               }                                                                           public User(int age) {        super();        this.age = age;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }                                                                           @Override    public String toString() {        return "user" + age;    }}

最重要的ognl.jsp(包含访问值栈中各种元素的方法):

    
  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. 投影:
  24. 投影:
  25. 投影:

  26. []:
struts2提供了一个非常好的调试方法.就是在页面上添加一个debug标签..它会自动帮我们将一些信息显示在页面上;这个值栈又分为两种.Value Stack Contents 和 Stack Context .(1).Value Stack Contents 里面的信息我们可以用
这样来直接访问.(2) Stack Context 里面的信息我们可以
这样来访问