00:00
啊呢,我们认真的来研究一下application session以及request的生命周期,看看这个生命周期到底是什么样的,Close all,首先呢,我们今天上午啊,我们写了一个这个呃,Listener,这个listener里边的话呢,我虽说这个名叫hello service contact,那实实际上这里边是不是把这三个接口是不是全继承了,那这里边我们都打印了,比方说呃,Surface contact对象被创建,Surface contact对象被销毁,Set被创建,Set被销毁,以及呃,Request被创建,Request被销毁,OK,下面的话呢,我们通过呃这样的几个GSP页面来说明他们的生命周期,首先呢,我们现在比较熟知的啊。第一个request这个什么东西,他什么呀?他是个请求,是一个请求,当当一个响应返回时。
01:14
被销毁就是这快,那什么时候创建呢?当我发一个请求的时候创建。啊,这就是request,那我们看一下哈,Request,比方说我们以这个为例啊,这就是一个很好的一个例子,我只要我发一个请求。大家看我目前是不是已经看到这个页面给我的这个回复了,钱回来,所以说request被创建,Request被销毁,下次再刷一样的request被创建,Request被销毁,所以说的话呢,我们就知道我如果在这个页面上,呃,请求域里边放一个属性的话。
02:16
这块的话呢,写个request value好了,我这块是放一个值的话,我要是通过超链接的方式在这个页面我是拿不到的。request.get tribute。这我复制一下C过来,好,大家看我只有在刷新这个页面的时候,这行代码才会执行吧,但是你看哈,我这个页面的话呢,我只要我一看到这个结果的话,这个request是不已经被销毁了,所说我再点这个超链接的话,这是不是一个新的请求啊,所以说你看这个页面的这个request跟这个页面的request不是一个,那么在这个页面里边,请求域里边放的这个属性,这个页面我就。
03:26
获取不到我是指什么?只通过超链接的方式获取不到,我们可以怎么样的方式获取的?我在这个页面里边,我来写一个JSP forward,我通过一个请求转发到登录下的test JSP卡。回馈看好了啊。这是不是case的配置啊,Request开我是不是可以获取找来,为什么?因为你看至始至终我由这个页面到这个页面是不是只有一个请求啊,所以说我在这个页面创建的这个啊,我在这个页面请求域里面放的这个值,在这个页面才能获取到吧,哎,这就是请求转发是只有一个。
04:16
Request。好了,那这个的话呢,我们再结合我们再来说一下。这这个我先助教了啊,我通过一个来算一下,把这个也拿上去点点A。SOSOOK,来写一个so。创建一个sol。第一个字母大写。不干。
05:03
好,注意我在这个里边放一个属性set attribute。Request key吧,再放一个值。Request value to这个to啊,然后呢,我通过请求转发的方式去那个JSP好了,我们想看到我由什么呀,我由这个。JSP到这个再到这个JSP,至始至终是几个请求。几个请求啊,一个还是两个啊。
06:03
刷这个页面,大家看这页面是正常这个页面啊,这个时候这个request已经被销毁了,注意我点它。大家看我自始至终我是不是只有一个这块子哦,但是我们这个有个问题,这这个T应该非常大写是吧。映射这个路径,这个地的大写回退。再看我点这个啊,不来我页面这个值,我我从我发请求一直到我这个JSP,我是不是只有一个请求啊,这个值量没获取着呢,写错了呗,Request。这样写是吧。它会自动的重新加载回去再刷。好,再看哎,这个值的话呢,Request y two这个值我是可以获取到的,这里边至关重要,我从这个页面发一个请求,这个请求是到了so。
07:14
然后的话呢,这个sol通过转发的方式又到了这个JSP啊,这一系列的过程实际上是一个请求,所以说我在这个so里边放的这个属性,我在页面上才能获取到。而而我这个页面回退哈,我这个页面的显示的话,这是是不是已经是一个request了,看见这已经是一个request,然后request已经被销毁了,那我在这个页面的request里边放的属性,我在so里边是获取不着了,OK,这就是我们关于request的生命周期,搞清楚这里边儿的话呢,需要额外注意的是一个注意。
08:01
啊,请求转发。的过程。只一个。Request对象好了,既然我们说到这个请求转发的话呢,我们再来看一下这个重定向,我来写一下说重定向。好,我去根目录下的点。J。啊,没有没有发我的了啊。保存再看。刷新一个请求,创建销毁我我拿掉最后点它哈,这是不是两个request,就是说我请求到这个,这是一个request,然后呢,然后呢,我由这个so再到这个JP,这又是一个request,所以说我在这里边放的这个属性在这个页面上获取不着吧,清楚了吧,所以说我们讲哎重定向是两个请求。
09:27
好,这个的话呢,应该放上边,好,我们再来一个就是关于request,下面我们就来看一个session,对啊,我什么时候创建session呢,现在呢,我们就来写一个这S。这个GSP呢叫session.jsp这个JSP页面我先写一个,写一个标志四单身配置,OK,我现在访问这个页面,大家看哈,我现在直接访问这个页面。
10:19
会创建30吗?波瑞斯塔,Continue。我在刷是不是没创建session,为啥呀?因为我现在我在这之前是不是有一个页面啊,我这两个页面用的是同一个session,好了我复制。从重新从里边开这个看这看他啊。大家看这个时候是不是会创建一个session对象啊,这个时候会创建一个session对象,好了,那什么时候创建一个对象呢?当然我如果这个页面我再访问这个点的话,会不会创建。
11:17
你看这个桌没有session的话呢,创建只有一次,那什么时候创建三最小说,当第一次访问外B应用的一个JSP或是。在JSP或中还需要创建。赛对象。这个时候是创建。此时。
12:00
服务器。会创建一个筛一下啊,不是说我第一次访问web应用的一个JSP,或,而且这个JSP跟里边还需要创建session的时候,这个时候会创建一个赛对象,这句话啥意思,为什么说还需要创建一个赛对象呢?啊,那我们还说这个页面里边啊,我来写句话。叫session等于false,这句话什么意思?这句话的意思是说我在这个页面里边,我不需要有那个30那个隐含对象吧,好,关掉。CTRLC过来看。
13:06
他说单身被创建咋回事呢?哦,这是index是吧,我搞错了,不应该是index,应该是section.p但是我得干什么呀,我得重新访问,比如说C关掉再开。大家看这个时候是不是没有创建灾,好了,我这样写,没创建灾,我让你创建一个呗,P dp session session等于because.at session,这个相当于at session处吧,这个时候将创建session,大家再看。
14:00
这三是不是被创建了,所以说session什么时候创建呢?一定是说我第一次访问这个外部应用的某一个JB,而且这个JP里边还需要创建session的时候,这个时候才会创建。那我如果访问了第一个页面,然后第一个页面已经创建session了,如果浏览器不关,我再访问第二个页面的话,这个时候那session是不是已经有了呀?我就不会再创建三了,这是三身什么时候创建,下面再看看三身什么时候被销毁,那关于三身销毁的话呢,我们想的最多的就是把我浏览器一关就销毁了吧,实际上不是吧,实际上并不是浏览器一关它就销毁了,那什么时候销毁呢?赛程销毁啊,有几种情况。三身销毁,一个三身过期,三身有一个有效时间,第二个直接要用方法,这个时候也会,我们当时我们还说了一个说当前外部应用。
15:31
被卸载。说这个时候呢会销毁session,那么我们先看一个这个session过期的一个例子吧,我们还是来说这个页面。呃,section.jxp,好了,我人工的写一句话,section.max你这个单位是什么呀?秒吧,有写吗?秒是吧?好了,我设置为十秒,十秒之后过期好了,预防这个页面重新来。
16:08
好,这个时候呢,一定会创建一个灾,我们等一会儿会看见这个三身被销毁的效果。就有了是吧,啊这个时候的话呢,这个三声可以被销毁,我们看到了好了那。这是塞身被销毁的第一种情况。第二种情况。直接调用second外方法,这个我们再看一下,直接调用这个方法,这个呢是很残酷的一件事,直接销毁session.in就像人一样,是吧,说人什么时候死去呢啊,等人终老的时候。
17:02
就是过期了对吧,比方说人最多活130岁,那你到一百一百三十一的时候,你肯定不在了,还有一种直接干掉是吧,卡一枪死了。这种情况是很残忍的啊,于是我们看再看一遍。是不是直接被销毁啊,这个很快,每次都是新创建,然后被销毁,我们也看到这个了,调用这个方法好了,还有一种情况,还有一种情况是什么呢?我来发一遍哈,这个时候创建了一个塞,还有一种情况说当前外部应用被卸载的时候,这个三神也被销毁,我们看看是不是这样。把这个服务器关了。好到这里边来,我们是不是发现什么呀,没有看见筛被销毁的那个打印版,然后我把服务器在启动。
18:08
好,注意我再访问这个页面,大家是不是也没有看见塞被创建的这这个语句被打印呢?这个时候的话呢,有一个session的持久化问题,说一下吧,就是在。D盘。Work目录下cat love,我们现在讲的是day。40你应该会看到这个路径下会有一个S文件哦,这个时候是不会有是吧,为啥不会有啊,我是不是已经给它读出来了。注意我把服务器关闭,我只有把这个服务器关闭了才可以看到,看到关闭了是不是有一个section点S1啊,然后我在启动的时候。看见这个是不是又被读出来了,它有一个session的持久化问题,所以说的话呢,这个时候我们我们看到哦,我这个外部应用被卸载的话呢,那个session并没有被销毁,它是这么一回事,好了。
19:16
放到这个里边来说,如果你仅是当前因为被卸载的话呢,这个时候可能会有一个状况,说三生可以维持久快过于30持久化的话呢,我们一会儿我们还会讲好,下面我们我们再说一个比较重大的问题,说关闭浏览器并不意味着session对销毁。我还可以通过那个三身ID找到那个塞吧,还可以通过session ID找到服务器中的session对象,OK,我们看一下这件事啊,好,服务器已经启动了,那我还是访问这个页面。
20:16
这个时候的话呢,三神持久化,它被读出来了哈,我把这个页面关掉,新开一个。新开的,看看这个时候是不是创建了一个新的财神,好了我再关。我在开。是不是又是一个新的session啊,那我有没有可能说我再新开一个页面的话,我不创建一个新的session呢?有没有这个可能啊,有吧,只要我新开这个页面,我能把那个解SID传过去,找到那个session是不是就可以啊,我现在刷不创建是因为我在同一个规划里边吧,对吧?看我现在刷没有创建三神是不是因为我在同一个规划里边啊,我们现在呢,我们来看一下这个工具开发者工具好了,我刷一下这个页面看它看诶这个结算这ID看复制好了。
21:26
我正常情况下我再新开一个页面,我记不住叫啥了,括号8989。啥呀?废材是吧?这样访问。嗯。好,这是三点加,我把这个呢,给它记到这个里边来记录一下啊,那有一个解散ID是它,还有一个什么呢?页面的地址是他。
22:12
我记录一下,我们注意哈,现在这个解散ID的话呢,还有呢,我CTRLC我访问大家看。看这个页面我一访问的话,这不还是创建了一个新的session,好了,我现在要再刷新的话,不不会创建吧,能知道为什么吧,这同讯会话吗?我把这个页面关掉,然后呢,我要把这个几3ID给它带过去,我们说11R重写的格式是啥样的呀。解,SID等于vur出血的格式是这样的。保存拿过来。看到C过来。
23:05
坏了,这个30也被创建了,这说明什么呢?啊,我写的不对是吧。姐3ID没有这个S再来。再观。点开大家看是不是没创建session,那说明这个时候的话呢,我用这个解3ID,我可以找到服务器里边那个session吗?我找到之后的话,服务器就不会被创建了,这就是我们呃学习session特别需要注意的一个环节,说关闭浏览器session不一定被销毁,我们通过那个解散ID还可以找到我那个session对象,哎,这是关于session的生命周期好了。最后一个当然了,那session session是可以跨页面的,这个我们就不演示了啊,这是肯定的application。
24:06
怎么样贯穿于当前的web应用的生命周期,就是当前外部应用被服务器加载的时候创建application,当前外部应用被服务器卸载的时候销毁application。好看一下。
25:03
我卸载的话,我在这里银行大家看。这个时候呢,我服务器侦测到啊,我当前这个类被修改了,它会同新来加载这个外部应用,你看这个对象被销毁,然后这个对象被创建,然后只要你不卸载的话,你无论怎么做的话,我都是一个service contact,正是因为它是贯穿于这个整个这外部生命周期,所以说你只要在这里边放一个属性,我在任何JSP,任何里边我总是可以获取到。好,这是我们这块借助这三个我们重新分析了一下session跟application的生命周期,那我们讲了这三个是吧,其中最重要的是这个。或者说这个是最常被使用到的,那使用的这个嗯情境是什么呢?就是对当前外部应用来做一些初始化的时候,比方说创建数据库连接池,创建的IC容器,读取当前外部应用的初始化参数等等等。
我来说两句