00:00
今天我们要学习的这个OGL跟标签是里边非常重要的基础点,那这块的一些这个理念呢,是大家以前所没有接触过的,好我们先来看一下这个OGNL,我们首先呢,我们找到我们的这个第一个应用,那我们从这个里边引入到这个OG跑起来看一下。Input,好了,我输入基本信息。Hi。Name CPU英特尔1200SUM米,哎,在这个页面呢,我们可以打印出这个CPU英特尔和这个1200,好,这个对于我们普通的一个外部应用而言,是一件再正常不过的事了,但是我们当时说的时候,我们就说了一句特别让我们惊诧的事是吧,他不是那么太正常,我们看我们怎么写的呀,我们是从。
01:12
请求域里边直接获取这个product name product d跟product price这个属性值吧,是吧,怎么能够这样获取呢?就即便是获取的话,你应该把这三个属性工程中的一个对象去获取吧。现在的话呢,是一个一个获取的,怎么可能会这样呢?那面向对象的基本思想不就是把好几个属性相关的属性分装成一个对象吗?何况本身这个product name product product price就是一个对象呢,它怎么给分开了呢?好了,我们要探其究竟。那这块的话呢,我们来打印一下这个。Request,看这个request是不是还是他们开的服务器给我们创建那个原生的request来刷新一下,大家看这个request是谁的呀?是不是经过ru to重新定义的一个struts request。
02:22
OK ctrl c ctrl c t ctrl v,这个是二的。嗯,就这里边呢,OK好了,然后往下翻,我们发现什么呀,我们发现它重写了get atribu方法就是说呀,哎,这个时候获取这个属性的话呢,是通过这个方法来获取的,那于是呢,我们就在这块我们加一个断点。对,83行加一个断点,这个代码大致上我们能够看得懂啊,如果传的这个K是空的话,是不是抛一个异常啊,啊,如果这个K要是你这个开头的话,或者是呃,符合这个条件的话,它就直接返回,如果这个条件不反,如果这个条件不满足的话,再往下走吧,先获取了action context,然后呢,还尝试出尝试着super gettribute是谁呀?Super就是http request,就是正八经的那个request htp request,我们在讲过滤器的时候讲过这个rapper。
03:39
好,再往下翻,如果这个还没获取着的话,Attribute还是空的话,OK,他怎么样,他尝试着获取了一个。对象叫直站value sta从哪里边获取的,从action contact里边获取的,然后最终这个属性是从直站里边获取的,看见了吧,好了,所以说的话呢,我们可以把这个直接放到行,就这样走吧,问题不大啊,好,第八跑一个看看效果刷新。
04:28
你错了,好了。这个时候的话呢,他会来调这个get trip的方法,看key是谁哈,哎,这个key啊是ru action mapping,就是说他先会来获取ru自身的一些属性,然后才会到我们页面上获取那个product name product d product price,好找一找。
05:03
好product ID这个值的话呢,没有对象过了吧,好product name往下翻,大家看一下这个源码哈,往下翻,我首先的话呢,我得到了这个action都是它,然后呢,我尝试从负类里边获取一下,哎,没获取着,所以说这个时候能进到这个里边来好了。再往里边进,怎么做的呢?获取了一个值站叫value stack,注意这个时候这个attribu还是空,再往下走。我说。我要从值站里边来找这个值,往下一翻,你看这值是不是有了,所以说这个值啊,是从直站里边取出来的,而并不,而并不是真正在请求域里边有这么一个属性,清楚吧,这个值product name是从值站里边获取的,而并不是在请求域里边真的有这么一个属性值。好,那我们看看这个值站吧,再往下翻,K是product和DSC过程那个过程一样,我们这一遍的话呢,是为了看一下这个值站。
06:24
OK,直站叫。我先翻译一下,大家看这个指站里边有个什么呀?是不是有一个context,这个是对这个对象是一个o gl context吧,我们知道这个o gl context实际上就是那个action context吧,Action context不就是把这个o g contact给包装了一下吗?Action context里边只有一个属性,就是o g context吧,哎,我们讲过。
07:04
我们如何去衡量一个这个对象的状态呀,是不是主要看属性啊,它只有一个属性,所以说你就可以认为这个o g context等同于action context,然后呢,我们在看看那个action context源码的时候,我们还知道在这呢吗?嗯,O gl context都是他。好了,然后我们看这个语法的时候的话呢,我们还知道这个,呃,Context实际上是一个map类型吧,OK,所以说这里边的话呢,它也是一个map类型,它实际上它是一个map,好往下翻看哈,这里边还有一个这个属性叫root。叫根,大家看这个root呢,实际上是我们真正数据结构意义上的一个站。叫嗯,后进先出的那个站,后进先出,这里边儿有几个对象啊,有两个对象吗?一个是product,这确实是一个对象,CPU in特尔1200,我从页面上输的值吧,OK,那我。
08:14
刚才我从值站里边获取这个属性值,实际上就是从这个里边来。或许的。我从直站里边获取那个属性值,实际上就是从直站的root属性里边找到一个对象,如果这个对象里边有这个属性值的话,我就把这个属性值取出去,当然它有一个顺序关系好值占,我先从占顶找,占顶没有的话呢,到占顶的第二个对象来找,那这样的一个顺序,这就是指占。看PPT,我们首先呢,我们得到这样一个结论哈,我们之所以在页面上我能够获取一个一个属性值的话,并不是在请求域里边真的有那个属性。
09:05
而是从直站里边获取的,那么我们在页面上打印这个request呢?实际上是什么呀?实际上是已经被ru重新包装的一个request,就request。好了,这是我们刚才走源码的过程,这里边的话呢,我们找到了一个这个,嗯,定义叫直占value sta,这个value sta贯穿整个action的生命周期,这个action生命周期是不是比较短啊,一个请求一个action吧,所以说每一次请求都需要创建一个直站对象,那么这个直站对象就像一个中转站一样,其中保存了跟当前action对象相关的所有对象啊,抓框架实际上把这个直站对象啊也放在请求域里边了,这个键呢是ru.value stack。
10:06
在直战中有两个逻辑部分,第一个叫context map,实际上是谁呀?就是这个context o gl context,它实际上是一个map对象。T stresss把各种映射关系的一些map压入到这个context map里边,实际上它是一个对context action context的一个引用,这个我们在前边的话呢,已经交代清楚了,这里边放的是一些map,比方说我们昨天讲到的request map session map application map跟parameters map里边都有,好了,还有一个重要的就是这个root。Root啊,把跟action相关的对象压到这个这个里面,它就是我们传统意义上讲的那个值站,后进先出就战吧,我们讲数据结构的时候,老师这么讲过吧,是吧,就是这个战呢,就像我们小时候玩的那个手枪的那个。
11:12
子弹夹一样是吧,你把那个子弹往里面压,我后压的是不是在顶上啊,我打枪的时候我是不是先打出去啊,这就是站好了,我们可以来看一下Java是如何来实现这个站的,跑过来我们看这个站的对象叫什么呢?叫compound route。回来。CPT。Compound。Foot。好。从这块儿实际上是个什么呢?是不是个list呀,啊,它继承了list,然后我们看方法来,我们看了几个方法,第一个压站吧。
12:01
把一个对象压进去,它怎么压的呀?把这个对象是不是放到list的第一个位置了呀,那这样的话后边是不是一个一个往后挪呀。是吧,看出站呢,我把第一个取出来吧,那后边那个是不是一个一个往前移呀,好获取第一个对象pick主要就是这三个方法啊,说明这的确是按站的方式来进行设计,这个是真正意义上的那个站,我们称之为对象站,为了跟前面这个区分哈,而前面这个呃,Context,这个o gl contact呢,我们称之为map站,这里边放的刚才讲到了是吧,Mes request session application,它们对应的map,那还有一个叫attribute啊,该map按如下顺序来检索属性啊,也有一个什么呀,按request session application这个范围去检索属性。
13:04
只占两个逻辑部分啊,每个逻辑部分都是什么?我们通过一个图的话呢,进一步加以说明了。好了,我们要讲这个OGNL是什么呢?是我如何在页面上去读取值站里边的属性,OGL叫对象导航图语言,我们讲它的目的是说我如何在页面上去访问直站里边的内容。好了,我们再来复习一下指战哈,刚才的话呢,通过这个看这个源代码,看这个B的透视图,我们知道了这样的几个结论,第一个。指战里边有两个逻辑部分,第一个就是呃,叫object sta,叫对象站stress,把和当前action相关的对象加这个里边了,对是哪个呀?就是这个route。
14:07
直站的这个root属性,还有一个叫map站,Context map stresss,把各种相关的映射属性,主要是一些map哈,比方说这个里边了,它实际上是对action contact一个引用啊,这个contact的属性就request session application parameters,还有一个attribute。这个attribute呀,嗯,你从这里边获取的话,它会按照顺序来先到request里边找,找不着的话再去找session,再去找application,是不是跟我们讲过那个page contact,那个find attribute比较像,记得吧,Page contact find attribute,我是不是先从配置context开来找,是吧,那这边没有配context,好了,这就是我们现在讲到的这个值站。然后我这个欧雅表达式呢,就是在页面上如何来显示直站里边的内容。
15:09
那好吧,我们首先的话呢,就前面讲这个知识来做一个这个笔记性的一个小结,创建一个新的抓图的工程。我直接复制了啊。开炮。外B、外部安装文件已复制。Struts配置文件。
16:02
这个环境呢,这样就打好了。两名这个我们使用默认的也删一下。Close一个note。ST关于直战。目前我们知道的哪些事实一稿?我们在做那个hello word的时候。2WORD值页面上的话呢,我们通过这样的方式。接过一个pro name。主敬之。读取name。实际上,该属性定。
17:07
并不在request等对象中。哎,这是我们知道的一个事实,而什么而是从直战中获取的,这个的话呢,我们看原码,看那个B视图看到了,就是这样,它并不是request set tribute get tribute里边真正的那个属性值,而是直站里边。的一个属性值,当然这个值站的话呢,我们还要说值站,我们叫Y溜,哎,值站我们首先说几点啊,第一点我们看到的源码是什么呀,可以从action contact中获取,只占对象第一个,我们知道了二个。
18:10
然后的话呢,我们讲这个直站实际上是分为了两个逻辑部分,直战分为两个国际部分,其中第一个部分我们称之为map站、APP站,实do上是什么呀?O g NL contact类型,昨天我们看源码的时候我们已经知道了,是吧,这个o gl contact实际上是一个,是不是个map啊,就是一个map。是一个map说么,也是对action context的一个引用,是这样吧,因为我action context里边我只有一个属性,就是这个o gl context,那它俩基本上就是一样的,好了,它是一个map map类型,然后里边存放什么呢?里边保存这各种map,这种map就是这个map里边放的还是map,哪些map呢?常用的比方说。
19:32
我直接写了request map,就request,我对那个map session map,还有一个s map,还有attribute attribute就是综合了。Request session,还有一个application application map,然后呢,Map还有一个tribute,主要放的就是这些东西,好了,还有一个真正的是一个叫对象展。
20:12
值意义上是叫comut类行。是一个使用list定义的,这是一个真正的站啊,里边存放的是对象,里面保存各种和当前action实力相关的。对象,这个是一个真正意义上的站,是一个数据结构意义的。
我来说两句