struts2之OGNL
limit ?,? 2 paged第几页,pageSize每页显示的页数 0,2 1,2 2,2 3,4 (page-1)*pageSize (1-1)*2
1.OGNL
是一组功能强大的表达式语言,类似EL
(回顾:el表达式只要是JavaEE5以上,不需要引用任何jar包)
访问bean对象属性:
基本类型属性: “属性名” (用的最多)
数组、集合类型: “属性名[下标]”
map类型: “属性名.key”或者“属性名[‘key’]”
引用类型: “引用属性.属性名” (用的最多)
常规运算
算术运算 “age+10” 和的运算 “name+10” 字符串拼接
关系运算 “age>10”
逻辑运算 “true&&false”
调用方法:
普通方法: “list.size()” "name.toUpperCase()"
静态方法: “@完整类名@方法名(参数)” "@java.util.Arrays@toString(arrs)"
创建对象:
集合对象: “{元素1,元素2...}”
Map对象: “#{key:value,key:value...}”
2.ValueStack:值栈
分为3个部分:ognl引擎,栈区,map区
存数据:
拦截器可以拦截Action请求,其中有一个拦截器可以拦截表单中的数据,请求到达Action之前,拦截器将表单中的数据存放到了VS值栈中,ognl引擎根据拦截到的数据,从栈顶依次往下查找相同名字的属性,如果,找到,给其赋值。
取数据:ognl引擎根据表达式(ognl/el)从栈区的栈顶依次查找相同名字的属性,如果找到,返回其值。
3.为什么el表达式可以获得VS值栈中的数据?
在struts2中,重构了request.getAttribute()方法,重构之后,依然是从request对象中查找数据,如果没有找到,则从VS中查找
顺序:pageText-》request-》VS-》session-》application
4.struts2的六大核心组件
a.FC:前端控制器
负责请求分发,交给业务控制器
b.Action业务控制器
负责处理某一类具体业务、
c.VS:值栈
Action与jsp数据交互的媒介
d.Interceptor:拦截器
负责扩展Action
e.Result:
输出组件
f.Tags:
标签
5.执行流程
a.请求到达之后,先进过FC
b.FC根据struts.xml文件的配置信息,确定调用哪一个Action
c.创建VS值栈对象
d.创建Action对象,并且将Action对象存放到栈顶
e.调用Action的execute方法,根据输入属性计算输出属性
f.在调用execute之前或之后会调用一系列拦截器
g.根据execute方法返回的字符串,确定调用哪一个Result。
h.Result组件根据指定的类型将数据输出
通常是转发到一个jsp页面,在页面中使用Tags标签展示数据