00:00
在so的编程中。主要技术有三个。一个是技术本身。你就就那个solo接口啊。另外两个,一个是cookie。一个是session。这两个都是绘画跟踪技术,Cookie我们已经学过了。它是由服务器生成。保存在客户端的。一个数据存储的载体。就它里边可以放数据。由于混话跟踪的,那么session是什么呢?那我们现在就来看session。Session。它翻译过来就是绘画的意思啊,那绘画我们现在已经知道了是吧,就是一组相关的。
01:03
请求和响应的集合。那这儿这个绘画。这个session。指的是一种技术,是用于进行那一组刚才说的那一组请求和转发,叫绘画的。状态的跟踪。对,就是那组请求和响应里边啊,它之间的数据传递,数据交换可以通过session技术来实现。你看,这种技术起了个名叫session啊,叫绘画。那么这两个都是session和cookie,都是绘画跟踪技术,那么他们的区别在哪呢?一个很重要的区别是。Cookie是保存在客户端的,Session是保存在服务器端的。
02:01
这两个很重要的区别,当然了,生成都是由服务器生成的。好。那现在我们再来说绘画,刚才我们说的那一组是吧。相关的请求和响应那什么叫相关的请求和响应呢?实际上对于我们用户来说,我们能够感知到的所谓的一组绘画,就指的是我们打开一个浏览器。然后从发出第一次请求开始,一直到最后把浏览器关闭,那么从打开到最后关闭,这整个就是一次绘画,这是我们能够感知到的啊,作为用户来说能够感知到的。Session还需要注意一点的是啊,Session和cookie一样,并不是我们家web开发所特有的,它是整个web开发技术里边的。
03:00
啊,一种技术啊,是所有web开发中的一个技术,只不过我们Java web里边。这个session是以这个接口对象的形式出现的http session。Http session这个接口对象的形式出现的好,下面呢我们就来看一下session的基本用法啊,知道简单知道一下什么是session了,下面我们就看Java web开发里边的session它的基本用法。那首先就是session的创建。它是个接口啊sessionb session是个接口,那怎么创建它呢。我们看API在。Java X。第二这个itp这个包下边啊,这个包下边有一个IP session,这是个接口。
04:04
对不对,这是这个接口。那现在我们要说这个接口要实现,或者说要创建这个接口的对象,我肯定不能new啊,那怎么来的。怎么能得到他呢?来看他。Request。在request里边你看一下啊。哎,大家看到没?这是不是有俩方法?都是get session,返回值都是http session。对吧。那么这两个我们看一下啊,这个是无参的,是不是这是带一个布尔参数的,那我们看一下这两个有什么区别啊这个。吴,Returns the current session。返回当前的session。
05:02
哦,返回当前的session associated with the with this request,就是和这个和当前这个请求相关联的这个当前的session,哦,他是返回和当前请求相关联的当前的session,什么叫和当前请求相关联的?我们说了这一个绘画包含是不是一组请求和响应啊?也就是说。这个绘画和请求响应之间的关系是一对多的。对不对,它是一对多的一组绘画,一个绘画包含一组请求和响应啊,哦,或者if the request doesn't。Have a have a session,如果当前的request,当前的请求没有一个session create one会创建一个。
06:07
哦,我明白了他的意思是什么。如果当前请求有。Session,我又给你返回当前的session,如果没有,我就给你创建一个是吧,是这个意思啊,再再来看它。再来看他。布尔值的,他说啊,Returns the current activity session associated with this request,这和刚才这个一样吗?是不是返回和和这个请求相关联的当前的session or,或者if there is no?Current session。如果没有当前的session and create it true。S anew session,这什么意思啊,这这这这看着有点乱是吧,打开它。
07:07
把这个和下边的合一块就清楚了,这还有一句话啊。这句话是刚才我们显示的分析过的,If create is false create,就这个参数,如果是false。And the request。还,还什么呢?什么意思呢?The request has no valid对吧?如果是false。并且请求里边还没有可用的。怎么样,This method returns now?如果这是false。并且还没有当前还没有session,那么返回空没有的话,他不会创建。
08:08
明白吧,那再看这句话,现在就清楚了,If。There is no current session,如果现在没有当前的session and create is true create is true是指的这个参数是true create is false参数是false,明白吧,A new session,那我明白了,它的意思是,如果这是处。有老的,我用老的。没老的,我见新的。对吧,如果这是。有老的,我用老的,没老的。我不会给你借。返回空。哦,这这个似乎有点意思了啊,那也就是说大家看他无餐的这个是不是说有老的用老的没老的是不是间新的,也就是说无参的这个构造器和代餐构造器里边这个参数是处的时候是等价的。
09:14
这大家要清楚啊,就是这个无参的不是构造起无参的这个方法和代参方法里边这个参数是处的,是等价的。好,先说这俩。方法啊,创建,至于这两个方法什么时候用,哪一个怎么个用法,我们一会儿在例子里边来说。然后说完创建了啊。我们再来看预属性空间。塞身域这个玉术空间,我们前面在讲request的时候已经接触过了。对吧,寓意属性空间。它是个存储数据的空间。
10:02
它里边可以存放数据,那么request里边有预使用空间,我们session里边也有预使用空间。只不过。Request里边是不是在同一请求下可以。进行数数据传递啊,什么叫同一请求下,如果我是跨的是两个solveet,但这两个由一个solve到另外一个ET是通过,什么是通过?请求转发过来的。从一个从some到other是通过请求转发过去的,那么你在你在some里边到request域种放入属性值,在other service里边就能读取到,这是没问题的吧,我们前面刚刚讲过。那呢?Session。
11:00
他是在绘画里边的。是跨什么的。注意它是跨请求的。他是跨请求的,只要是在同一次绘画里边,我在这个请求里边。放入。属性放到三神里边,属性在另外一个请求里边也能够获取到,也就是说它可以实现跨请求的数据传递。方法还是这三个方法,Set tribute get tribute remove attribute。方法很简单,关键怎么用,那下面呢,我们就来看一下session的用法,我们来看程序啊。啊,我们来写。
12:01
这个31。31。Http session。嗯,咱们这样,咱们还来个表单吧。来个表单。嗯,写吧。不拷贝了。来个表单啊。Action action action写什么?这样吧,我就写个some method。Post,这儿不用多说了吧,这是不是不能加斜杠?
13:06
对吧,然后这是用户名。Input type等于test。Name等于username。嗯,然后呢。然后。Input type等于submit value等于。呃,我们就要提交吧,就这样啊。那现在我需要定义soet,对吧,Some so。点一个some ofet。
14:03
这个Sam。点,北京。Power no点。这个是。对,Some是吧。Do post。删了。删了。这样我接收这个用户请求,我现在不管中文乱码问题了啊,当然我们知道现在do post的方式,中文乱码问题也是request coding我就不写了啊。
15:00
我直接点。点getter,是不是user name?Your name。然后呢?嗯,然后咱们这样吧,我也不输出了,加个注释获取用户。呃,提交。参数。这是将参数。放入。不要写请求了,Request,你注意我现在放的是request啊,Request request.set attribute,我这个叫user,我不叫username了。
16:05
那这个是username。对吧,我就放到它里边了,放到它里边以后。呃,那就这了,就写到这儿了。这个就写到这儿了啊。嗯,咱们。这样吧,给这加上一个输出语句。加上一个输出语句啊。这样写吧,bo.get点我就直接写了啊。点print。这是萨。
17:02
然后。You the name。这是里的,然后user显的。好。Some写过了,再来一个。再来一个,这个叫other。Other,我这个other怎么来的?我是通过地址栏访问,所以我这是do。
18:02
看好我现在干嘛呢?Request get per。哪一个?我刚才在这放的时候,是不是放是user啊,然后我从这读user。我这叫。这个叫user。注释,从request域中读取user。属性吧,然后response.get点。
19:02
Other Soviet。有的。好,就这了。现在跑一下。好。现在跑这个了啊。要跑他。你注意。我一点提交。他访问的是不是萨姆斯利?走。Some对吧,李斯,那么我在这个里边。在这个里边把这个username给他放到了请求。
20:02
现在我要在这个other里边给他读怎么读。哎。我这儿要写上。Other soet,我问大家,我现在直接访问other so,这是不是又提交了一次请求?对吧?这就是又一次请求了,那么这次请求和前一次请求之间有关系吗?没有。HTTP协议。是无状态协议,刚才那个请求提交了,然后响应是不是已经收到了,现在你又提交另外一个请求,这个请求和上一次请求是不是就根本就没关系啊,所以从这个里边,我们other service里边能不能读取到上个请求里边。存进去的属性啊。能不能?
21:00
肯定不能。走。是不空不行吧。但是你注意我的页面是不是都是这一个页面呢。这两个请求都在同一个页面里边,这是一个什么?这是一个绘画。这两次请求和两次响应都是在一次,都是在一个绘画里边,所以。再来看我就可以给他。把这个东西给它放到绘画里边,放到session里边,可是你要往session里边放,你是不是就得有session呢?那好,我现在要获取session对象。Quest,第二,Get session好,我现在问大家,我是应该用哪一个方法获取呢?是午餐的。
22:10
还是有参的,有参的是true还是false,其实其实也就是有餐的,其实用true还是用false,如果用这个是不是可以省略不写了。是用true还是false呢?啊。你想想我们现在是干嘛的,现在的目的是不是要?我们现在的目的是要向塞域中写入属性。要向三神语中写入属性,你想想,你是不是必须得有三神呢?那怎么就能必须得有30了,我如果这放force行不行呢?放for什么意思?瑶。
23:00
我就用老的没有我就不创建,没有你要不创建的话,那你这边还怎么往里面放呢。所以不能用它。不能让他用谁用处处其实就不写就是处了。所以在这儿。我们要用get session的这个。这是session session.set attribute。什么,我这个也叫user。然后。这个your name。这样吧,咱们换个名吧,这叫username,免得大家和这认为和这样的重复了,我这叫username啊,好。我是写到session里面数据了。
24:01
然后这边呢,我是不是要读啊。我是不是要读数去了,好。读数句。你要从三面读数据。你是不是也得获取到session呢?获取session。就获益三吗?Request get session,那好,那在这。是用true还是用boss?用谁呢?再想一下。我们下面还得再想想这个问题,我们现在要干嘛呢?从session中读取。指定属性。从session中读取指定属性。
25:03
那你想想。如果连session都没有。那这个属性有没有,那肯定没有啊。所以有同学说了啊,那那也就是说我这必须得有啊,是不是,那必须得有,我就用它吧,用处你看你用处合适不合适,如果用true什么意思。有session。我是不是就获取老的三身呢?然后我从这个老的30里边是不是读指定的属性啊。那没有呢,没有,我给你新建一个session,那我问问你,你新建的session里边可不可能有放进去的这个属性啊。你新建的三身呢?他不可能有。所以。我们如果从30里面要获取数据的话,一般使用force,然后这儿我得用first,我得判断一下呀,如果。
26:10
Session不等于闹。如果他不空。然后我再从里边读数据。Get attribute。有点难。这是获取到的有。咱们。这样。咱们这样啊,嗯,那这的话我就把它。这样吧,这个写成U,嗯,这样我把它单独摘出来啊,摘成out。
27:06
User等于。这个是username,等于这样就更清楚了啊。User,这username我们得需要给它分离一下。Yeah。这个需要分类想。给它复制为空。给它复制为空。当然啦,它我们知道它原来本身就是字符串是吧。啊,它原本就是字符串,那我们给它写成字符串,写成字符串,这是不是就需要强转一下呀,OK好了。好了,他也重新发布过了,我们现在来访问。
28:02
你看着我现在先访问谁这样?把它关了。重新来。大家看我现在先访问的是谁,Other吧,Other subject,你想想,你现在先执行other subject,执行它。你往里边放。往session里面放数据了没有?没有吧?对不对,你根本就没往里边放数据。也之前没有创建30,所以现在这个三神就是空的。现在的这个session是空的。是不是咱们这样,咱们可以看一下。我们输出一下啊。嗯,这样。Session。
29:00
这个是三,我输出一下这个三,在这儿加个换行啊。加个换行。咱们重新发布好了,重新发布过了啊。看着我现在访问他了,阿萨利啊。是不是塞神是不是也是空的,你就说内部是空的。对不对,那大家想一下,像我这种访问方式,如果说我这儿给你写成。出,你觉得有意义没有?写成处不错,Session是不空,它肯定不空,可是你新创建的session里边有username吗?你根本就没往里边放,他能有吗?是不是?他现在不空,可是有意义吗?没有任何意义。
30:03
它是没有任何意义的。所以这我们写成for,一会儿给大家总结一下它的用法啊好,那下面下面啊,我们就正常访问,怎么就正常访问了。走。张三。我一点提交,现在是不是已经写到。三域里边这个属性值了吧,把这张三是不是已经写进去了,紧接着我再访问啊,你看呀。这这这这这个不对啊,再访问other。我看一下啊。他怎么还是这种状态呀?我们需要。
31:03
咱们咱们这样啊。停一下。把这页面关了,刚才这页面没关。这样。Run。好,李四。走。放进去了。啊,走呀,他怎么是空的,这可不对呀。嗯,咱们看一下。You name。不对,现在这儿。这个session。
32:03
这个session哦,我看一下啊。我看一下这儿。加这个cookie啊,咱们前面写的时候这cookie都禁掉了。这cookie啊,不要禁掉,为什么?我们回头再说,我们后边会专门给大家讲。啊,一会会就会讲到啊,Cookie不要禁掉。好了,大家需要重新问我说这是怎么回事呢,是吧?走。再写上other。没问题了吧,是不是,然后有同学说这这这讲这和IE有什么关系呢。
33:05
Session和cookie之间。有着非常紧密的联系。我们一会儿来说。一会儿来说啊好,下面呢,基本用法我们知道了,下边给大家总结一下啊,总结谁呢。就是get session的用法。对于get session这个方法啊。它的用法。嗯,总结到哪儿呢?总结到这儿吧。对于request的get session。的。用法说。一般吧,这个东西都不是绝对的啊,一般情况下,若要像。
34:06
我要想。Session中写入数据。则需使用get session。即get session方法。嗯。意义是由老的。用老的我就省写了啊,有老的什么叫有老的?用老的就是有老的三神,用老的三选啊,有老的就大家好记,有老的用老的,没老的怎么建新的?
35:00
因为什么要这样,因为你要往里边放数据呢。你的需求是往里面放数据,所以他必须得这样写。那若要从session中读取数据。则需要使用get session force。意义是有老的。用老的,没老的怎么返回闹?为什么呀,很简单,你要从30里面读数据呢,你有脑袋,肯定你读数据肯定得从脑子里边读啊。你新建的里边肯定是没有你要读取的数据的。因为要读取数据。
36:06
必须是从老的session中读取,或者这样说。因为要读取数据,而因为要读取数据,只有老的session中。才有可能存在。你要查找的数据。新建的session中是不可能有。这些数据的对不对。这就是他的用法。OK。那么对于session的基本用法,我们就。
37:01
说到这里。
我来说两句