栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Struts2---------3(OGNL表达式语言和struts值栈)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Struts2---------3(OGNL表达式语言和struts值栈)

1、OGNL

(Object Graph Navigation Language),简称OGNL,是应用于Java中的一个开源的表达式语言,它被集成在Struts2等框架中,作用是对数据进行访问,它拥有类型转换、访问对象方法、操作集合对象等功能。

Struts2框架使用OGNL作为默认的表达式语言

OGNL是一种比EL强大很多倍的语言
xwork提供 OGNL表达式
ognl-3.0.5.jar

示例代码
 // 访问对象的方法
    @Test
    public void test1() throws OgnlException{
        OgnlContext context = new OgnlContext();
        // 获取对象的方法
        Object obj = Ognl.getValue("'helloworld'.length()", context, context.getRoot());
        System.out.println(obj);
    }
 
    // 获取OGNL上下文件的对象
    @Test
    public void test2() throws OgnlException{
        OgnlContext context = new OgnlContext();
        context.put("name", "Tom");
        // 获取对象的方法
        Object obj = Ognl.getValue("#name", context, context.getRoot());
        System.out.println(obj);
    }
 
    // 从root栈获取值
    @Test
    public void test3() throws OgnlException{
        OgnlContext context = new OgnlContext();
        Customer c = new Customer();
        c.setCustName("haha");
        context.setRoot(c);
        String name = (String) Ognl.getValue("custName", context, context.getRoot());
        System.out.println(name);
    }
在Struts2框架中使用OGNL表达式,主要是在JSP页面中获取值栈中的值。

需要先引入Struts2的标签库

<%@ taglib prefix="s" uri="/struts-tags" %>

使用Struts2提供的标签库中的标签


2、什么是值栈
  • 值栈就相当于Struts2框架的数据的中转站,向值栈存入一些数据。从值栈中获取到数据。
  • ValueStack 是 struts2 提供一个接口,实现类 OgnlValueStack ---- 值栈对象 (OGNL是从值栈中获取数据的 )

在action里面把数据放到值栈里面,在页面中获取到值栈数据

servlet和action区别

(1)Servlet:默认在第一次访问时候创建,创建一次,单实例对象
(2)Action:访问时候创建,每次访问action时候,都会创建action对象,创建多次,多实例对象

值栈存储位置

(1)每次访问action时候,都会创建action对象,
(2)在每个action对象里面都会有一个值栈对象(只有一个)

3、获取值栈对象 1) 使用ActionContext类里面的方法得到值栈对象
public String execute() throws Exception {
		//获取context
		ActionContext context = ActionContext.getContext();
		//用context调用getValueStack()方法得到context对象
		ValueStack valueStack1 = context.getValueStack();
		ValueStack valueStack2 = context.getValueStack();
		//判断两个对象是否是同一个
		System.out.println(valueStack1==valueStack2);
		return NONE;
	}
	}

控制台输出true,证明是同一个对象

②、通过request获取值栈对象

4、值栈内部结构

root – Struts把动作和相关对象压入 ObjectStack 中–List
context – Struts把各种各样的映射关系(一些 Map 类型的对象) 压入 ContextMap 中

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/295426.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号