struts2中的OGNL,context的实现者为Actioncontext,它的结构示意图如下:
当struts2接受一个请求时,会迅速创建Actioncontext,Valuestack,action.然后把action存放进ValueStack,所以action的实例变量能够被OGNL访问。
具体的访问OGNL Context的里面的对象属性,需要在前面加#,eg:#request
但如果访问的是根对象里面的属性,则不需要加#,比如访问ValueStack里面的属性就不需要加#,
OGNL访问的顺序:
从栈顶开始,如果第一对象中没有,在再第二个对象中去找,如果找不到,一直下去。。。。
****************************************************************************
为何EL表达式能够访问ValueStack中对象的属性值???
原因是struts2对HttpServletRequest做了进一步的封装。