servletcontext以下简写(sc)每一个web工程对应一个,用sc定义的属性是全局的,所有用户共享的。
比如想统计一个网站的流量(访问人数),为了不频繁操作数据库,我们使用在本地硬盘上创建一个文件,里面用来记载访问人数,当用户合法,就创建File,随后判断该文件是否存在,如果不存在,就往里面写入初始数字0,如果存在该文件,那就先读出文件里的字符串赋值给变量,随后再将变量+1,最后再写入文件(但是你有没有想过这样不停的在读文件,和需要操作数据库是同样一个理,而在计算机中,效率最快的是读内存,随后我会讲第二种方法,也就是这篇文章的标题),最后在需要用到用户数量的页面同样需要先读出文件里的字符串,然后再将变量给到合适的地方。
以上每当用户登录成功需要不停读文件,效率是不高的。
现在讲下sc.
每一个web项目都有该接口,在内存储存方式很像session,左边key(String型),右边是Object类型,所以如果是数字一定要加上“”,比如你想用一个属性表示访问人数,先在servlet里重写init方法,在init里先创建文件,如果存在就直接读,this.getServletContext("visitor").toString,如果不存在,就可以直接用this.setServletContext(“visitor”,0+“”),在需要显示人数的地方用this.getServletContext("visitor").toString(),把Object类型转成String,就可以了。
当服务器关闭时候执行destroy,把当前的servletContext对应的visitor值写入文件,如此就完成了。
当点击浏览器时不同的用户登录都会实现人数访问量的增加。重写init的时候,一定要记得调用父类的init方法,super.init(config);否则在service/doGet/doPost方法中使用getServletContext方法获取servletContext对象时就会出现异常。
代码有空贴。