【8】OGNL的入门

一、OGNL的概述

 

1、什么是OGNL

         OGNL比EL强大很多被的表达式语言(EL获取的数据来源与四个作用域,EL提供11个web对象),OGNL是一个独立的表达式语言。Struts2发现OGNL功能很强大,将OGNL引入到自身当中,作为自己的表达式语言。

         OGNL全称是对象图导航语言(Object-Graph Navigation Language),可以通过某种表达式语法,存取Java对象的任意属性,调用Java对象的方法,同时能够自动实现必要的类型转换。

 

2、OGNL的作用

l  访问对象的方法。如:objName.methodName();

l  访问对象的静态方法:@java.lang.String@format();

l  支持赋值操作和表达式串联

l  访问OGNL上下文(OGNL context)和ActionContext

l  操作集合对象

3、OGNL的要素

(1)表达式:带有语法含义的字符串,规定了“做什么”
(2)Root:OGNL的操作对象,规定了“对谁操作”
(3)OgnlContext对象:Root对象所在的环境就是OGNL的上下文环境(Context),规定了“在哪里进行”

注:上下文环境Context是一个Map类型的对象,在表达式中访问Context中的对象,需要使用“#”加上对象名称:#对象名称

二、OGNL的入门

1、OGNL在Java工程使用(了解)

@Test

    // 获得对象的方法

    public void demo1() throws OgnlException{

        // 获得数据:

        OgnlContext context = new OgnlContext();

        Object value = Ognl.getValue("'helloworld'.length()"contextcontext.getRoot());

        System.out.println(value);

    }

   

    @Test

    // 调用对象的静态方法

    public void demo2() throws OgnlException{

        // 获得数据:

        OgnlContext context = new OgnlContext();

        Object value = Ognl.getValue("@java.lang.Math@random()"contextcontext.getRoot());

        System.out.println(value);

    }

   

    @Test

    /**

     * OGNL获得root的数据

     * * root中一般存对象

     */

    public void demo3() throws OgnlException{

        Product product = new Product();

        product.setName("电视机");

        product.setPrice(2999d);

        // 获得Context对象:

        OgnlContext context = new OgnlContext();

        context.setRoot(product);

       

        Object value = Ognl.getValue("name"contextcontext.getRoot());

        System.out.println(value);

    }

   

    @Test

    /**

     * OGNL获得context的数据

     * * context中存入的List集合,其他的普通的值

     * * 获取context数据需要加#

     */

    public void demo4() throws OgnlException{

        // 获得Context对象:

        OgnlContext context = new OgnlContext();

        context.put("key""郝强宝");

       

        Object value = Ognl.getValue("#key"contextcontext.getRoot());

        System.out.println(value);

    }

注:root中一般存对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值