1.OGNL:object graph navigation language(对象图导航语言),一般是和Struts标签库结合使用。
2.值栈:ValueStack,是对应每一个请求对象的轻量级的内存数据中心。
3.ActionContext:用于和web容器交换的对象。
发起请求时:web容器会在ActionContext中创建一个ValueStack,并实例化一个Action对象,将对象存入ValueStack中。在这个过程中拦截器会将请求的参数值设置给Action中对应的属性。对于ValueStack中的值可以通过OGNL来获取。
4.Struts标签库:使用方式与JSTL一致,基本涵盖所有JSTL。
引用代码如下:
使用标签格式如下:<%@taglib prefix="s" uri="/struts-tags" %>
上面代码均能获取到name属性对应的属性值。<s:property value="name"/> <s:property value="#parameters.name"/> <s:property value="%{#parameters.name}"/>
5.OGNL中的3个常用符号:#,%,$
Action对象是根对象。
#的作用:
(1)用于获取非根对象的属性对应的值:
获取parameters对象的属性对应的值:
#parameters.name等同于request.getParameter(“name”);
获取request对象中的属性对应的值:
#request.name等同于request.getAttribute(“name”);
获取session对象中的属性对应的值:
#session.name等同于session.getAttribute(“name”);
获取application对象中的属性对应的值:
… …
获取attr对象中的属性对应的值:
如果是使用这种方法,会按照page-request-session-application依次查找属性。
(2)构造map集合对象
#{key:value,key:value,...}
(3)进行过滤筛选
%的作用:用于将属性字符串使用ognl表示,可以用于处理获取非根对象属性也非内置对象出现的值错误问题。
语法:属性值="%{OGNL表达式}"
对于<s:property/>标签:
对于后四行获取值,最后三行都能获取到值,而第一个val123获取不到值,返回值为null。<s:set name="val" value="%{'zhangsan'}"></s:set> <s:property value="val123"/><br> <s:property value="%{#val}"/><br> <s:property value="#val"/><br> <s:property value="val"/><br>
对于<s:url></url>标签:
只有第一个能获取到val对应的值,下面两个获取得值是错误的分别为#val,val。<s:url value="%{#val}"></s:url><br> <s:url value="#val"></s:url><br> <s:url value="val"></s:url><br>
$的作用:在配置文件中使用OGNL。语法:${表达式}