00:00
刚才我们在做这个员工删除的时候呢,我们为了接收请求参数employee ID,我们怎么做的呀,我们在当前这个action里边定义了一个employee ID,同时写了一个方法吧,哎,通过这样的方式,那个值就能够置进来,你的确置进来了哈,那我们下边我们在做添加修改的时候呢,我们还会用到啊类似的办法,那我们需要知道这个值到底是怎么制进来的呀,我们需要来了解一下这个原理。这也是我们后续学其他拦截器的基础,那我们先来看一下源码啊,到我到直到我调用这个,比方说我们以这个呃,Delete为例哈,直到我来调这个delete的方法,在这个之前抓to,这个流程是个什么样的,那我于是的话呢,20号加了一个断点,我们找一个debug。
01:02
看一下哈,我只保留20行那个断点,其他的去掉回来我来点一个删除。好了吧,停住了,我们就希望知道,那在这之前strong two都干了什么事,这整个这个流程是什么样的,我们这个头呢,应该找谁呀?应该找我们在外BL文件里面配那个filter吧,往前翻它就是,当然我们需要去关联一下原代码,找到抓兔那个源码包,安装猫是可以哈,2.3.15 OK,这是那个do filter方法,然后呢啊,他尝试着去执行action吧,尝试执行action。
02:23
再往下来怎么样,它调用了proxy的XQ方法吧,这个我们在头一条开学法的时候是不是看过一次啊,当时是为了干什么来了,为了看抓to是什么时候把当前X放直战里边吧,但是看过一次这个时候的话呢,他会来调用stru action proxy exq的方法,那一会我们会说它为什么会创建一个ru action proxy,然后这个代码看上去就很有意思了哈,它执行的是谁啊?这里边的话呢,我们调用的是啊,Default action invocation的方法,好了,调的是246行源码,关联一下Java open source找。
03:23
2.3.42 2.3.15吧,好246行,然后我们看这个的话呢,调用了一个拦截器,这个拦截器叫异常映射拦截器,我们看过这个源码吧。记得吧,调了他的intercept的方法,然后怎么了?然后他又回调了invocation的EVO方法吧,于是你看见一个什么呀,一个特别奇异的现象,是不是每隔一行都有一个246啊,看到了吧?哎,这246的话呢,是调那个default action work方法,然后这个default action那个引work方法吗?这里边我还去调了下一个拦截器的intercept的方法,好了,一直调调调,直到我调到最后一个拦截器是谁呀?叫debgging intercept intercept方法,好回来来截去掉头了,没有了,于是的话呢,掉了执行action这个方法,然后的话呢,就执行这个action到这。
04:38
哎,这是整个的一个流程,好画上一个时序图呢,就是这样啊,浏览器发了一个请求,这个时候我们先会到ru prepare and filter的do filter方法,当然我这里边我有些省略了啊,然后呢啊,我们创建了一个action proxy叫action代理。
05:09
然后它调用了这个代理对象的excuse方法,然后这个代理对象里边有一个什么呀?有一个对default action e VOC的个引用,它调了default action invocation的EVO方法,然后的步骤就是default actionvocation去调那些拦截器的intercept方法,调完之后的话怎么了,它是不是还回调啊?他又回来,又调这个default action invoc的EVO方法,然后再调下一个拦截器的inter set方法,然后再回来吧,再去,再回来,如此仿复,那到了最后的一个拦截器,调完之后的话呢,它将调自己的work action,最终调了我们action的目标方法,这是整个的这个流程。这里边有两个点需要我们思考一下,第一个为什么会有一个action proxy呢,叫tru action的代理类,我们看到了这个流程是什么呀,我并不是直接去调了我这个action的方法吧,我在调这个action方法之前,我是不是先得去调用一个一个的拦截器呀,OK,所以说的话呢,这个action的代理呀,就是帮我们来干这个事的,就是让我们在调目标action之前把那些事先办了啊,所以说会有一个。
06:40
Action oxy,这是action的一个代理类,也就是说action调用呢,是通过它来完成的,那实际上的话呢,是调用它的方法,而这个又掉了action的方法,好了,下一个action,它实际上是SPA action的一个调用者,Action evoc嘛,Actionvoc在action执行过程中负责拦截器action以及result等一系列元素的调度,OK,这个流程的话呢,我们基本上说清楚了,我们回到这个里边来。
07:24
好了,我们说呀,从这块儿看的话呢,这个第一个拦截器是246的,第一行是什么呀?是异常拦截器吧,最后一个拦截器是第八个吧,在哪定义的呀,为什么是这个顺序啊。看一下我们的默认的struts的配置文件,找到struts找到。Default打开往下翻,我们现在默认的拦截气站是不是default stack呀,再往上看。
08:13
Default,看第一个是不是exception啊,最后一个是不是deb啊,这就是拦截器的调用顺序,它要去调用一个一个的拦截器G,我在到目标X之前,我必须一个一个拦截器的都走一遍好了,怎么走的呢?我们还可以来看第八个,看谁呢?看第一个看一下这个default actionvoc。246行,看他怎么一个一个找的回来,在这儿看怎么一个一个找吧哈。大家看and sample应该是什么呀?是不是拦截器的集合呀,这里边存放的就是当前使用那个拦截器站的所有拦截器,然后的话他说什么,他说你如果还有下一个的话,看见了吧,那我就先获取这个拦截器,是不是next,然后呢?啊,调用这个拦截器的intercept的方法,看到了吧,然后这个时候我这个。
09:27
代码就发送到下一个拦截器,然后下一个拦截器我是不是还要往回调啊,下一个拦截器回来,我还需要来调这个Mo方法,这个时候怎么了,还要来调这个方法,那我刚才我是不是已经往下走一步了呀?所以说下一次再调的话,就是刚才那个拦截器的下一个拦截器呗,好,如此往下掉,那如果要是没有呢,拦截器都掉完了呢,就掉这个invoke action only,这个时候的话呢,去调action那个目标方法好了,这就是我们目前知道的structure to的一个流程,这个流程啊只有一半,就是从发请求一直到调用action方法,那还有另外一半,另外一半的话呢,我后面再说,好,那于是的话呢,我们就会有一个结论,就是说在到达。
10:27
目标action方法之前stra to会经过一系列的拦截器吧?哎,其中有一个拦截器叫P拦截器,叫什么参数拦截器,这个拦截器会把表单字段的值映射给值站中占顶对象的各个属性。好了,说如果某个字段在站点对象里边没有匹配的属性的话呢,它会尝试着给直站里边的下一个对象,这个我们在前面的话呢也说过,然后我们还知道默认情况下占点那个对象是不是就是当前那个action呢?那于是我那个请求参数不就是给了那个action那个字段了吗?那请求参数employee ID就给了那个action的employee ID那个属性吧,好了。
11:23
哎,这是那个拦截气站default stack这个problem,它把表单值付给了占比对象属性。此时。占顶对象D为action,所以说我们加上一个employee ID啊,它就可以把那个请求参数employee ID只给employee action的employee ID属性,这就是流程。
我来说两句