00:00
刚才说mapping讲完了,不过好像我刚才看到这儿。还有个标签啊。Dispatch。你看。它里边有这样的四个取值,这个又是干嘛的呢?好,下边我们来看它的用法。我们这样拷贝。这个代码啊。零四我们叫dispat。
01:15
好,我们来看。看什么呢?看这儿啊。Filter。之前之后,这不用动。So。咱们这样啊,这有个some so,我再来一个。这个叫other。
02:17
执行other solid,那么这里边啊,由some,我们让它跳转到other,怎么跳转呢?通过请求转发。请求转发怎么做了呀?是不是request get?Request dispatch。点forward。到哪儿,到other?So。
03:01
大家看一下啊,这是什么。这是什么?这是不是一次请求?把这个请求转发给了他,这是不是一次请求呢?坏了,把大家问糊涂了。我们知道啊,现在这个程序。我开始跑以后如果我现在访问Sam。他肯定这句话要执行。紧接着请求转发给这个。Other会跳转到这儿。对不对?Forward吗?请求转发给他,那么现在我要问大家的问题是,由他到他。这个。提交的是请求,不是。如果是,那我们来看过滤器。
04:07
这个过滤器。咱们分开啊,这样为了。好看一些啊,这个这有点多了,我们这儿注册过滤器。对吧。下边这是注册啊。好,那这样能分开一些啊。So。这个是some,这个是other。
05:03
注册other。那么这里边儿这个。12PATTERNON钢琴,所有请求统统过滤。好,那我们知道啊,现在发布。发布以后。我们看这是谁的,这是访问这个index.jsp是吧,他这个拦截器执行的内容,我们不管它啊,现在。
06:08
我要访问some solid,那么我们知道这我这肯定是我提交请求了,所以这个filter肯定会执行。他肯定这个请求会被这个菲拦截,那现在我们的问题是什么?我们的问题是。由some到这。是不是提交了一次请求?要如果是他肯定就应该。是不是被?被这个给。拦截住啊。会再执行一次filter执行两次,那他是执行两次还是执行一次呢。我们看着控制台。走。几次?
07:00
执行了一次。这是之前。这个呢,执行了some some是不是直接就将请求转发给了other,然后由other给了谁了,给客户端响应。整个过程里边,我们的filter就执行了一次。哦,现在我明白这个意思了,这个不是我们。普通的提交的请求,那是啊,这个请求转发嘛,对不对。Forward,那可现在我的问题是什么?我想让它由这跳转到这儿的时候执行这个过滤器。怎么办?如果你想让他执行。我们就可以使用上这个东西了。
08:03
Dispatch。给他个值,你那不是写的forward吗?这就写成forward OK了,看好。我重新发布。不等他了,不等他自己了啊,我们手工给他重新发布。清掉。看好。伤心。诶,这这次这这执行这个结果这么奇怪呢。你看这次这结果很奇怪呀。这个执行了几次?仍然是一次,你注意哪一次?这是一次啊,你可不要这样看。这是一次。Some没有被执行。
09:03
不是说没有被执行,我们提交这个some这个请求的时候。他没有过这个filter。R是什么时候过了?你看从这就可以知道什么时候过的。由他跳转到他的时候。那么执行了这个filter。哎呀,这这这这个似乎啊有点儿意思了。似乎有点感觉了啊,我们再看。这个请求转发,是不是还有个呀。对不对,我把它改成include,好,重新发布了。现在再看我刷新走,你看。根本没没执行吧,为什么?原因很简单,你这儿请求转发的用的是include,而这呢?
10:03
而而这呢,你用的forward。改一下OK了。从来。刷新。走。看到没,是不是又被执行了?那这是什么意思呢?一会儿总结,咱们先来看这个用法啊,也就是说现在我这儿给它指定加上了dispat include或者forward以后,那么对于我们通常情况下的请求。他就不再。过这个filter了,你再看一下啊,什么叫通常情况下请求我现在访问index to点没有,你看。
11:06
没过还吧。对不对,再看我直接访问index.jsp。也没给我发吧,就是通常情况下的请求是不会。执行拦截,呃,被被这个。蓝器给,呃,被这个过滤器给拦截的。他只会拦截。你指定类型的这种转发。由转发到另外一个。资源。那也就是说。我给大家画了两个图,你看着啊。Forward。咱们看一下这是forward。浏览器发出请求,请求谁some some是把请求转发给other呀,如果他这用的是什么,用的是forward,这种方式肯定就是forward呀,是不是?
12:10
那说到这儿啊,Forward和include什么区别?还能想起来不能forward和include啊,如果你忘记了,重新再看一下。我们的那个专题solid编程那个专题里边啊,对于forward。Include它的详细的讲解,那么我在这简单说一下它们两个的根本的区别是。这个。响应,响应的标准、输出流的开启时间不一样。请求都是一样的。如果你用的是forward。你请求some,那么some会将这个请求forward forward是什么意思啊?向前,继续向前,说明你的请求还没结束呢,需要将请求继续向前推进,推进到哪other,那么这时候。
13:19
这时候这个。由于你的请求还没结束呢,所以它那个响应的标准输入流在萨service里边并没有开启。在哪才开启了,在other开启了,然后由other怎么样。给出客户端响应。那如果说你采用的是include include include是包含。对不对,当你将请求你请求萨ET的时候,萨ET到这儿了,你请求他,这个请求已经结束了,他不仅结束了,他还要把它里边内容给他包含进来。所以。
14:05
在some这儿。请求已经完成了,所以在这儿就开启了标准输出流响应的标准输出流将other service里边内容也包含到了萨ET这个标准输入流里边,最终是由萨S给出的响应。这是forward和include的区别。那么对于这两个。对于这两种跳转。如果在这儿和在这儿想让他被我们的。过滤器给拦截了,那么就需要使用。我们的。明白了吧?这就是他的意思。但你一旦加上这个东西了,你会发现它只会拦截你指定的include或者是forward。
15:04
他不会拦截正常的请求了。再看这还有一个叫什么。Request,好,我现在写成request request请求啊,什么意思呢?重跑一下。看着。我刷新这什么主页啊,In JSP Internet JSP啊刷新你看。过了吧。好情调。我在请求萨走。诶,这个结果是什么。你如果写成request。如果写成request,表示什么意思?他拦截的是普通请求。
16:03
明白吧,默认的就是如果你不写PA删掉它默认的就是request,所以啊,我们这儿加个注释。它的取值可以是for word可以是。Request。Forward。表示当前拦截器只会拦截什么只会拦截?有一个通过什么。
17:02
Request dispat的。Forward完成的跳转。他表示就是这个意思,那这个呢。Include。完全跳转。那这个呢。表示当前拦截器什么呀。当前这个拦截器的错了啊。过滤过滤器。当前表示当前过滤器。会拦截什么普通请求?
18:03
但对于。Forward与include。的跳转。无法或者不进行。拦截这个是不进行拦截的。开始默认值OK了。再看。最后这是不是还有个什么,还有个A。L又是干什么的,我们看一下啊,我们看一下啊,看一下。这样。
19:01
我把这个呀。改个名。这改成。一。这改成一,也就是说我们现在。默认的还原页面是没有的,没有的它会报什么?会报404,你即使报404,拦截器执行不执行。这个拦截器会不会执行呢?你们这过滤器会不会执行呢?我们看一下你注意啊,我这现在写的什么,现在写的error,我把这个也删掉,先不说这A。不说到这个事儿啊,我们开启。这个大家应该知道啊,因为我们已经前面就做过这个测试,你即使报404,它同样也是。发出的请求,你杠星吗?所有的都会。兰姐。刷新。
20:01
啊,这个这个这个。Some。不要,我们现在先要的是谁啊,不看他啊。我们现在要的是还原页面。404但是。过滤器是不是执行了好404。这种。在讲的时候说过,这404很不友好啊,对不对,我们可以给他指定什么。看着。在这儿。有什么?有a code404。Location。当然,现在我们没有这个页面。我来一个呗。
21:09
Arabpage。这是A,好。这我们知道啊,一旦你发生404了,它会跳转到l.JSP。是吧?看好我刷新走。是不是到他了?这个。过滤器也执行了,这是没问题的,对吧,那现在我有个需求。什么呢?当你向这个a.JSP跳转的时候,这也是发出一次请求啊,就单单这个请求的时候,我想让他执行。
22:04
这个过滤器其他的不执行,那怎么办?这时候就需要给它添加上pat。就加上他了。叫上他,咱们这样啊。你先看。主页是没有的是吧,我刷新。执行了吧。清掉我现在访问谁index to.l。没执行吧。因为什么他有这个页面它没有报404啊,那你要再来一个index three,这肯定没有吧,会报404是不是,你看l page是不是到这儿了,所以这个L是干嘛用的。
23:07
表示当。跳转到。指定的错误处理页面时。表示。这个跳转请求会被当前。过滤器拦截。就表示这个意思。OK了,那么对于的四个取值的应用我们就说过了。
我来说两句