00:00
来看我屏幕,我先把我们昨天这个项目啊,我现在复制一遍,应该是前天是吧,CTRLC拷贝一份CTRLV。好,我称之为叫PROJECT10,我们今天我们今天的知识点的任务不多。但是今天呢,无论如何,我们需要把这个项目,第一我们需要把这个项目的功能把它做掉,这是一个很简单的一个单表的一个系统啊,我们需要把它的功能把它实现掉,第二,在实现它的功能的基础之上,我要对它的结构做一点点小的优化。那么这个第二点呢,是一个难点啊,所以希望大家能够认真的去听。好,我就称之为叫flu1.5。好,我把这个项目复制了一份是吧,你看我的操作,我把这项目复制了一份,所以大家在练习的时候,你也按照这样的方式,你把你自己的项目把它复制一份。复制完之后呢,你看啊,上面这些都是加粗的。啊,这个它没有加粗。
01:01
加粗说明这些model全部都已经加入到当前的project当中去了。而这个没有加粗的说明它不在当前的project下面。好。那么我需要把我当前这个把它加到当前的这个project当中去。那当然第一步。第一步,我们这边有个叫imp文件,这是我们idea当中一个项目,或者一个model。它有的一个配置文件,它具有的一个配置文件,这文件大家不需要看懂,总之你只需要知道当前我这个model所具备的啊所idea所。需要的一个配置文件就是它,那你大家看一下这个名字是不是和他还不一致哦。因为我是直接把这个项目拷贝过来的嘛,直接复制了一份,所以它里面的内容是一模一样的啊,建议大家把这个名字一定要把它改掉,所以我们选中它,大家的快捷键应该是shift加F6啊,我这边改掉了,我这边是al shift加R,这是以前eclipse那个eclipse上面的这个快捷键啊,CTRLC。
02:08
然后呢,我到这边来,在alt shift r重命名一下,CTRLV把它粘进来。然后。好,这样我就把名字改成一致了,那么下面一步,我要把这个model加到当前这个project当中去。点他。Project structure。好,我找到model。然后你看一下这边是不是零幺到零九啊,它就没有幺零,所以呢,我就在这边新建点一个import model,导入一个model。然后呢,我要选择。幺零这一项是吧,同学们,我找到MPL找到它,然后点击OK,诶,这样我就把它加进来了。加进来之后,你看一下他这边的依赖是不是依赖,这些都在,因为这些依赖关系,我们在配置文件里面有描述,而配置文件里面里面的内容我们都没改啊,零九里面早就配好了,所以他这边也能自动的识别。
03:03
好点一下应用。点一下OK,你看它是不是也加粗了呀,而且里面的小图标这是蓝颜色的,这个带个小蓝色的一个点啊,说明它都能够把它识别过来没问题。那行,我们回顾一下我们上一次课所讲的内容。上一次课呢,首先我们讲的第一个叫设置编码。第一个我们讲的叫设置编码,我们设置的是post方式的编码是吧,同学们。这是幺零,幺零呢,我来新建一个read me啊。那第一个部分我们先先复习一下啊,我们上一节课所说的内容。第一个我们是设置编码,那这个指的是post方式。Post提交方式下的设置编码,防止中文,防止中文乱码是吧?同学们,我们使用了一句话叫request。
04:03
点set character。UTF杠八是吧,同学们,我们是这么去做的。啊,那么get方式想。Get提交方式。Get提交方式,TOMCAD8啊,开始编码,不需要设置。是吧,编码不需要设置,那么Tom get把之前啊get方式设置啊。较麻烦,我们就写个稍微一些麻烦嘛,比较麻烦。怎么设置的呢?第一步,比如说我先获取get parameter。好,FM我先获取到,获取到之后我要去先去打散了,叫get ISO-8859杠幺啊,这个细节我就不再去给大家去去说的太太细了。我们早期的时候,他们盖的,或者说他们盖的八之前嘛,啊,我们里面配置文件,配置文件当所配置的编码方式用的是它。
05:05
所以呢,我们要把这个我们所获取到的这些字符串呀,再重新还原成这个编码,以这个编码的方式打散成字节数组。叫bites。稍等啊。是吧,把它打散的字节数组,然后再重新组装。FM等于U,在新的编码格式进行组装。是吧,同学们。啊,所以说这个方式稍微麻烦一些,当前我们使用的通盖是八,或者大家使用8.5也可以。啊,那这样的话,我们get的方式大家可以暂时先不用理会。当然了,编码的方式,其实我们解决的方案有很多。比如说我们还可以通过去修改通开的一些配置文件,配置文件当中有些设置信息,我们可以去修改它的编码方式。啊,所以说大家如果碰到具体的问题的时候,我们再具体分析。
06:01
碰到问题大家可以尝试的啊,模仿老师的方式去进行百度。不是说让大家去死记硬背百度的关键字是什么,而是模仿当我们碰到某一个问题的时候,老师是怎么去考虑这个百度的搜索的关键字的。啊,通过多多模仿几次,多看几次,慢慢的大家这个使用搜索引擎啊,应该会搜索信息应该会更准确一些。那行吧,这是第一种提交这个设置编码的方式。再来。那么我们讲的第二个问题。我们讲的第二个问题是我们当中的叫继承关系。以及我们主要讲了它的一个service方法。还有它的生命周期。第二个。继承关系。以及生命周期。这是我们讲的第二个知识点,第一个它的继承关系是这样的,首先我们有个接口叫。
07:02
是吧,这个这当中有三个核心的方法,一个叫in。一个叫,一个叫destroy。是吧,同学们,它有三个核心的方法,分别对应我们生命周期的三个阶段。初始化阶段。服务阶段以及销毁阶段是吧?同学们分别对应三个阶段。然后呢,我们在这个接口下面,我们有一个抽象的实现类。叫generic。抽象子类是吧。他帮我们去实现了init的方法以及destroy方法,然后呢,还留下一个abstract。Service方法。没错吧,这个方法他是没有去实现的。其他的方法他都给我们实现了。那么再往下一级,我们有HTTP这个抽象的子类。它是不是又是generic下面的抽象值了呀?
08:00
那虽然说它是出现了子类,但是它是不是帮我们实现了色子方法呀?实现了service方法。啊,在service方法。内部。通过什么呢?request.get method。来判断啊,来判断请求的方式。是吧,然后。我把这个最大化啊。然后。来判断请求的方式。然后根据请求的方式去调用内部的。度方法。是不是?有印象吗?Do方法?啊。那么每一个。每一个度方法啊,每一个度方法进行了实现。
09:00
主要是啊,其实进进行了一个简单实现吧,进行了简单实现,当然钙的方法比较特殊啊,正常情况下它的多方法都进行了一个简单的实现啊,主要是什么呢?主要是。如果请求方式不符合,则报。4405。错误。他就简单做了这么一个实现是吧,然后呢,目的是让我们啊,让我们目的是让我们的这个叫让我们的。之类。去重写。对应的方法是吧,如果啊,也就是说如果重写的不对啊,重写的不对则。使用负类的405错误时间是吧,哎,能能听懂我说这个话吧,这话可能这个不解释,可能这个有有毛病啊,就是复类里面用的是405的那个报405错误的那个实现方式吗?如果你没有重写,那不就定用复类里面的嘛,所以大家在页面上就能看到405了。
10:04
如果你能够把它重写对了,那你就写你的业务规则。哎,这是这样的。这是他的一个继承关系。好。第二个呢?第二个呢,我们讲的是生命周期。生命周期。那么生命周期呢?啊,生命周期我们说了,它有初始旺。初始化。服务以及销毁,准确的讲,他第一个阶段叫实例化。只不过这个实例化,同学们不是我们程序员去对这个进行六的。而是通盖的帮我们去溜的。对吧,我们只管负责去重写它内部的度方度方法就可以了。啊,包括这个方法的调用,服务方法的调用,也不是我们调用的,也是他们去调用的。因此啊,因此我们说了。
11:01
好,我们把它写在这啊,第一个Tom cat。负责。维护。斯实力的生命周期,这是第一句话。第二句话是。啊,每一个每一个斯。在tomcat。容器中只有一个实例。是吧,只有一个实例。就是这样的啊,它是线程不安全的,还有印象吗?它是线程不安全的,你不能说第一个用户过来请求把我的某一个程序变量改了。啊,第二个请求对吧,他过来要依据这个成员变量,要做一些业务判断,那这样的方式是不妥的,是不妥当的。第三个呢,我们介绍了一下,它的一个叫启动时机。的启动时机。我们通过一个叫load on。
12:02
Startup有印象吗?同学们,我们通过漏洞startup这个标签啊来来设置它的启动时机,数字越小它越提前启动,那么它的最小值是零。当然当然了,我们生命周期当中的这个初始化方法,我们还没有去。细致的去讲,大家先不用着急。后面呢,我们会在。某一个地方啊,不得不讲,因为我们需要通过这个初始方法,要去做一些事情啊,要有它的一个应用,所以呢,我们就必须得细去细讲这个初始化。啊,现在去讲的话,大家可能还不知道怎么去用啊,仅仅是一个理论知识,所以呢,大家先不用担心啊,会讲的。这是我们所说的,这个叫生命周期,当然了,我们这个也给大家说了,斯从3.0版本开始,3.0开始支持注解。我们是支持注解的,所以我们就有了一个叫at web。
13:03
没错吧,同学们,哎,就是这个。那么具体的这个在我们在我们web.X文件当中怎么去配置,咱们就不说了,行不行同学们。啊,就不在这边写了,OK。再往下,我们讲的是叫HTP协议。第三个,我们说的是HTTP协议。那么这个HTP协议呢?我们有两部分组成。好,第一。有两部分。由。Request。和。Response。啊,两部分组成。就这样的。然后我们的请求啊,请求包含了三部分。第一个叫请求行。第二个叫请求消息图。是吧,第三个叫请求主体。
14:00
哎,就是这样的。我们在请求行当中,我们能知道我们请求的方式,你到底是get呀,还是post呀。你请求的URL地址是什么?对吧。包括请求的消息图,诶请求的消息图里面就是我们浏览器给服务器发请求的时候,要告诉服务器的一些信息。其中也包含了我们浏览器的一些版本信息等等。如果我们是get的方式,那么请求主体是没有的。如果我们用的是post方式,那么我们的请求主体它对应的是叫form data。如果我们是Jason格式发送数据的,它对应的一个叫pay漏的。啊,叫请求负载叫request。Request payload。啊叫请求负载。如果我们是普通的get方式,它对应的是叫corry。啊,其实它对应的是三种方式。
15:02
啊,这是请求主体。这是普通的。Get方式。钙的方式敬酒。这样吧,写个斜杠啊。这是第一个。那么第二个是post。方式。好,它对应的是叫form data。那么第三个是叫杰森格式。啊,Jason格式请求。它对应的是叫请求负载啊,当然Jason格式咱们还没学呢,不着急啊。好,这是请求它所包含的三个部分。那么还有响应,响应其实也包含了三个部分。第一个响应好。第二个响应消息图。第三个响应的主体是吧,同学们,哎,就是这样。那么后面我就不再去详细的去阐述了,再往下走。下面呢,我们学习的是筛选的叫绘画跟踪技术,以及筛选的叫保存作用域。
16:06
筛选,我们叫HTTP筛选。首先第一个是它的概念。HTTP筛选。表示绘画。是吧,它表示的是一次绘画。就像我们正常情况下,比如说你去某一个旅游景点,你买了张门票,那么你进入到公园,表示你的这个绘画开始。一直到你出的这个公园。啊,或者是人家公园当天人家已经营业结束了,人家闭园是吧,那你这个绘画就结束了。或者咱们去,比如说我们去医院看病。从你挂号啊,当天你挂号了,那这个会话就开始了。那一直当你看完病出了医院,或者是今天啊,这个医院这个这个这个结束了是吧,这个停停业了,明天啊,到第二天的时候,你估计得重新挂号。啊,表示你绘画结束。或者你去电影院看电影,你买了张电影票啊,你进电影院开始看电影了,绘画开始,这电影看完了,出来了,这票就失效了。
17:06
是吧?同学们,这表示的是一次绘画。那么我们要搞清楚,我们为什么需要辉煌。为什么需要HTB线?为什么?原因是因为HTTP协议。是无状态的。是吧?同学们,什么叫无状态?无状态指的是默认情况下,我们的服务机端无法区分两次请求是来源于同一个客户端还是不同的客户端。他没有办法区分开,所以我们才有个叫HTTP筛选。那么我们HTP筛选里面有个叫三项ID。你第一次发请求服务器去获取你的三加ID没有?没有怎么办?伏击就认为你是第一次访问我。那么我就给你创造一个唯一的一个三星ID,然后我通过一个叫cookie的方式悄悄的交给客户端。那么下一次客户端再给我发请求的时候,会把这个三星ID带过来。
18:01
带过来之后,我们服务器能获取到这个三项ID。如果这个三下ID你没有失效。是一个合理的赛项ID,那我就认为诶,你之前什么什么访访,什么时候访问过我,我就能和之前的请求能够连接上啊,能够能够能够联系上,对吧,能够判断出。那如果说你没有给我发筛选,或者你给我发的筛选是一个无效的筛选,能听懂吗?都表示你是个新的请求。啊,就是这样的好。那么第三个我们说的是叫三项保证作用域。三线保存中域那么三线保存中域它指的是在一次绘画范围都有效,绘画范围都有效。啊,它指的是一个保存作用域。三线保存率,想象一下我们画了这个图,他表示在我们服务器端,我们有个内存空间,你这次会话开始了,我往这个保存中里面保存一些数据,只要我这个会话不结束,我访问任何的页面,我都可以在其他的地方通过筛选保存中域能够get attribu。
19:05
是不是能够获取到里面保存的信息啊?所以我们有两个API,一个叫先点set attribute key和value。第二个叫点get attribute叫key就可以了,是吧?同学们,那么这个方法它是VO的类型,那我们想说的是后面这个方法它给我们返回的是object。这是我们筛选它的这个叫保住用域,当然我们还学了他的其他的一些API。啊,比如说比如说我们写一下啊其他的API。比如说我们有获取ID的。三线点get ID。啊三选点IS6。是否是新的啊?三线点什么get creation time。啊,Time这个单词拼写我不知道对不对啊。
20:00
因为这边是这边是直接写的啊,它没有提示。啊,总之就是一个创建时间是吧,还有什么last access什么什么。上一次访问时间等等等等是吧?那么当然还有一个重要的方法啊,虽然我们还没用,但是大家要先留个印象,叫inval。是不是强制性让某一个筛选会话失效?I invited it。啊,虽然还没有应用啊,但是大家先先先听一遍。等等。这是我们绘画。再来,紧接着呢,我们讲的是服务阶段的转发和客户端重定向这两个API。服务器端转发和客户端。重定向。我们讲的是两个API,第一个我们指的是服务端。转发。服务器端转发啊,有些时候我们称之为叫服务器端内部跳转也行。
21:02
我们使用的是叫request.get request dispat。啊,比如说我要请求啊,请求index index.ht意思一下啊,就随便写一个forward。Request response。嗯,就这样子。那这个API大家不要死记硬背,大家看到这句话,你要能想到我画的那个图。首先我们一个请求发给第一个组件。然后第一个组件在服务器内部就把这个请求悄悄的转给第二个组件了。是吧,同学们一定要记住这个图。这是服务极端转发。第二个叫客户端重定向。客户端。重定向。它指的是response.send redirect。那这两者是有差别的,这种是什么?这种是请求发给第一个组件,第一个组件里面出现了这句话,出现这句话就表示第一个组件会立即响应给客户端,说请你再发第二次请求给这个组件。
22:07
所以它是两次请求响应。是吧,同学们,所以。下面这个方式,我们浏览器地址栏是有变化的啊,上面这个方式浏览器的地址呢,是没有变化的,还停留在第一个组件的名称上面。没错吧,好。然后呢,紧接着呢,我们讲的是最后一个知识点叫time Le,当然time Le呢,我们从应用的角度,从我们实现项目功能的角度啊,我们讲了它里面的部分标签。当然,Time。我们使用的步骤。使用步骤。第一个。添加家暴。是吧,他总共有六个家暴添加家暴。第二个。第二个,我们要去新建,叫view best,但名字当然了,名字不一定非得叫这个名字。
23:03
啊,只不过这个名字呢,我们在课件里面,我们就叫view best,那大家直接拷贝过来就可以了啊,新建这个view,我们新建这个它的目的是什么?它的目的是因为它里面有两个方法。有两个方法。我们主要的就是想用体重的两个方法啊。那么第三步我们要去配置。配置什么呢?配置两个叫。啊,叫上下文参数。为什么要配置两个呢?第一个。第一个叫什么?是不是叫前缀啊?第一个要前缀。X是吧,第二个叫X。对吧,叫好就这样的。
24:01
为什么要配置这两个?因为我们有两个方法,其中我们有一个方法,他就会给我去读这两个参数。他其实这个方法的内部细节是读这两个参数,然后他会给我去创建出一个叫所谓的叫引擎,叫安。然后根据这个引擎呢,再去执行,诶去渲染我们的页面啊,它这个内部细节大家可以暂时先不用管。还有另外一个方法叫process template。那么这个方法是我们后面的子类是需要调用的。我们后面的词类是不是要继承view呀?对吧,然后我们要用他的叫的这个方法。OK。这是我们。这是我们template当中的使用的一个步骤,那么它里面有些标签。我们学的部分标签。第一个我们学的TH冒号if吧。然后呢,我们还学的,呃,TH冒号叫unless。
25:03
表示否则的意思是吧,好像我们还学了,哎,义气表现。表示迭代码。然后呢,我们一个TDTD的叫内部的文本。给内部的文本复制,哎,我们学的是一个text。就是这样啊,这是我们所学的部分标签,那么我们通过这几个标签呢,诶,我们就把这个库存系统的首页把它展示出来了。好了,这是我们上一次课所所所所讲的这个内容,OK。
我来说两句