OGNL与struts2的结合

昨日在看struts2时,觉得OgnlContext和ActionContext有也莫名的关系,在通过看其他人的博客时,更深的理解了Ognl表达式.

首先,我们就对OGNL这5个作用进行讲解

      1、存取对象的任意属性,简单说就是对javabean进行操作(重要)

      2、调用对象方法。

      3、调用类的静态方法

      4、索引数组元素

      5、操作集合(重 要)

其次:OGNL与struts2的结合(非常重要

但是在struts2中ognl是如何使用的呢?

                      OGNL中的上下文即struts2中的actionContext

      OGNL中的root即struts2中的valueStack

      actionContext和valueStack是什么,他们之间什么关系?

ActionContext:

               1. 充当OGNL的context(这句话用的真的是太妙了)。是action的上下文,也可以叫做action的数据中心,本质是一个map,在其中,所有的数据都存放在这里,那其中到底存放了哪些东西呢,actionContext中存放数据的方式又是怎样的?

                 2. actionContext是一个map(ActionContext.getContext()可以获得其当前线程的引用),所以其中都是以键值对的形式存储对象.

                  3. request、session、application这种我们熟知的作用域,注意是作用域(小Map),而不是对象,

                             paramters:这个是表单提交的参数,全部都会放到这个map中,

                             attr(attributes):三个作用域所有的属性都会放在该map下,如果有重复的,那么以request域中的为准。

        VALUE_STACK:值栈,存放着valueStack对象,也就是说,通过ActionContext能够获取到valueStack。

        如果我们使用actionContext.put();  那么会将该键值对直接放入到ActionContext(大Map)下.

                         注意:除了request外,其他都可以直接通过getXxx()获得。而想要获取request作用域,必须通过key值的方式来获取。ActionContext.getContext().get("request");   为什么这样呢?因为struts2对request进行了增强。从这里actionContext中是不能直接获取到的,request进行了怎样的增强呢?比如在actionContext中put了一个普通的key和value,该键值对并没有在request域中,但是在jsp中,通过在request域查找key,也能找到该键值对,底层进行了两步:第一步:从request域中查找数据,第二步:如果没有找到,将从值栈中执行findValue()。  这样就解释了为什么通过ActionContext不能直接获取request,并且为什么不在request作用域中的数据,而通过在request域中查找也能够获取到。

 来自 <https://www.cnblogs.com/whgk/p/6600393.html>

猜你喜欢

转载自blog.csdn.net/qq_39665334/article/details/82666072