本小节有个疑问

来源:2-1 请求流量分析统计-开发监听器

Ranron

2019-12-03 17:13:56

当全局变量创建时,我们在contextInitalized方法中初始化了两个数组:timeList与valueList,这个数组与requestInitialized方法中创建的与之同名的两个数组,最大的区别是不是request中的数组数据会随着每次请求的发送响应流程的结束而重置?所以我们要把判断完后的数据重新保存在context中定义的数组里,而context中的数组只有当服务器关闭时才会重置,这也正是不同对象的生命周期体现?

写回答

1回答

好帮手慕小班

2019-12-03

同学你好,这里理解的有一些小错误。

        1、在contextInitalized方法中初始化了两个数组:timeList与valueList,通过getServletContext()方法的作用就是获取ServletContext的上下文,调用setAttribute()方法,将时间集合和数量集合,添加到ServletContext作用域中。

        在requestInitialized中直接获取ServletContext作用域中存入的这两个集合对象,并没有再次创建与之同名的两个数组,例如

http://img.mukewang.com/climg/5de6386f09596c9b10030670.jpg

    2、contextInitialized()方法表示在web应用启动时,将最原始的数据进行初始化,getServletContext()方法的作用就是获取ServletContext的上下文对象。

        ServletContext对象是程序全局变量,对每个用户每个页面都有效。存放在ServletContext对象中。它的存活时间是最长的,只要服务器没有停下,它们就一直可以使用。所以即便是关掉当前窗口甚至是在另一个浏览器中访问,得到的结果是相同的。

     3、不同对象的生命周期是不同的,对应的作用域也是不同的,同学的理解是正确的。

        ServletContext和request、session比较,生命周期是最长的,而且范围最大,是服务器自己的一片空间,只有一份。

        request中的数组数据会随着当前请求的发送响应流程的结束,数据消失。

        session可以看做一个浏览器在服务器中对应的一片存储区,会因为浏览器、用户等因素的不同而有多个。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

0

0 学习 · 9666 问题

查看课程