struts2_ognl和valueStack简介
来源:互联网 发布:php软件公司源码 编辑:程序博客网 时间:2024/06/06 02:18
1. ognl是什么?有何作用?
OGNL(Object-Graph Navigation Language)叫做对象导航图语言,是一种强大的表达式语言,比EL表达式功能更加强大。struts2将ognl表达式语言,集成当struts2框架中,作为它的默认表达式语言。
2. OGNL的功能有哪些?
<1>支持对象方法调用,如xxx.dosomeSpecial();
<2>支持类静态的方法调用和值访问
<3>访问OGNL上下文(OGNL context)和ActionContext; (重点 操作ValueStack值栈 )
<4>支持赋值操作和表达式串联
<5>操作集合对象。
//在struts2中应用演示ognl表达式//需要结合struts2的标签使用<s:property value="ognl表达式"><s:property value="'abc'.length()"/> 演示对象调用方法<s:property value="@java.lang.Math@max(10,20)"/> 演示静态成员访问注意:在struts2中使用静态成员访问,必须设置一个常量:struts.ognl.allowStaticMethodAccess=false
3. valueStack是什么?有什么用?
valueStack是值栈。
从技术角度来讲,valueStack就是一个接口com.opensymphony.xwork2.util.ValueStack。
从使用角度来讲,valueStack就是一个容器。
我们使用valueStack最大的作用就是将action相关的数据以及web相关对象,携带到页面上。简单讲,我们在使用struts2框架就是通过valueStack将action中的数据携带到jsp页面上进行展示。
我们来看下valueStack的一些特点:
<1>valueStack有一个实现类叫OgnlValueStack。
<2>每一个action都有一个valueStack。(一个请求,一个request,一个action,一个valueStack)valueStack的生命周期就是request的生命周期。
<3>valueStack中存储了当前action对象以及其他常用web对象(request、session、application、parameters)。
<4>struts2框架将valueStack以“struts.valueStack”为名存储到request域中。
4. valueStack的结构
//valueStack中存在 存在root属性 (CompoundRoot) 、 context 属性 (OgnlContext )* CompoundRoot 就是ArrayList* OgnlContext 就是 Maplist集合中存储的是action相关信息map集合中存储的是相关映射信息,包含paramters,request,session,application attr等。我们想要从list中获取数据,可以不使用#号.(暗指它就是ognl的root)如果从map中获取数据,需要使用#. (其实在struts2中的map--context其实就是ognlContext)结论: ValueStack它有两部分 List Map 在struts2中List就是root Map就是ognlContext. 默认情况下,在struts2中从valueStack获取数据从root中获取。
5. 值栈对象的创建,valueStack和ActionContext是什么关系?
ActionContext ctx = ActionContext.getContext(); if (ctx != null) { stack = ctx.getValueStack(); } valueStack是每一次请求时,都会创建. 在ActionContext中持有了valueStack的引用。
6. 如何获取值栈对象?
对于valueStack获取有两种方式:
<1>通过 request获取
ValueStack vs=(ValueStack) ServletActionContext.getRequest().getAttribute(
ServletActionContext.STRUTS_VALUESTACK_KEY);
<2>通过ActionContext获取.
ValueStack vs=ActionContext.getContext().getValueStack();
7. 针对于root,怎样向值栈中保存数据?
主要有两个方法:
<1>push(Object obj)——->底层就是 root.add(0,obj) 将数据存储到栈顶。
<2>set(String name,Object obj);—–>底层是将数据封装到HashMap中,在将这个HashMap通过push存储。
在JS[页面中可以通过<s:debug>来查看值栈的内容。
8. 如何在JSP页面中获取值栈的内容?
root中数据不需要#,而context中数据需要#
<1>.如果栈顶是一个Map集合,获取时,可以直接通过Map集合的key来获取value <s:property value="username"/> <2>如果栈顶数据不是一个Map,没有key值,可以使用序号来获取。 <s:property value="[0]"> 从0的位置向下查找所有。 <s:property value="[0].top"> 只查找0位置上数据。如果获取OgnlContext中数据: 1.request数据 request.setAttribute() 2.session数据 session.setAttribute() 3.application数据 application.setAttribute() 4.attr 依次从request,session.application中查找 5.parameters 获取请求参数
- struts2_ognl和valueStack简介
- Struts2_OGNL和值栈
- Struts2_OGNL
- Struts2_OGNL
- 01 Struts2_OGNL
- 8.struts2_OGNL
- Struts2_ognl表达式
- valuestack
- ValueStack
- ValueStack
- ValueStack
- ValueStack
- ValueStack
- struts2中的valuestack和ActionContextStack
- sturts2的ModelDriven和ValueStack
- Struts2框架--------OGNL和valueStack
- Struts-ValueStack和OGNL总结
- ValueStack、OGNL和Struts2标签
- 操作系统常见面试题
- 实训笔记第八天
- zoj 1254
- String类的部分实现和测试
- 2048小游戏
- struts2_ognl和valueStack简介
- [bigdata] IntelliJ run project
- Toolbar的使用
- 最小生成树问题
- POJ 2192
- 欢迎使用CSDN-markdown编辑器
- shell
- vi编辑器
- python 元组