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标签展示数据

原文地址:https://www.cnblogs.com/yingyigongzi/p/9203110.html