struts2_ognl和valueStack简介
2017-07-06 02:56
260 查看
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>操作集合对象。
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的结构
5. 值栈对象的创建,valueStack和ActionContext是什么关系?
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中数据需要#
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 就是 Map list集合中存储的是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
- JAVAWEB开发之Struts2详解(四)——ognl与valueStack(重点)、Struts常用标签、防止表单重复提交、Struts2中内置json插件
- Struts2 ValueStack & ActionContext & OGNL 关系
- Struts2-OGNL-ValueStack
- [struts2] ognl, valueStack, stackContext 的学习
- Struts2知识点回顾(八)OGNL与ValueStack
- Struts2第九篇【OGNL、valueStack详解】
- Struts2中的ValueStack-OgnlValueStack中的Context和Root存数据和取数据
- Struts2第九篇【OGNL、valueStack详解】
- 深入分析JavaWeb 48 -- Struts2中OGNL表达式与ValueStack
- Struts2 学习系列 (4) ValueStack和OGNL
- struts2 OGNL ValueStack概念理解 # % $ 的区别
- struts2 ValueStack详解,页面获取值el表达式、ognl表达式
- Struts2中的OGNL与valueStack
- 关于Struts2中的ValueStack,ActionContext,OgnlContext的理解之一:OGNL
- Struts2中OGNL,valueStack,stackContext的学习
- Struts2 OGNL ValueStack
- struts2 OGNL ValueStack概念理解 # % $ 的区别
- struts2(六)之ognl表达式与ActionContext、ValueStack
- Struts2_ValueStack,OGNL详解