struts2 3

struts2 3

OGNL

  • 对象图导航语言

    • 支持对象方法调用
    • 支持静态方法调用和值访问
    • 支持赋值操作和表达式串联
    • 访问OGNL上下文
    • 操作集合对象
  • OGNL结构三要素:表达式(expression)、根对象(root Object)、上下文环境(context)

  • 在表达式中访问Context中的对象需要使用 **“#”**加上对象名称,即“#对象名称”的形式

  • 访问对象的方法

    object.method()
    
  • 访问对象的静态方法:

    @类的全路径@方法名称(参数列表)
    @类的全路径@属性名称
    
    OnglContext context = new OnglContext();
    Object obj = Ongl.getValue("表达式",context,context.getRoot());
    
    Object obj = Ongl.getValue("'helloworld'.length()",context,context.getRoot());
    
    Object obj = Ongl.getValue("@java.lang.Math@random()",context,context.getRoot());
    //获取OnglContext中的数据
    //context.put("name","张三");
    String name = (String)Ongl.getValue("#name",context,context.getRoot());
    //获取Root中的数据
    User user= new User();
    user.setName("张三");
    context.setRoot(user);
    
    String name = (String)Ongl.getValue("name",context,context.getRoot());
    

值栈

  • 值栈:是struts2的一个接口
  • 客户端发起一个请求struts2架构会构建一个action实例同时创建一个OgnlValueStack值栈实例A,A贯穿整个action的生命周期,struts2中使用OGNL将请求action的参数封装为对象存储到值栈中,并通过OGNl表达式读取值栈中的对象属性值
  • 值栈包括两个部分:值栈和map(即ognl上下文)
  • Context:即ognlContext上下文,是一个map结构,上下文存储了一些引用,
    • parameters:当前请求的请求参数
    • request:当前request对象中的所有属性
    • session:当前session对象中的所有属性
    • application:当前application对象中的所有属性
    • attr:该map按如下顺序来检索某个属性:request、session、aplication
  • 上下文的root为CompoundRoot:存储action实例,是OgnlContext的root对象
    • 继承ArrayList实现压栈和出栈功能,拥有栈的特点,先进后出,也称对象栈
    • 读取action实例的属性值时会先从栈顶对象中找到对应的属性,如果找不到则继续找栈中的其他对象
  • ActionContext和ValueStack的关系
    • 创建ActionContext的时候,创建ValueStack对象,将ValueStack对象给ActionContext
    • ActionContext中有一个ValueStack的引用,ValueStack中也有一个ActionContext的引用
    • ActionContext获取ServletAPI的时候,依赖值栈

获取值栈堆栈

//通过ActionContext对象获取值栈
ValueStack stack1 = ActionContext.getContext().getValueStack();
//通过request域获取值栈
ValueStack stack2 =(ValueStack)ServletActionCotnext.getRequest().getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);

操作值栈

  • 对action中的属性提供get方法:action本身在值栈中,action中的属性也默认在值栈中
  • 手动调用push和set方法对值栈进行操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值