00:00
我们这个web啊go web呢,里边讲的内容呢,讲的知识点呢很少啊,就是为了这个,呃,完成我们这个项目,我们这个书城项目,我们这个书生项目呢,也很简单,嗯,就是为了把你们之前这个学的够技术里边学的啊,像什么切片啊,结构啊,包括这个呃,其他的一些啊,呃,怎么转换等等啊,就是为了把之前的内容呢给练一下,在这个我们这个书城项目上练一下,而且这里边呢,其实你像上午我们说的这个购物车这一块。我们是这个最后呢,创建了一个结构体,其实呢,这块你用map也可以,你们你们这个基础里边呢,也讲map了,对吧,你创建一个map呢,把这三个值放进去,嗯,这个也可以啊,你放进之后呢,把这个map转换成一个阶子也是可以的,我们在这个前台呢,用这个对象点属性也能拿到这个总数量啊,总金额,还有这个金额小计,所以这块啊,这个方式不止这一种啊,还你还可以这个自己创建一个map,那这个呃,因为我们这一块啊,这个项目呢,是很简单的,就后期呢,你们这个周五啊那一天左岩老师也给大家说了,你们后边还有一个大的项目,所以呢,我们这个外国这个项目就相当于让你热热身,相当于让你练一下,我现在练一下啊,把这个之前的内容呢,你能把它比如这个,呃,把它练的比较熟了,后边呢,有这个大的勾项目的时候,诶,那个才是真正的一个项目,而且我们这块你就可以认为你这个说难听一点,你就可以认为是一个练习啊,就是为了把之前的内容呢好好的练一下。
01:33
那下面啊,我们就把这个。呃,我们这个这几天以来啊,这个针对于我们,呃,这个书生项目里边说讲的一些内容啊,我们再把它给串一下,这个简介呢,就不说了啊什么呢,应用简介,包括这个什么这个工作原理,现在这个图应该都能看懂了啊,我们这已经写了好多了,对数据库的操作对吧?请求过来之后呢,到达我们的多路复用器,哎,我们现在一直用的是那个默认的,因为我们这个less and serve监听端口的时候呢,传的就是都是那个new对吧,都用的默认的啊,然后默的呢,这个它去调用对应的一个处理器,哎,就这个我们写了好多什么user的呀,Book的呀,Cast呀,Word的呀,啊好多,那这个调用处理器之后呢,诶,这个从数据库里边拿到这个模型,比如呢,我要得到所有的用户,得到所有的订单,得到所有的图书,拿到模型之后呢,诶,由我们这个模板引擎来这个解析这个模板文件,你像那个HL文件,我们现在用的都是HL文件,哎,这个拿到这个模板文件之后呢,还有这个模型啊,跟这个模型比如把他们这个你可以认为。
02:36
绑定在一起啊,最终呢,有那个response writer,哎,这个想象到我们这个前台,那前台呢,我们怎么来得到的呢?就是用这个动作,那么下边讲的啊,在模板引擎里边呢,有动作两个大括号之间那些啊,通过它来在页面上给大家呈现出来,这是这个原理啊,那这个hello word呢,就是怎么来双线处理器了。下边这个hello word这块啊,这个这是我们第一天写的这个,哎,用这个handle Fung或者是handle,哎都可以啊,那这一块呢,就涉及到这个处理这个创建服务器的这个呃,方式了啊方式了就是下边我们这块要说的啊,服务器的一个创建,这里面呢,涉及到了几个函数,一个是lesson and serve,就是监听端口号的啊,以及这个后边传一个这个处理器,如果要不传的话,就是默认的这个多路复用器啊,默认的就是defpot server max,就是这个默认的这个多路控技,这些你了解一下就行啊,我们这个里边讲的内容,这个讲的这些基本上都是我们这个书中项目上用到的内容,所以呢,要求你掌握的呢,你一定要把它给掌握了,虽然后期呢,你们写那个构造大的项目可能要用框架,但是呢,框架的底层呢,最终要还是是我们最基础的一些内容啊,如果你要比如看到那个源码,他把这些东西比如封装了,因个框架用起来肯定要比这个要要好用,对吧?诶但是呢,他这个底层把这些东西给你封装了一下,说白了人家写了一些函数把你这东西。
03:56
给你包起来了啊,所以呢,你要往底层这个一直看源码的话,你也得看到,如果要认识啊,都是我们这个最基础的一些内容。
04:05
当然啊,这个我们在less and serve的时候呢,后边这个多路服务器我们也可以自己创建,就用这个new server max这个函数来创建就可以了,这个你了解一下情啊,我们这个,哎,这个书城项目写到这个上午啊,你也发现了,我们这个都是用的调的哪一个函数啊。是不是都是我们这个hello,这种方式的。对吧?哎,都是这种方式的啊,我们写的都是这种方式的,直接调的是HTP的handle fun,哎后边这前面是一个映射的一个请求的地址,后边是一个处理器函数,哎,处理器函数这是这一种,哎我们几个一直用的是它还有其他的方式,哎其他方式你可以调一个这种方式,我们先说一下它的原理,嗯,这个用HDB.hand fun呢,前面是一个映射的一个地址,后边是一个处理器函数啊处理器函数,但是这个处理器函数它有要求,这个里边这个参数啊,就是这个签参数签名是固定的,不能乱写,对吧,不像我们写的普通的函数,这里边什么我们像差不多数字库的,那也有传什么字符串的,传这一个一个什么结构,结构实例的等等啊,这里边呢,只能传这个HTV,点一个respond write,还有一个HTv.request个指针,哎,为什么要这个有这个要求,因为你写的这个函数啊,这个handle fun呢,它能自动的帮你转换成这个处理器,哎,能帮你来转换这个处理器啊,这个它的唯一的要求就是你这个签名跟我处理器。
05:27
里面那个serve,呃,Serve这个serve hb那个呃方法里边那个前面一致就可以了,所以啊,我们用的这种,那还有一种方式,哎,就是直接调这个憨豆方法,哎调handle方法呢,前面也是传一个这个处理器的这个映射的一个地址,但是后边呢。就得传一个处理器了,那么怎么什么样的这个,呃,什么才是一个处理器呢?它需要实现一个serve htp这个呃,方法就是一个handle handle啊,这个接口里边啊,接口里边的一个方法,需要实现那个接口啊,实现那个接口,因为你实现的那个方法就相当于实现那个接口了,就是我们服务器创建的这个,下边说的这种啊,使用默认那个多容服控器啊,这是我们这个啊hello word啊hello word里边的那个啊还有啊,就是调这个方法啊,咱能默认的帮我们来转换啊,转换这些呢,都不看了啊还有第二种,哎,我们就用这个处理器啊,用处理器来处理请求,我们写了一个结构,哎,比如my handle了,然后下边呢,我们这个写了一个这个方法,My handler一个方法,这个方法文叫SERVE2HTP,哎,这个呢,就是我们那个handler接口里边的一个方法,实现了这个方法就相当于实现了那个接口,那也就意味着你这个函数呢,它就是一个处理器,它就能帮我们来处理请求,诶所以呢,在下边我们就这个创建了一个它的实例,然后呢,就直接调这个handle这个。
06:44
函数,嗯,映射一下这个地址后边呢,就是用我们自己写的这个处理器了,这个处理器就是我们实现了serve serve htp方法的这一个,呃呃,买handle这个方法,这是这也是一种啊,可以处理我们请求的,但是这里边传的也是new啊,也是用的一个默认的一个多路复用器,下面呢,也把这个handle这个呃函数呢,给大家这个解图截出来了啊,包括这个handle的这个解构啊,也给大家这个截到这了,哎,里边呢有个serve htb,哎这个方法就说你的这个结构只要实现了这个方法,相当于实现这个接口,那么它就是一个处理器,所以啊,那这个呃。
07:21
这个说了这么多啊,说了这么多,这个比也可以用这个处理器函数处理请求,也可以用这个呃处理器来处理请求,所以呢啊,这个你这个要明白的就是呢。这个如果你要用处理器有这个处理请求,你这个处理器,诶它要是这个处理器的话,这个里边的这个函数里边这个参数诶是什么你要知道,诶它必须得实现那个handle里边那个那个方法,SOH方法,诶这个你要知道啊,所以呢,也就是说怎么来创建一个处理器这种方式,哎,你得这个哎把它给掌握了,如果你要用这个处理器来处理请求的话,当然啊,诶你也可以用这个呃处理器哈,这个啊函数来处理请求,那在这个时候啊,这个用处理器处理请求跟用处理器函数处理请求,它调的这个啊函数呢,或者调的这个函数也是不一样的,如果用处理器来处理的话,是调的是handle这个函数,哎,如果要用处理器这个方法的话,用的是handle fun那个,所以这两个啊,你不要把它给混淆了就可以啊,不要混淆了就可以,不过我们这个,哎呀,我也也是个人的习惯啊,我习惯我我习惯用掉这个handle fun,直接写一个处理器函数就可以了啊了,而且呢,这个用它默认那个多了就。
08:32
就行了,当然啊,如果你想这个设置一个服务器的一些比如详细的信息,我们也可以这个创建一个server,下边也给大家列列出来了啊,配置这个详细的信息,这是serve的一个结构,可以配置这一个你要监听的端口号,要调的这个处理器,包括什么读超时的时间,写超时的时间,还有下边这好多啊,都可以设置,都可以设置下边这个例子呢,就是啊,这个对这个server啊,这个进行详细的配置,什么读的这个超时时间,当然了下边的也可以啊,那这个时候呢,你在调listen and server的时候,就直接用这个server了,就不是我们那个HTTB里边那个啊那个函数了,就是我们server这个结构里边的这个lesson and server了,因为你在这个server里边配显数信息了,所以呢,你直接通过它来调这个就行了,诶这里边这个端口在这里边已经指定过了啊,建立一个端口好,当然了,我们还可以使用这个自己创建的这个就了解一下就行了啊,诶所以诶也就是说这个通过第二章啊,你要知道诶怎么。
09:27
如果我要通过处理器来处理请求话,哎,我这个代码应该怎么写,也就怎么来这个创建,这个服务器怎么来创建,如果要处理器函数来处理请求的话,哎,这个服务器怎么来创建,所以啊,这个呢是要求你掌握的啊,使用多路分务器,这个你就了解一下就可以了,哎,自己用一个s max,然后呢,调这个,哎呃,Handle fun里边传一个这个处理器,或者处理传一个处理器函数,然下边就是里边传一下不是new了啊,就是我们自己的那个呃,Max多路服务器,这是这个s max的一个结构啊,一个结构。
10:01
那再往下,再往下就是我们说了这个HTP的一个协议。H这个协议,呃,你要知道这个协议是干啥的,呃,这个浏览器跟服务器它两个之间交互,就是它两个之间那个传输的那个内容啊,它两个之间通信的内容,我们就这个,哎,叫豹文这个你要知道啊,它两个之间,诶还有这个协议是干啥的啊,它就是规定了浏览器就是客户端跟服务器端它两个通信的规则,那我们生活中也一样,生活中呢,都说嘛,无规矩不成方圆,你生活里边呢,像法律什么都约束着我们,那么同样在网上也一样,你两个之间交互,这个交流发请求呢,你也要遵守一定的协议,就是我们这个HTDP协议,诶现在目前这个用的最多的就是1.1版本啊,1.1版本之前的是1.0,诶,包括现在也有这个安全的一个协议叫h2.0了,所以啊,这个呢,你要知道它是干啥的,哎,它是这个呃,规定浏览器跟服务器之间这个交互的一些规则的啊呃,另外呢,要知道浏览器也就是客户端跟服务给跟服务端,它两个之间通信的内容,我们称为豹文,诶这个诶要知道豹文包括豹文的格式。
11:05
哎,报恩分请求报恩,那什么是请求报恩,那这个时候客户端发给服务器端呢,叫请求报恩,因为客户要给这个服务器发请求码,然后服务器呢,给客户端发的呢叫响应报文,所以呢,这个诶你要知道啊,他两个谁是请求谁是这个响应,那么这个关于报文的格式,嗯,这块请求报文跟想象报文这个非常的类似,请求报文呢分请求行,请求头和请求体,请求行诶就是那个请求首行啊请求行和请求头,哎称为首部,首部就是这个豹纹的首部,哎请求行和请求头,然后呢,这个跟请求体之间呢,有一个空行,就是请求行请求头,空行下边是请求题,但是get请求没有请求题,诶所以啊这个呢,都是要大家掌握的啊,都是要知道的,就都就跟常识是一样的,诶请求行,请求投。
12:01
哎,空行,然后是请求体,这是豹纹的格式,哎,这个总总总的来说是豹纹的这个手部跟体,哎,手部跟体,手部跟这个体之间是有一个空行这个风格的,那这个手部分请求行和请求头,哎这个下边空行下边是T啊请求体,那这个盖的请求没有请求体,因为盖的请求发的请求的信息呢,在地址栏传过去的啊没有请求题,Posts请求才有请求题,那么响应报我们跟它类似,分为响应行,响应头和响应题也是一样,响应行响应头然后空行,哎这个下边是这个响应题,响应题下边这是这个绘画的方式啊,跟我们生活打电话什么都很类似,哎这个呃,四个步骤,先建链接,然后发请求,然后给响应,最后呢关链接是这个四个步骤啊,包括这个1.0和1.1的区别,其实就两个字,就是四个字啊,提高效率是吧,1.1比它这个提高了一个效率,然后再往下就是这个报文的格式了啊手部跟主题呃,中间是一个空行风格的,哎,请求行啊,这个你不用。
13:01
管它前面什么请求首行就就记这个黑色的字体就行了,分请求行,请求头,请求体,所以呢也比较好记啊,请求行请求头中间这个这个称为手部,这个称为体,中间呢有一个空行分格啊,另外就是get请求没有请求题这个这里边这些啊,为什么要知道这些啊,因为我们这个处理请求的时候呢,有有可能要获取请求头里边这些信息,所以呢你得知道诶这个哪些是请求头,所以呢这个也必须得了解啊,不了解啊这个处理请求之呢,哎,获取的时候就不知道怎么来获取了,哎,所以啊这是这一块,这是这个报文,哎,请求行请求头,请求底,这是请求报文,响应行是响应行,响应头,响象体就是响应报温。另外就是get请求没有请求T啊,Post请求才有请求T,另外这个呃也是啊,这个基本常识了,相当于这个响应状态码,响应状态码你这个这个什么一开头什么的啊,这些东西你不用诶这个什么把它都记住,但是那些常见的诶你要知道是啥意思,比如说。
14:01
什么404,比如以四开头的是是这个以四开头的就出现在这个客户端的一些这个错误,以五开头的是出现在服务器端的,你像那些常见的,呃也二开头的这个,呃常见的就是200了啊,就是OK,也是我们希望看到的,哎这个成功了,哎请求也成功了,显象也成功了,200就是绿色的啊,就是绿色的,如果它后边有那个圆点的话,就是绿色的一个圆点,就是我们希望看到的,那这个三三开头的有一个叫三。302啊,就是重定向的意思啊,重定向就是这个重定向怎么回事呢?呃,这个客户端向服务器端发请求之后呢,服务器,呃服务器没有直接给他响应,而是给他抛了一个状态码叫302,同时呢,在响应头上面会有一个location,一个属性,Location后边呢有个地址,然告诉他呢,再发送一个请求,所以啊这个是重定向,重定向还有一个就是四开头的这个状态码叫404,这个呢,哎也是常见的404呢,而且呢,这个想让404出现非常的简单,你这个发一个什么不存在的啊请求一个服务器里边就不不存在的一个内容的S就出现这个404了,就是not放的没有找到,诶有可能这个你前端发的这个请求,哎,这个地址可能写错了,或者说我服务器里边根本就没有这个东西,你想请楚的,所以然会出现这个404,还有这个五开头,就是服务器内部的一个错误,哎,可能这个你服务器后边诶,比如哪块一个代码写这个问题啊,出现了一个问题,诶所以啊,总之呢,只要这个四开头的肯定是客户端的一个问题啊,客户端出了一个错误,哎,出了这个五。
15:29
开头呢,就是服务器,哎,服务器这一段出的一个问题啊,出的问题还有就这个302好,再往下就这个操作数据库了,操作数据库里边其实呢,就是那几个方法啊,哎,我们来说一下操作之库呢,你要知道用的是我们这个database circle包里边的,哎,这个后边还有一个circle的一个driver,这个呢,你不用关心它,它里边是定义了一些规范,也相当于这个一些接口啊,接口嘛,不就相当于规范嘛,就是用来被实现的,所以啊,就相当于在它我们这个database circle这个Java这个八项面来给你定义了一些这个,呃,接口就是我就要连输据的一些相当于一些规范,那但是呢,这个他没有给你提供实现,也就是说官方没有提供我们这个具体的一个实现啊,所以啊,我们需要导入这个第三方的一个驱动,就是说白了就是这个实现啊,就是这个对driver包的一个实现啊,所以我们需要导第三方,也就是说我们这个操作驱据动呢,需要用到这个circle,哎,Database circle报下的一些方法,或者说一些函数,哎,这个驱动我们需要用第三方的,因为官方没有提供,哎,当然了,这个案我给。
16:29
大家发的是这个啊,Go-circle-driver这个下载一个my circle,你也可以用其他的啊,用其他的这个给大上面都可以下载给大家发的是这个啊,发的这个,那用它之后呢,下边啊这个。里边这个连数据库啊,用的是一个这个open方法库,点open传一下你要连的这个数据库,然后后边就是这个呃,一些详细的信息了啊这个呃,数据源的一个name啊,数据源name第一个是driver name就是一个这个驱动的一个名字,我要连这个MYSQ了,后边这个data source name这个格式也注意了啊,前面呢是这个用户名,然后一个冒号,这个后边是一个密码,哎,如果这个你你不想这个写写的很详细,要连本机的话啊,直接艾特TCP,直接艾特斜杠test就可以了,诶如果你这个呃想连,比如想连其他人的,只要知道这个IP地址,艾特TCP里边呢,比如传一下192的什么什么,然后冒号,当然你还得知道它的端口号啊,把这个端号,因为如果要是默认的话,就是3306就可以连你这个其他人的这个数据库了,就这块这个格式啊,这格式要注意,然后中括号这个里边呢是可选的,可以没有,如果你要连的是本机的这个数据库,直接at斜杠加数据库名就可以了,如果要连的其他的。
17:42
这块呢,哎,需要有这个地址,把这个IP地址给它设置上就行了,就这块啊,调这个open方法,Open方法,然后其他的啊,其他的这个增删改查的操作啊,包助获取一行啊获取一条记录呢,这块呢啊,我们就直接打开我们这个官方文档来在这给大家说了啊,我看这个这边有一些方法诶也非常的简单啊。
18:04
你把这个打开。哎,标准库找到我们的database circle。点开。点开,诶这个DB里边啊这一个嗯,Open open这些不看了啊drive name,什么data source name这些我们刚刚说过了,哎这里边呢,这个有一个嗯,XQ的还有prepare,我们先这个prepare啊prepare哎这个上是预编译,一编译写完S口语句呢,诶这个诶调一下用DB.prepare片呢这个诶预编译一下,预编译之后呢,哎,它这个返回的是一个STMT这个结构,一个返回返回值啊返回一个它还有一个error,你写完S句呢,诶调这一个DB里边的prepare这个方法啊把S句传进去,诶它只实现这个预编译,预编译完之后呢,会有一个STMSTM这个结构,那这个有了这个结构啊,这块是什么?准备好的一个状态,可以被这安全的这个被多个勾程序同时使用,然后下面呢,这个预编译完之后呢,因为每个S口L语句里边有占位符,就是那个问号,所以呢,下面呢,我们需要这个这个执行并填充占位符了,哎,所以呢用这个。
19:15
调STM的里边这个SQ,哎这个方法啊,哎,那这个如果你要执行这个增删改的时候,哎,就调这个XQ的,就执行的那个意思啊,哎就调它,哎调它那这个返回道德类型那个状态,以及这个呃,执行那个结果,哎,如果这个比如你不想获取什么啊,直接比如对数据库进行增删改啊,这增删改的时候,这个删除啊,或者更新呢,或者是这个添加呀,添加完数据库里边直接用这个数据了,所以呢,这个你也可以不接触的啊,当然你也可以接收一下它啊,这里边这个道的这个type,这个接构啊,只是一个接口啊,接口里边有什么last in色的ID,有看看你这个最后插入的那个,呃,数据的这个ID也可以拿到,比如呢,你往数据库里边添加了一条记录,哎,我们的,但是这个有个前提条件,你那个数据库必须得支持这个自增,逐渐自增,你像我们现在的连的MYS,它支持比说刚开始可能这个数据库里边有一条记录,那个ID是一,我再插入一条,那个ID是不是该变成二了呀,对吧,那这时候。
20:16
说呢,你可以通过result所来拿到那个二有这个last inser的ID获取,这个ID也可以获取,也可以得到的啊,但是我们这个,呃,之前写这个项目时候没有用过它啊,没有用过它,因为我们没有拿过它啊,没有拿过它,这个拿过它也没什么用,对吧?那么当时啊,根据我们的在这也是啊,给你的需求啊,你可以拿,你可以获取啊,我们这个之前都是用一个下划线把这个给忽略掉了,有啊还有这个error error就不用多设了,那你这个填充完战号服这个执行完之后呢,其实数据库里边就有什么更新过了,或者删除了,或者是添加了,这是对于增删改,我们调这个方法,那么如果要我要查询。查询这块呢,涉及到两个方法,一个是查询一行,一个查询多行,如果你要查询一行啊,调的是快肉,哎,查询行,所以人家起的这方法名也一看就知道什么意思啊,所以呢也非常的简单,呃,查询一行之后呢,我把数据库里边一行查出来了,那每个字段下都有值,呃,这个值呢,我需要比如把它给读到这个结构体里边,所以呢啊需要调另外一个方法叫SC,就是扫描的意思。
21:19
在哪肉啊,找到我们这个肉啊。哎,这个快完肉之后呢,返回的是一个肉结构,点开它。点开它之后呢,这里边有个SC,嗯,就是扫描的意思啊,然后在这里边呢,这一个呃,可以把每行下查到的每行里边那个值呢给读到你这个结构体里边啊,结构体里边诶所以啊这块啊,这个这是这个查询一行,调一个这个query肉,然后呢再que肉之后呢,再干一下就能读了啊就能读了,如果要查询多行,嗯,调的是query query呢返回的是Rose Rose呢这块比那个多一步Rose,因为我要查询的是多行,下边有好多记录,嗯,那所以呢,这个你得一个一个的往下移动,所以这块呢需要写一个for循环,然后用Rose呢调一下这个next的方法,哎,什么呢?诶准备用于SC方法的下一行结果,也就是我扫完一行之后呢,还得扫第二行,所以呢,调next一直循环等,直到它扫到最后一行扫完,所以这块啊,诶这个查询一行啊,查询多行啊,包括增删改这个呢,都是要求你掌握的啊,要掌握的,那我们刚刚说的啊,都是调这一个,诶说的是。
22:28
带prepare带预编译的这个步骤,当然了,我们也可以不预编译是吧。直接执行,也就是说除了我们那个STM那个结构里边有这个执行,查询一行和查询多行,还有那个肉里边,肉里边就不用说了啊,肉里边都一样,这两个都一样,有什么扫描,还有这个next方法,肉里边有next方法,肉里边有扫描,肉里边也有扫描,但是肉里边,肉里边没有这个next啊,Rose里边有next,所以这些啊,你这个写了,如果你不想预变音也可以干什么呢?直接用这个DB。
23:01
它就比它多了一个参数,直接用DB调这个SQT,嗯,直接这个传色扣据,然后填充加va符,嗯直接就执行啊直接就执行了,也是执行这个这个删除更新和添加的一个操作,哎后边这伪绕什么就不看了啊下边呢,诶query也是一样,查询多行调,直接用调DB里边的query方法,S就传进去加va填充进去也就可以了,返回的也是Rose,那下边都一样调next的方法,然后呢,在next里边诶创建结构体,然后再看扫描就可以了,查询一行,哎,快入另外啊在这呢,嗯,这个prepare这个就不说了啊,在这呢,我们这个,因为我们这个书中项目上面呢,没有这个添加事物,所以呢这块啊,我们这个讲的时候也没有说事物,其实这个事物也简单啊,在这个DB里边呢,它有一个开启事物的方法,叫begin。在这你看啊,这块呢,有个begin begin这个哎就是什么呢?开启开启一个事物,哎开启一个事物,这个隔离就是隔离级别啊,隔离水平的由数据库这个驱动决定,就是你连的什么什么数据库,它的隔离级别是不一样的,MYSQ的隔离级别跟欧瑞的隔离级别也是不一样的,对吧?诶MYSQL呢。
24:08
哎,MYSQMYSQ的隔离级别高,还是欧瑞口的隔离级别高啊?MY对吧,MY格力基别你讲了吗。没有讲白色没讲吗。隔离级别。啊,那这个什么读已提交啊,读未提交啊,可重复读啊,序列化呀,那些东西知道吗。Oracle的支持,Oracle的支持两种是吧?哎,My circlel呢,支持四种,Oracle默认的隔离级别是读一提交是吧?哎,My circleq呢是可重复读,它比他的高一个级别,然后这个第一个级别就是这个什么呢?第一个级别啥呀。哎独未提交,哎独未调解,也就是说人家没有没有提交的数据你就可以得到,那这个时候啊,这就涉及到多个事物处理同一个同一个内容的时候啊,这块会出现问题,叫脏毒,呃,什么叫脏毒呢?这就涉及到。
25:07
没有电了。嗯。只有多个事物处理,处理同一个数据的时候,会出现一个问题啊,脏毒,因为这个如果你要把隔离级别设置的比较低,就有可能会出现脏毒,什么是脏毒呢?说简单一点就是咱两个同时操作一个数据,我读到了你这个,呃,更新但是还没有提交的数据,就是这个意思,比如呢,你的这个我们同时查看某一个学生的工资啊,假设他的工资就是本来是这个5000对吧?哎,5000,然后呢,你把他的工资更新成1万了,那这时候呢,你你在查这个值,哎,我也在查这个值,哎,我这个查到了是1万,但是呢,你又后悔了,你又回滚了,你一回滚那个那个数据是不是又回复成5000了,对吧?所以呢,你更新的那个1万对我来说就相当于没有意义的,那就叫脏读,也就是说你读到了别人更新,但是还没有提交的这个数据,这个就叫脏读,那如果你的隔离级别是读未提交,就是能读到人家没有提交的值,那这个呢,哎,就避免不。
26:16
还有这个藏毒,所以这个隔离级别就比较低啊,第二个什么呢,有一个读已提交。哎,读一提交这个就能避免藏毒了,也就只有人家提交的数据你才能读到,这叫读已经提交,读易提交吗?哎,所以啊,这个时候呢,就避免了那个藏毒,也就说你虽然更新了,但是你没有提交,我还是读不到你那个值,只有你提交之后我才能读到,所以这也是我们这个一般用这个啊,因为人家已经提交了,其实那个数据就是就是有有真实的啊真实的,所以呢,我们这个OA可能默认的这个就是这个,就是这个啊读一提交,那么my circle呢,下一个级别就是可重复读,可重复读这是my circle默认的一个个默认的一个啊这个呢,比那个读一提交还高一些,哎,还有刚刚说那个问题啊,有脏毒什么的,不可重复读,还有换读有这样几个问题,这样一个问题,这些这个你可下可以自己查一下啊,可以自己自己自己查一下,然后MYSQL的这个默认的是比这个读一提交更高一级别的叫可重复读,可重复都是怎么回事呢?也就是我在读这个时候相当于上了一把锁,我在读它的。
27:23
时呢,其他人对他的操作呢,不影响我这个事物的一个进行,我第一次读的比如是60,即使我第二次我这个事物没有完的话啊,我第二次我可能这一个事物里边有好读好几次,我第一次读的是60,然后在在我读第二次之间,可能另一个事误把它更新成70了,但是我第二次读的话呢,还是60,这叫可重复读,就是读的这个值是重复的嘛,哎,这个时候相当于我在我这个事物执行时候,相当于上了一把锁,你这个,嗯,其他其他人对他这个操作呢,是我是这个一个相当于其他人改不了这个值啊,这是可重复读最最后一个最高的级别叫序列化。
28:00
那这个序列化就相当于什么呢?要把整个表都上了一个锁,我在干这个操作这张表时,其他人不能动它,所以呢,这个隔离级别也不是越高越好啊,这个越高它就影响性能,所以呢,这块就得考虑你这个根据这个情况来定了,我们用的最多的就是这个独一提交啊,因为你要这是设最高序列化,你这个你这个干这个独字的时候,人家人得其他人不就得等着嘛,对吧?好了啊,在这块,那我们再来看啊,在这个勾里边怎么来开启事物,直接调这个begin方法就可以了。掉了比begin方法之后呢,这块就能开启一个事物,返回一个TX,我们来点开TX这里边呢,哎,其实跟我们之前那些方法都一样,哎都一样啊,也简单啊,掉了begin之后呢,你该该执行的执行,该查询的查询,该这个查询银行的查询一行什么该还有这个prepare,这个是这个预编译的啊预编译的,所以呢,下面的步骤都一样,只是呢,你这个有一个commit,就是提交,还有个back,就是回滚,诶你这个正常都执行完之后呢,你需要commit提交一下,然后back呢,就是如果出现什么呢,这个异常了什么的,需要roll back回滚一下,回滚一下就是这块啊这个TX啊,事物事物开启事物呢,直接用这个DB点一个begin就可以了,就开启了事物啊,就开启了事物调一个begin方法就行了,这是我们这块啊,这个对于数据库操作的时候涉及到的几个方法,诶再说一下第一个是open。
29:28
函啊啊函数open里边传一下你要连的这个数据库有my circle后边呢就是那个URL了,相当于那个driver data source一个name,就数据源那个名字啊,用户名,冒号密码,诶然后呢,艾特服诶这个诶艾特服之后呢,是什么呢?TCP括号,你的这个地址local house冒号3306括号,然后斜杠数据库名就是这个,然后下边呢,执行的时候,诶你这个呃执行增删改的时候调的是那个什么A这个这个这个这个读啥呀。
30:03
Excu是吧,哎,调的是这个,然后查一行的时候呢,调的是query肉,哎,查询多行的时候调的是query query,所以这些啊,你写了多是现在你这个肯定都记住了,对吧,然后长年一行的query之后,之后呢,你这个诶每行里边那些值呢,你需要扫描一下,所以呢调一下SC对吧?诶就是扫描的那个方法,那如果要查询多行的话,因为有多行,你这个只扫描还不行,下边的还得扫描,所以呢比它多一个方法叫next,所以这些方法涉及的也不多啊,不多相信你也能把它给记住啊,把它给掌握住,因为这个我们现在相当于练了一下,后期呢,你们肯定还要写这些内容啊内容,所以呢,这个要注意就是这一块啊,这个增删改以及获取一条记录,获取的条记录我们说说完了,另外呢,还有一个单元测试啊,这也是这个必须的,你这个开发的时候呢,写完一块,比如写了一个模块之后呢,你就需要测试一下,看有没有问题,其实这个东西在我们这个项目上线的时候,这个东西是没没用的,写的这个代码是吧,哎,没用的专门。
31:03
他之前帮我们测试那这个东西啊,就是你自己写的时候呢,也需要用的啊,单元测试这个单元测试呢,这里边啊,这个首先呢,我们说一下,你要背测这个单元测试的就是测试那个文件,必须得以下划线test,诶点go作为结尾,就是这个啊,就是这个啊文件这个测试文件的这个文件名啊,必须得下划线test点构结尾,前面那个无所谓,不过通常你测试谁就以什么什么,比如我要测试U的里边的这个方法或者函数,就是U的下限test点勾,哎,这是这个对这个后缀名的一个要求,另外还有这个,呃,测试这个。被测试这个文件啊,和这个测试文件呢,需要位于同一个包下,这个啊,这是两个要求啊,两个要求要在同一个包下,就是被测试的文件跟测试文件要在同一个包下,第二个就是要以下划线test group结尾,这是这两个按要求,另外就是在这个测试文件里边对这个测试函数的要求,测试函数呢必须以这个大写的test开头。
32:09
如果是小写的话,它默认是不执行的,默认是不执行的啊,因为你这个输入命令勾,还有这个命令,测试的命令是go test,如果你要这个想查看详细的一些go test的杠V,诶加一个杠V就可以了,那这个啊,在测试的时候默认它是找这个以大写的test开头的这个函数,小写的它是不会执行的,默认情况下啊,而且呢,对test后边这个,呃,Test后边这个单词呢,还是有要求的,Test后边这个单词的这个首字母必须得是26个英文字母的这个大写。所以这些啊,这些都是这个之前我们说过的,所以你以后写的话,你这个要注意啊,而且里边的参数是呃,Testing的一个test t的一个指针,哎,这是正常的啊,如果要benchmark的测试就是B,哎这个呃那个了啊,这是这个正常的,我们这个呃普通的一个测试,哎,就是这块这个测试函数,当然有同学说如果要写小写的行不行也可以,你可以什么呢?创建子测试程序,那子测程序你就可以小写字母,这个名称就无所谓了,但是呢,它默认是不会执行的,你要想它执行怎么办呢?你需要在test什么什么这个里边是不是用T调一下run。
33:26
对吧,调,然后呢,传一个字符片,那个传那个字符片写一个什么东西,那个是给我们程序员看的啊,后边呢,你写一下,你要调用那个方法太子什么什么,就是你写的那个小写的那个,呃,方法的一个函数的那个函数名就可以了啊就可以了,这是这块啊,对这个我们测试的文件的一个要求,哎,这当然啊,你还可以写一个什么呢?Testment主测试这个函数里边呢,是这个。嗯,M了,诶那那个呢,你可以干什么,在测试函数执行之前干一些其他的事情的话,你可以写那个啊,可以写那个函数叫test man是吧,里边传的这个就是那个M那个M那个下边这这个测试代码啊测试代码这现在哎就不多说了啊好,呃,再往下,那就是这个啊刚刚说的哎这个什么呢?M test.m test可以在什么呢?在测试方法。
34:18
测试函数执行之前,如果你想干一些其他的事情,可以写这样的一个函数叫test men,里边是M,什么testing.m那当然了,你这个,呃,在这里边呢,如果要执行测试程序的话,诶,这时候如果有一个testment,还有一个test,比如user,这时候呢,先执行它,哎,什么时候执行test test user,你还在这里边,用M调一下run这个方法才可以,按m.run才可以,好,这是这个操作数据库,那再往下呢,就是这个处理请求了。处理请求这块呢,用到我们那个结构是request request,那在这里边啊,就用到了我们前面的这个HTTP协议里边的内容了,那因为请求你发送请求的时候,请求报文里边有请求行,请求头和请求题,所以这里边啊,就有一些字段来获取我们里边对应的内容的这些信息,你看这里边啊,哎,这个method method,一看这个就知道什么意思是吧,获取什么呢?
35:14
请求的方式什么get请求啊,还是POS请求啊,就是这个master这个字段下边这个URL,诶URL类型的那个URL可以获取你,比如请求行里面那个请求地址,你发的一个请求是什么?比如这个你发了一个get请求,请求行里边有那个这个URL是什么啊,当然了,URL后边呃这一个呃,这个查询字符串,比如URL问号就是那个,比如test什么什么这个比如啊get u的问号什么U的ID等于什么,那个问号后边那个东西啊,就是查询字符串可以通过这个URL里边有个pass可以动,呃这个,那pass是地址啊,URL有一个什么呢?有个什么roll。Query是吧,那个字段啊,忘记了啊,这个点不开吧,啊对,哎,不能在这点是吧,不能在这点,我们那是一个图片,嗯,HTP。
36:04
Net htp点开找到我们的request。看这看,点开里边有个URL。点开了吗。好啊。点开,诶这是这个英文的,就英文的嘛,啊里边有一个这个呃,Pass有一个pass,这是那个请求的URL,诶有一个它这就是问号,那个查询字符串,那就是问号后边的,但是不包括问号啊,可以获取请求行里的信息,当然了,我们也可以获取这个请求图里边的信息,所以呢,这里边有个header,诶有个header就是hier类型,哎,Header类型这里边呢,是一个map,哎,是一个map,哎,这个哎,比如呢,我这个请求包告里边有什么接触的压缩格式啊,接触的语言啊等等啊诶这个都会在这个map里边,你指定下前面那个key,就是属性名,它就能把后边的值都给你列举出来,一个中括号,一个这个,呃,后边不是一个string的一个切片吗?就是一个中括号,如果你想快速的得到某一个值,可以调这个get方法里边传一下那个K就可以了,来传一下那个K就可以了啊,就是我们之前讲过的一个内容啊,获取这个请头里头里边的一个信息,还有啊,最主要的还是啊,包括这个请求体啊body啊,获取这个题也是可以的啊,也是可以的。
37:20
那最主要的还是这个处理,比如获取这个请求参数,获取请求参数,这是获取UR里边的内容,还有什么获取请求头里边的这个内容啊,包括获取请求体里边内容啊,这里边都有啊,哎,都这里边都有,那这个呢就不详细的说了,最主要的还是我们获取这个请求参数,因为我在处理请求啊,这个发请求中呢,写会携带一些请求参数,那这个请求参数怎么来得到呢?诶,就需要用到这个获取请求会获取请求参数这一块了啊,那获取请求参数这块呢,我们用的是这个,呃。Request里边来啊,这里边有好多有一个什么呢?有一个这个呃,Form还有个什么呢?Post form还有一个什么,还有它一些方法叫什么,呃,Form value对吧,Form value那这块啊,这个我要这个点这个form字段的时候呢,在它之前呢,需要调一个方法,需要解析这个表单对吧。
38:13
还有印象吗?没有了是吧。哎,没有了也正常啊,这有一个pass form,呃解析这个,呃,解析这个表单,解析表单,也就是说你在这个获取那些请求参数,比你这个写带了一些请求参数,用户名啊或者密码啊等等啊或是这些之前呢,你需要这个pass form pass form之后呢,它会把这个内容呢,更新到这个form这个字段里边,也就是说你在R用r request嘛,哎,在请求报里面的啊,Request r.form之前呢,必须得调一下pass form方法来解析一下,诶解析之后呢,它才会把如果是这个get的请求,它会把请求地址后边那个字符串呢,诶,就是那些参数呢,放到一个form字段里边,如果是post请求,它会把body请求题里边那个内容放到form里边,然后我们通过这个form就能拿了,诶就能拿里边的信息了,拿里边信息了啊,还有我们有一个快速的方式,诶可以调什么呢?Form y6。
39:10
哎,Form y6这个方法啊呃,调了这个form y6之后呢,它能自动的就是这个啊,我们调FORM6传一下那个key,比如呢,我要传一个uz面膜,它就能拿到这个用户名了啊拿到用户名这个值了,那这个呢,它能自动的帮我们来调这个,呃passor,呃,这个passor就是解析这个表单,它会自动的帮我们来调,就不用我们手动的来调了,这这个。简单的方式啊,这个form value你调了它之后呢,它既能获取我们get请求URL里面那个地址,也能获取post请求,请求体里边那个请求参数,就是那个请求参数啊,诶通过它调的话,诶,而且呢,你调它时候呢,这个呃posts,诶就是你这个请这个posts,你posts请求那个请求参数呢,如果这个请参数一样,它是在前面的URL的,是在后边的,就是我们之前都测过的啊下面这个post form value是专门获取post请求的这个呃请求题里边那个请求参数的,就是你提交表单的时候,如果用一个呃post form里边传一个u name,它只能获到表单里边那个呃用户名,如果URL里边有的话,他就拿不到了,呃这个form呢,是URL的盖型都可以拿到,POS型也能拿到,下边那个只能拿POS型里边一个值,这这些之前说的这些方法,诶,我在这说了,你看你还有没有印象啊。
40:23
好,还有啊还有呃再往下呢,还有我们这个,因为我们现在这个书城啊,没有这个涉及到比如什么上传文件呢,这里边呢有一个叫multite part,呃,这个就专门给我们设置这个上传文件的啊诶如果你想上传文件这个表单呢,需要指定那个诶一个属性叫include in ta是吧?指定为什么呢?MU part form data,那指定完它之后呢,就需要用这个MU partt form这个字段了,哎哎,取得这个表单的数据,比如你要文件上传的话,就需要用到这个字段了,哎,这个字段你们讲购基础的时呢,也说了,怎么这个读写这个文件对吧?哎,说到读写的这个文件了,那所以呢,你就可以比如这个写一个表单,把这个哎form表单的那个in type属性呢改成MU form data,然后你提交一下,你现在处理机函数什么的,你都会写了啊,都会写了里边的R,诶能拿到这个form字段,当然了也能调pass form,诶你这个呢,你看。
41:23
看能不能把一个文件,比如写到那个电脑的某个地方,也相当于回忆一下你们之前那个,呃,这个学的那个呃,读写啊,写的那个学,写的那个读写好,那第五呃下下一块呢,就是给客户端响应了,我们刚刚说的是处理请求诶,可以获取那些,最主要的还是获取我们前端发过来的请求参数,通过什么form value也好,Post form value也好,包括MU part什么啊等等啊,都可以获取,那这个response write呢,就是给客户端响应的,这里边也有head write right,还有right。那如果你想直接留,如给前台想要一个字符串,你就可以直接写right,诶直接调这个right方法用W直接调right就可以了,诶它能自动的检测出来你是一个字符串还是个HTML页面,如果你这块是一个HTML页面,诶在这个响应图上面,它会有那个呃,T的斜杠HTML,诶当然了,你还可以响应接S格式,但要响应森格式的话啊,诶我是说的是直接写这个write,按正常来说,你如果要这个想用杰森格式的话,需要设置一下这个响应头,就是set一下那个header header,点一个set header设置一下那个呃,Application什么JA森告诉他这是一个层格式,就是说响应信息才会是接S格式啊,当然呢,我们也可以重定向,但是重定向的时候要注意。
42:40
重定向的时候,我们需要设置这个响应头里边,哎这个告诉他一个状态码,哎状态码就是要调这个red head的这个,哎调red head的这个方法了啊调red head这个函数了,里边传一个int链的值,哎302呢,这个重定向的是302,所以呢啊,你需要这个调一下这个red header,然后里边是一个什么302,然后这个location这个还有啊还有这个需要这个。
43:06
哎,需要这个设置啊,通过head设置一下,诶设置一下这个信息,哎,这个呃w.head点一个set什么location,就告诉他这个地址啥location,然后冒号啊,这个location逗号后边是一个是不是3w.HTPS什么冒号斜杠斜杠3W点百度点com,然后下边呢,再整一个302,整一个302,但是要注意你在设置这个响应头的时候,这个呃。w.head.set set的时候啊,写set location这个一定要在right head之前,哎,就是写它之前,嗯设置,否则那就不起作用了啊,否则就是不起作用了,而且下边呢,也给大家这个举的这个例子啊,举的这个例子上面这是这个什么呢?就是HTML的一个,呃情况啊这个这块呢,就是这个想象这个杰son的一个情况,Application杰son告诉这个想象头,设置一个想象头告诉他这是杰son格式啊这格式浏览器里边就直接就是一个杰son格式,想象不出来了啊下边这一块这就是设置一个重定向了,诶先set个location,哎,S location,然后下边再write header,就是它两个这个位置不能颠倒,得先设置它,然后呢,在这个先设置一个302这个状态码,诶你不能先它,然后再它啊,就个相当于就不起作用了啊,不使用了好。
44:17
这是这个啊,这这个这个呃,处理请求,处理请求里边其实最主要的还是获取请求参数,所以啊,你这个诶上上面这些啊,上面这些再说一下,你知道怎么来这个创建服务器。比如用诶就给你指定死了,怎么用处理器函数的方式来创建这个,呃,处理请求的一个服务器处理请求,然后呢,这个呃,HTP协议里边,你知道这个请求报文想用报文啊,包括常用那个状态码就可以了,操作规这块刚刚说的那几个方法,增查改查的调的方法,什么查询银行调的方法,查询这个呃查询多行调用的方法啊,这些呢,把它掌握了,处理请求这块你知道怎么来获取前端发过来的请求,请求参数就怎么读那个请求参数,比如我提交过来一个表单,用户名密码怎么来得到,哎,把这个掌握了就可以了,下面这个模板引擎。
45:08
诶,就是请求我能拿到了,我从数据库来也拿到数据了,这个时候呢,怎么响应给客户端需要用到模板引擎呢,诶模板引擎这块,模板引擎这块啊,你就这个,其实记住最后一个就行了,诶他出了错呢,让他帮我们自动解决,就用template template调一个must方法,哎调一下must方法,在must里边呢,我们需要解析模板文件,诶也就是解析模板文件,说白了这个。哎,掌握一个must,在must里边呢,你需要解析这个模板文件,就是还是用temp点一个pass files,有掌握一个must,还有一个pass files passs里边是传这个模板文件的啊,传模板文件的,另外呢,下边就是要执行的啊,要执行的就是我们这个,呃,模板里边的啊,模板里边的这里边截那个截那个图了吗。
46:01
啊就这个啊must啊must呃,Must的这个呃这个函数啊,Must这个函数,呃里边呢这个呃传一下你,因为它能帮我们这个处理啊包装嘛,包装返回的这一个templ play的这个函数方法,这个调用回在airs呢,这个panic,也就它能帮我们这个出异常时候,它能帮我们处理啊帮我们处理,所以呢,哎你就呃这个知道哎用我们这个要解析模板之后呢,我们就先用一个time调一下mass模马,然后在mass里边呢再解析,诶再解析我们这个呃所有的模板文件啊调一下pass files就可以了,就是这就是这一行啊就是这行把这个呢这一行诶这个代码把它掌握住就行了啊另外一种就是指定格式的啊,你可以解析所有的这个模板文件,比如什么星点S等什么什么点L等等啊,还有一个就是执行,就是你掌握这个,嗯,Must的函数,Pass file函数还有就可以了,转换这几几个函数就可以了啊。哎,另外这个动作,诶,所这些动作呢,都要把它给掌握住了,都要把它掌握了,虽然我们在这用的最多的就是这个条件跟迭代啊。
47:04
啊,我们这个呃使成项法上中的最多的就是这个条件跟迭代,哎那这个肯定要掌握的,哎这个就不用多说了,条件条件动作呀,还有迭代动作,哎这两个是必须要掌握的,必须要掌握的,另外这些设置动作,哎你这个位置这个哎这个呢啊,你也得知道啊有这个设置动作,包括包含动作,哎因为我们现在啊,其实呢,我们现在也可以,我们这个树轴上面也可以用,也可以用这个包含动作,你像我们这里边也有一些呃这个呃相同的部分,你像我们这个头上面那些超链接。你像后台这块啊,后台这个什么图书管理订单管理,诶图书管理订单管理是不是好多页面上都有它呀,哎,只是这这个内容不是很多啊,所以呢,没有用这个包含模板啊,后期如果你有写那个大型的一个购项目的话,你们要写的话,里边比如有好多相似的部分,你就可以用这个包含动作,诶把那些相似的东西呢,给它放到一个地方,然后包含进来,包含进来就不用不用再修改。
48:03
每一个页面了啊,就不用再修改每个页面了,这这个包含动作啊,当然那个定义动作,还有块动作啊,这些呢,你也你也得知道啊,你也得了解,所以我们实下我们用的最多的就是这个条件跟迭代啊,就是这个动作这块啊下边这些什么呢?你别这个以后见到时候呢,不认识啊,不知道它什么,比如能看到这个,哎我就以关键字了啊,如看到这个位置了,后边这这是干啥的呀?哎,别到时候不知道是吧?啊这包含的哎前面呢,其实是个迭代什么呢?一看if啊条件你就知道啊,这是判断的,看到这个迭代right你也知道是个迭代的,然后设置这块呢,它用的是个with啊with。改位置,这个就相当于修改后边这个数据的,如果这块你设置个新址,那么传过来的数据就给他修改了,如果要这是空串的,就相当于没有修改包含这块呢,诶可能就认为会它不是include啊,是template,这个呢跟我们什么那个模板引擎里边那个有点类似是吧?Template,所以这个这两个别整混了啊,整混了就行,包含动作啊包含动作,而且呢,我还可以这个把这个呃传入到当前页面的这个数据呢,给传到被包含,诶再传到被包含页面里边,就是把这个点再传进去就可以了啊传文件还有最后一个就是快动作,呃快动作就就是说在这个我包含另一个这个呃模板呃模板的时候呢,如果这个我找不到那个模板呢,就可以用这个块动作,就相当于设置了一个默认的一个模板啊,设一个默认的模板就是这个啊块动作在这里边这几个动作啊,我们这个,呃,在我们现在这个书城里边啊,用的最。
49:30
基本上就用的条件动作跟迭代动作,哎,下边的都没有用到对吧。最后一个第七章,哎,不是最后一个啊,第七章是绘画控制。呃,为会话方程是干什么的啊,就是为了解决我们这个登录的,诶因为这个HTPP的这个协议呢,它是无状态的,也就是你发请求呢,他不知道这些请求是不是同一个人发的,诶所以呢,我们就需要通过这个互换工能来告诉让这个服务器知道这些请求是不是同一个人发的,呃,同一个方的啊这一块呢,涉及到两个技术,一个是cookie,诶一个是session,那这个cookie里边啊这个诶它这个运行原理,诶我们在这再说一下,也就是cookie跟session呢,它这个原理你必须得把它搞懂,对吧?你第一次比如发请求的时候,诶,因为这个HTP没有状态嘛,我得告诉我得让你有这个状态,让你知道是我发的呀,所以你第一次发请求的时候,诶,我在服务器端呢,给你造一个cookie,那当然了,怎么来创建cookie你就知道了,诶所以啊,下面是这个结构,你指定一下名字,指定一下值,你这个pass就是这个访问这个路径啊,你要不设置的话,就是在我们这个项目跟目录访问的时候都会写带,它如果你要设置的话,就是你只有访问你指定的这个目录时,它才会写带。
50:40
还有这个域包括这什么过期的一个时间,诶exp是设置一个time,还有一个markx age设置一个in类型的值,这两个啊,这两个这个都是设置这个有效时间的啊,有效时间的有第一次发请求,在服务器端创建一个cookie,然后我把cookie呢发给浏览,发给客户端,那发给客户端之后呢,第二次客户端带着服务器给他发的这个cookie。
51:02
诶,那这个时候呢,服务器就知道第二个请求是不是那个人发的了,当然了,不同的人给你发的cookie不一样,那那你发过去之后呢,他就知道是不同的用户了,所以呢,就知道这个状态了,就知道是谁发的了,诶说白了就是来区分不同的用户了啊这是这个cookie,诶第一次发请求,服务器给你造好cookie,然后把它,呃,第二步呢,把它给发送给你个客户端,那以后你再发请求带着个cookie,我服务器得到cookie就知道是谁了,所以啊是这个cookie,但是这个cookie呢,它有缺陷是吧?这个运行原理啊,就是这个运行里啊把这个原理呢,得把它给搞懂了,第一次发请求创建,然后呢,创建之后呢,以想象图的方式发给浏览器,就是在对这个想象图上面会有一个set cookie,然后后边就有那个什么什么等于什么什么,哎,就是那个啊,然后以后再发进牛呢,就携带着它,诶服务器得到之后呢,根据它来区分不同的用户,这是这个原理,诶必须得搞懂啊好,下边这个。说了怎么来创建并把它发给浏览器啊,怎么来创建这块呢?把这一个怎么创建cookie,哎,必须得诶必须得知道啊,必须得知道,哎就是这样,HTTP的里边的一个结构嘛,Cookie cookie指定一下这个对应的一些想指定的一些字段就可以了,然后把它给发给这个浏览器这块提供了这个这种方式啊set什么艾这个呢,你可以不掌握,把这个简洁的方式给它掌握到。
52:20
嗯,哪一种方式啊。有一个set cookie对吧?嗯,直接调这个set cookie这个函数,哎把它给想应过去,哎不用什么的,用那个head点一个什么ADD或者set了,哎那种太费劲了,太麻烦了是吧,直接呃就这样创建好之后呢,直接这个HTP点一个set cookie调下这个函数,直接把这个write跟这个cookie的一个指针传进来,就能把它呃发送给客户端了,以后客户端就会写带它啊,所以呢,把把这种方式给它掌握住掉,S函数的这种方式这个掌握住,还有读取cookie这块也一样,因为这个每次发请时他就携带着它在请求头里边,那肯定可以通过request那个head来得到,但通过这种方式得到也是比较麻烦是吧,比较的费劲,r.header然后传个传务呼议能得到,那这块呢,也有一个简单的方式,这个简单的方式是什么?是不是R点一个cookie啊。
53:10
对吧,R点一个cookie这个函数,R点一个2.cookie这个方法里边你传一下那个cookie的名字,就直接能拿到对应的cookie了,但是这个呢,只能得到一个cookie啊,哎,获取一个cookie中,哎,我们就通过这个这个啊方法来得到r.cookie传一个cook的名字就能得到了,就是读取啊读取下面就是设置它的有效时间,就是通过那个max edge还有个expre诶不过这个expre啊,现在这个嗯1.1呢,这个其实HTp1.1协议把它已经废弃掉了,不过这个呃这就跟IE浏览器有关系了,IE浏览器呢,它不认识这个ma edge对吧,你像之前的什么呃五六啊呃568是吧,IE就是很很低的那些IE的版本啊,但是现在以我们现在这个浏览器基本上设置这个max edge就可以了啊,Max edge就可以了,如果你要这个呃,为了保险起见,你可以两个都设置,把那个PI字字段设置一下,把mark edge也设置一下,这样就没问题了啊,这样就没问题了,怎么设置?
54:10
它设置一个值就行了,但是它的单位要记住是秒,哎,你要设置一个60呢,就相当于60秒之后呢,这个cookie呢,它就过期了,哎,它就失效了,还有默认情况下是一是会话级别的默认情况下,给你创建好之后,浏览器一关,它就失效了,诶你可以设置它的,比如我要设置它七天有效,你就把这个,诶什么用这个60乘以60,是这个60秒一分钟吧,再乘以61个小时,再乘以二十四一天再乘以七啊这就是七天了,就是七天了啊就是七天,为什么可以设置它啊,你像这个,这就涉及到它的用途了。诶,一个广告推荐也,你平时这个上网的时候经常出好多广告,那广告就就证明之前搜过类似的一些内容,第二个就是里面登录,登录成功之后呢,记住这个用户名密码,然后呢,让他近七天然每次来的时候就不用输入用户名密码就可以登录了,就这个案面登录,这是它的一个用途,但是呢,它有缺陷什么,你每次发起时都携带太多的cookie呢?呃,这个呃什么呢?第一个要是有手机的费流量是吧?啊第二个什么呢?你这个客浏览器对cookie的大小和限制肯定还有限制,不可能无休止的让你添加cookie,对吧,就这个,还有一个就这个。
55:21
是什么呢?这个cookie啊,Cookie呢,它这个呃里边的值呢,只能保存4STRING类型,那个Y6只能保存死string类型,所以呢这个呢也不好,所以呢,我们就可以什么呢?用这个session,呃用session的话,这个session呃跟这个cookie呢,它这个呃这个机制不一样,Cookie呢这个信息呢是保存在客户端的,Session呢是保存在服务器这一端的,所以呢,保存信息的地方,这个也发生了变化啊,也发生变化,那最主要的这个session呢,嗯,它的它两个的目的是一样的,都是来保存用户信息的啊,都是保存用户信息的,但是它的保存那个地方不一样,一个是在客户端,一个是在服务器端,Session呢就是在服务器端保存一个用户啊,它的作用就是在服务器端保存一些用户的一个数据,那这个运行原理呢,呃,这个呢,你也得把它掌握了啊,运行原理就第一次向服务器发起时候呢,我创建一个session,这个session呢,它有一个唯一的标识,哎,就是一个唯一的ID,诶可以诶你可以通过其他方式也可以啊,只要保证它唯一就行啊,这个session呢,创给新创建好之后呢,把你的用户信息保存好啊,放到了session放到了服务器里边那。
56:21
放到服务器里边之后,你一个客户端再发起,我怎么让能让你找到这个session呢?所以呢,它是依赖于cookie的,所以呢,Session的运行的时候,它是依赖于cookie的,这一点你要你要知道啊,我怎么让你这个知道能找到这个赛事呢?我给你创建一个cookie,哎,让它俩有一个关联关系,创建一个cookie之后呢,将这个cookie的VALUE6值呢,设置为我第一步的这个session的ID,那这时候它两个就有一个关联关系了,我给你创建好cookie呢,把这个cookie的VALUE6设置为session的ID,呃将这个cookie发给你,那以后你再发起就携带的这个cookie,携带的cookie之后我要在服务器里边,呃,根据cookie的Y6值就能找到这个对应的session,那找到这个之后呢,由于你的用户信息在session里边保存的,我就知道是哪个用户了,哎,所以啊也能,哎知道是哪个用户,诶就是也能区分不同的用户,那不同的人来的时候,呃,不同的人发的请求30人也是不一样的。
57:17
他这个ID是不一样的吗?比如我登录之后是adin,呃,我有一个三神,另一个用户用他的浏览器登录之后呢,哎,这个比如他他一用那个ADMI2,那也有一个三神,那三神有一个唯一的ID,哎,两个ID不一样,那你在发你的时候得到那个三神里边有你的信息,服务器得到那个30里边有你的信息,我发现你就得到那个三里面就我的信息,所以呢,就知道是谁发的这个请求了,就是这一块啊,这个会话控制,最后这一块呢,就是我们这个处理静态资源,呃,处理静态文件,对于ATM这块,哎,这个像这些CSS啊,GS啊,正常来说啊,你在amma里边呢,你把它引入进来之后呢,这个由于我们这个处理器,哎,处理器没有对应那个映射,没办法处理这些请求,那怎么办呢?所以这块需要我们来这个设置一下,处理这些类似于CSSGS这些静态的一个文件,包括你直接去访问一个页面也一样,它也是一个这个静态页面,如果要不经过模板引擎这个进行解析的话啊,它也是一个静态页面,你直接访问它怎么办呢?需要用到这个也是net包下的。
58:17
下边的一些函数啊,第一个这个函数是去前缀的,呃,去前缀的呃,这一个里边呢,传两个参数,第一个参数,呃就是那个前缀,比如你要出一的这些请求都是以什么什么开头的,哎哎,前面把这个什么什么开头,把这个前缀给大家设置,设置进去,那针对于这些以什么什么开头的这些请求,我让谁来处理呢?第二个呢,就是传一个处理器了啊,这里边传一个handler,那我们用的这个处理器就是feel,诶这个server。哎,这个啊,通过这个函数,哎,它能返回一个处理器,哎few serve啊就是文件的一个服务器,哎专门处理文件呢,哎比如呢,你这个文件在哪这里边呢,通过这个文件系统,诶你告诉我就是呢,我就给你返回一个处理器,那这个处理器就是处理这些,呃这些以什么什么开头的,它会把这个你这个墙面给你去掉,然后去这个few server里边指定的这个目录去找对应的文件,看能不能找到,能不能找到这块有个Di就是这个目录啊目录那这块呢,也也给大家举了一个例子啊,举了个例子,比如这块,哎这块这个代码我们来说一下,哎,当你比如访问诶。
59:21
你的这个地址里边,比如有一个什么呢,带这个诶比如什么带一个诶什么什么什么的已卖,哎图片什么下边什么什么的GPGGPG,像这些哎包括什么的,呃,包括这个什么CSS等等啊类似一个CS文件,这个时候呢,就是呃这个ES static开头,那e static开头我怎么来处理呢?我会把这个static给它去掉,去掉之后呢,交会给交给这个few serve来处理,那few serve怎么来处理呢?它会去把这个去掉之后呢,去views下的static去找对应的这个文件,那这样的就能找到了,就能找到了,所以啊,类似的,比如说要去其他的文件一样,如果要去某个静态页面里边,H页面里边假设这块,比如什么斜杠配蒂斯啊这些以这些开头的,比如我们基本上我们那有页面啊,都会放到某一个目录里边,比如哪些图片呢,都会放到某一个目录里边,图片基本上我们都诶如果要如果要是图片的话,我们就会都会整一个什么image啊,这个文件夹里边放一些图片,然后什么这个你像那GS啊,CSS啊,我们会整一个什么static啊,静态的内容呢,给他放进去啊给。
60:21
下放进去,这是我们这块啊,这个处理静态资源怎么来处理。好了啊,这是我们这个,呃,Web里边啊,这个写我们这个书城项目时候涉及到的一个内容,哎,那这个给大家过了一遍啊,你这个看一下啊,哪些内容你这个记住了是吧,哪些内容你掌握了对吧?好了啊,下课休息一下。
我来说两句