00:00
我们来学习这个抓to,那么首先呢,我们来搞一个前奏啊,叫使用filter来作为controller的MVC,我们前边讲MVC推进模式的时候,那个c controller使用什么实现的solve吧,是吧?啊,我们都很熟啊,发一个请求到solve,然后solve应答请求调用方法,呃,转发或重镜向页面,诶,我们现在的话呢,把这个controller改为filter,看看怎么样。为什么有这个环节呢?因为抓兔子这个。Controller就是用filter来做的,我们后边讲structure运行原理的时候,包括底层代码的时候我们也会看到,所以说我们先看使用filter作为控制器的ivc实现MVC模式的应用程序呢,由三大部分来构成,第一个呃模型封装了这个应用的,这个程序的数据和业务逻辑的,通常情况下我们现在是一个pogo是吧?
01:13
Pogo什么意思啊,一个普通的Java类,就再普通不过的一个Java类,不用实现任何接口啊,一个一般的一个Java类,我们现在我们写的DAO,我们写的service啊,都是这样的,Po go好视图GT目前提供显示的。呃,还有一个就是控制器接收请求调用的方法,显要视图,开始的话呢,我们用的是一个,但实际上它还可以是一个filter来看具体的一个需求,最开始的话呢,我们要输入一个这样的一个请求的地址,呃,Product input.action,好吧,这个请求将帮我们显示一个表单,表单里边有这样的三个字段。
02:03
然后呢,我点这个保存哦,就是一个大的save action一个请求啊,这个时候呢,将把这个数据转到数据库里边,而且到另外一个页面来显示这个详细信息,这是一个最简单的一个hello word级别的一个小程序。我们首先用filter作为控制器来写一下,后边的话呢,我们start to the hard word也是建立在这个基础上,我们看一下,我们写首先我这个请求需要发到这个filter dispat,我们写这样的一个filter,那个filter来作为控制器。那他将把这个响应给到我们的这个页面。同样。把它下一个这个请求的地址也发给这个filter,然后的话呢,他去叫DAO,最后尾给我们这样的一个页面,就是整个的流程。
03:01
好了,下边的话呢,我们看用filter和用有什么不同之处。首先创建一个动态的账号。工程四抓兔一。创建一个index的JP。开始页面吗?这个页面里面的话呢,我们加一条链接A,嗯。定向到product input action product input OK,然后我们实际的页面呢,放在外部下。
04:03
PS。JSP,我写个input JSP。再写一个details。ST。啊,那我最先干的一件事是什么事呢?我点这个链接,我可以到这个页面来看哈,哎,我点这个链接,可以到这个页面来对话,我们需要怎么转呀,需要通过一个转发过来吧,对吧,反正你就要request get request for的方法,那我们现在的话呢,我们就通过一个future来干这个事。注意控制器嘛,点。
05:04
创建一个filter。直接创建了哈。啊,我们说所有的点action请求都给到他所有的点action星点action。加一步完了。创建完了扩招器我们不看了。上手。好了,我们看中间这个方法,那递答,既然我说应答所有的点action请求,那首先我们先看这吧,我要是点这个超链接,我如何能定位到input这个页面呢?我首先要干什么呀?我是不是要解析这个请求啊,肯定的呀,呃,那我这个里边的话呢,我可能会有一个表单,我写一下,大家看一下来form action叫action。
06:28
save.action。Post product。就是这么写吧,这块就是input,我得区分,呃,Input跟这个C是不一样的,那我于是的话,我需要来获取什么呀。或许是什么呀,他叫什么呀。或许这个或者是这个这叫什么呀。
07:01
叫什么叫pass吧,获取pass好了,然后呢,根据判断。对,Has,若其等于,我们先说第一个哈,如果期等于什么呢?呃,接线包X。Input action则。转发到这个页面,爱宝info。下边的pages,下边的input。而如果目前我们看到。好,那下一个三说若琪等于这个好X save.action折怎么样,我再说。
08:14
嗯,先搞一下吧,不准。Pass,等于request.at没有啊,这没有啊,这是不是负接口啊,你得用子接口那个吧,是吧,用http request。旋转。Can get so。搞定。好,先打一下啊,来看这个对不对,第3AS,然后做一个判断,如果。
09:03
结。Pro。Input action.equals那个相等的话,那我就直接。转发过去,我转发呀,我下一个可能还会有一个转发,所以说我们直接写一个他。String pass等于。那转发的地址这个时候的话呢,我让pass等于。这个。好了,搞定,因为我们照到第三个里面可能还会有转发,就有这样判断,如果pass要是不等于空的话,我说怎么了。Request and requestr pass。
10:02
对吧,就是说我们下边这块啊,我肯定还是一个转发,为什么呀,这个DTL字是不是还在,还是在这个下边啊,我要这么写的话,我这个代码我是不是就省了一行啊,否则在这个if以及底下这个衣服里边,我是不是都有这个语句。清楚吧,OK,看一下效果先。嗯。哎哟,写错了。他说了一个异常a product,这写的没啥错误啊,问在哪大家说。Illegal stateion。肯定是在这个这个里面的问题在哪。我们做了一个转发,然后是后边是不是还有春do filter呢,我都我转发的,我是不是已经给响应了方法结束看好。
11:10
再看效果刷新好了,我这个页面的话呢,应该就来了,那我这个页面啥也没写哈,我写点东西来,然后等他那。第二。Product e have name brought。
12:03
E。再有一个。Faith in BOO。Time。X后边有一个input。三米VALUE3米卷,好,我们看第一个是不是成功了哈。这个是OK的吧,哎,就这么一个效果好了,下面的问题的话呢,是哎,我输入这个值,把这个值输入之后的话呢,我可以在这个里边把这个保存到数据库里边,同时啊,在这个页面把这个信息显示出来,那我们看下面这个步骤应该怎么写呢?则第一个。
13:13
我们的获取请求参数第二个呢。我需要保存数据库里边的话,我不能一个字段一个字段保保存吧,应一条记录吧,是吧,对封装,把请求信息封装为一个包,这样子一下。三哎,执行保存操作四我们需要上另外一个页面来显示一个一个属性的话,我们当然要是这个转发的话,我们可以直接调power点什么什么吧,对吧,因为同一个请求嘛,但是我们想用这个呃,预对象里边对象的属性的方式,所以说我们把。
14:02
Product对象保存到数据库中啊,保存到好request中,然后的话你到页面上再进行显示,就是为什么这么做呀,我们为什么不用EL直接显示啊,用E直接显示它是什么样。它亮。点,然后而我现在我希望换成什么样啊,希望换成这样。Request sco.product.product要换成这样,我为什么需要换?那么首先我们这个需求的话,你这么写也没啥问题吧,但是我需要显示的时候,我这块我是不是一个保存超出来,哎,我需要显示的时候的话呢,我把那个ID也显示上,懂这意思吧。
15:08
而这个ID我执行完这个保存操作之后的话,我是不是可以获取到这个ID呀,那你这个时候你ID怎么办?ID我是没有办法。在请求参数里面获取的,所以说这个时候的话呢,一般而言,把这个对象我们都放到这个,呃,请求域里边,所以说我们这样做,那获取吧,先写个if。Product。Dave。Five equals。走了个pass。二第一个获取请求参数。这些上。Get pro。
16:09
Nice。再来。写完啊,找一个对象出来,我创建一个product。啊,三个属性,实际上我们还可以写一个ID是吧。
17:09
搞定好了对应的概算方法。我为了为属性赋值方便的话,我们来写代餐的后照器,但是写代餐的是不是要一定要写个无餐的呀,为什么呀,有个反射用法合并。回来。一个对象,然两个字。等于new products。
18:00
搞定吧,然后的话呢,执行一个保存操作。Save product。重重写一个顺,我们能够看得更清楚一点。然后呢,保存操作的话呢,我们这块就不保存了哈,在我们为它属性赋一个值,为它这个ID赋一个值,在ID,比方说我们负个1001里边写的哈,然后给它放到这个请求域里边。Que set product product,同时确定这个path式。Web info。目录下的pages下边的details。
19:00
在这个页面上details少了一个L。让这个页面上。来显示商品的详细信息。哎。一宫显地位,好啊。描述。大哥。
20:01
OK,好一个。Debug debug吧,啊,没什么影响,来我们写一个名字啊,CPU。奥数英特尔CPU现在旗舰的CPU多少钱?题就是这个好的CP。比方说一万二这个一千二是吧,这块我们是不是可以显示了,我也执行了这个保存操作,我们看这个效果的话呢,也没问题,哎,这就是我们用filter来作为controller的一个小程序,我们再回到我们这个控制器里边来,我们看这里边大部分代码的话呢,跟我们写那个S那个代码差不多,同学说老师写service的时候,你可以去调一一个一个方法呀,我们这我们这里边我们是不是也可以呀,你写个问号麦等于什么麦,一获取一反射,是不是也可以去调一个一个方法呀,啊没问题。
21:08
好了,这个程序的话呢,跑得通了,我们通过这样的一个程序的话呢,有一个结论就是啊,我确实可以用filter来做控制器,好了,光有这个结论呢,咱并不满足是吧。就是刚才的这个,嗯,目录结构我们已经写完了啊。我们写的这个VR pattern叫action,我们使用filter,这个好处呢,就是这个filter本身是一个过滤器,它可以方便的。对所有资源的访问进行控制,这是过滤器本身的一个特性。好了,问一个问题吧,跟filter比。哪一个功能更强呢?为什么说更更强?呃,我们要说两点,第一点,Serve能干的future都可以干是吧?我们为什么这么说呢?你看API吧,或在service里边我有什么东西啊?Request response service con service context吧,这些我们在filter里边是不是全有啊?Filter里边那叫future con吧,这是跟service con相对应的吧,Will request吧,Will response吧,有request我可以获取session吧,我可以获取application吧,就是service context。所以说service能干的future都能干,那反过来future能干的service都可以完成吗?嗯,这个呀,却不一定,因为拦拦截资源并不是service所。
22:59
擅长的里边有个filter chain,这个是service API里边没有的,所以说你要讲拦截资源的话,肯定filter更更加擅长,所以说我们在这个呃,做control的时候的话呢,我们完全可以使用filter来作为我们这个controller啊,这个是。
23:22
没问题的,对,我们讲这这段小程序的目的就是告诉大家啊,Filter可以干这个事,而且我们把这个filter跟so来做一个对比,那下边讲stra to的话,To正式使用这个filter来作为的重要控制器,这是跟RU1跟spring mvc非常大的一个不同。
我来说两句