ServletContext与网站计数器
什么是ServletContext?
ServletContext是服务器的一个公用的空间,是不同的浏览器共享的一个数据。

由图可以看出ServletContext和Cookie与session之间的区别。
ServletContext有哪些用处呢?
1.网站计数器
2.网站在线用户的显示
3.简单的聊天工具
总之,如果是设计到不同用户共享带护具,而中和喜爱数据量不大,
同时又不希望写入数据库中,我们就可以考虑使用ServletContext来实现。
注意事项:
因为存在ServletContext中的数据会长时间保存在服务器,会占用内存,因此我们建议不要向ServletContext中添加过大的数据。。。切记
如何使用ServletContxt?
1.如何得到ServletContext实例
this.getServletContext();
2.你可以将它想象成一个表,这个和Session非常相似:
每一行就是一个属性。
添加属性:setAttribute(String name ,Object ob);
得到值 :getAttribute(String name)返回Object
删除属性:removeAttribute(String name)
3.生命周期
ServletContext中的属性的生命周期从创建开始到服务器关闭而结束。
怎么实现一个网站计数器?
怎么算一次有效的点击,各个网站有不同的标准:
1.只要访问过该网页就算是一次,刷新一次也算你。
2.不同的ip访问该网页,算一次点击。如果是同一个ip在一定时间内,不管浏览器访问多少次都算。
3.用户访问网站,再次访问也算一次。
实现方案:
1.当有某个用户访问该网页时,就在数据库中增加一次。
缺点:对数据库访问太频繁,服务器压力太大。
优点:很好理解,也好实现
2.设置一个静态变量,当服务器启动时,可以通过文件或表初始化该变量,当服务器关闭时,再将
变量的值写入到文件中或是数据库中。
缺点:实现复杂,要求对文件操作
优点:效率高,不会频繁的访问文件或数据库
3.使用ServletContext,它的实现和第二种很相似。
//添加网页访问次数的功能
//创建一个FileReader
FileReader f=new FileReader("e://myDocument.txt");
BufferedReader br=new BufferedReader(f);
//读出一行数据
String numVal=br.readLine();
//一定要关闭文件流
br.close();
int times=Integer.parseInt(numVal);
//增加一次
times++;
//再将新的次数写回去
FileWriter w=new FileWriter("e://myDocument.txt");
BufferedWriter bw=new BufferedWriter(w);
bw.write(times+"");
bw.close();
问题:每个用户每登录一次,就要操作一个文件,这有很安全但是效率低,咱们可不可以减少对文件的操作次数?
可以在init()方法中初始化,servletContext中属性times对应的初始值。
可以在destroy()方法中,一次性的将servletContext中属性的times对应的值,
写入到文件中,这样就可以减少对文件的操作次数。
<//重写init函数,init只会在启动tomcat调用servlet时被执行
public void init(){ try {
//只会被调用一次
System.out.println ("init被调用"); //添加网页访问次数的功能
//创建一个FileReader
FileReader f=new FileReader("e://myDocument.txt");
BufferedReader br=new BufferedReader(f);
//读出一行数据
String numVal=br.readLine();
//一定要关闭文件流
br.close();
int times=Integer.parseInt(numVal);
//将times值放入到servletcontext
this.getServletContext().setAttribute("visitTimes",times+"");
}
catch (Exception ex) {
}
} //重写destroy函数,destroy函数在tomcat关闭的时候被调用,要用shutdown.bat关,不能直接叉掉tomcat窗口
public void destroy(){
try {
System.out.println ("destroy被调用"); //再将新的次数写回去
FileWriter fw=new FileWriter("e://myDocument.txt");
BufferedWriter bw=new BufferedWriter(fw);
bw.write(this.getServletContext().getAttribute("visitTimes").toString());
bw.close();
}
catch (Exception ex) {
}
}
在login登录页面添加上面的代码,就能在每次登录的时候执行一次读取文件操作,在tomcat关闭的时候执行一次写文件操作。
ServletContext与网站计数器的更多相关文章
- ServletContext实现网站计数器
在网站开发中,有很多功能需要使用ServletContext,比如: 1.网站计数器 2.网站在线用户的显示 3.简单的聊天系统 总之,如果是涉及到不用用户共享数据,而这些数据量不大,同时又不希望写入 ...
- ServletContext结合Servlet接口中的init()方法和destroy()方法的运用----网站计数器
我们一般知道Servlet接口中的init()方法在tomcat启动时调用,destroy()方法在tomcat关闭时调用.那么这两个方法到底在实际开发中有什么作用呢?这就是这个随笔主要讲的内容. 思 ...
- application 网站计数器
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Histats安装Counter网站计数器 - Blog透视镜
Histats提供十分多样性的Counter网站计数器,可以依照你个人的喜好与需求,选择适合的Counter网站计数器,也可以针对同一网站,安装多个Counter网站计数器,作法其实比注册账号时更简单 ...
- Histats申请Counter网站计数器 - Blog透视镜
为了计算网页被浏览的次数,访客人数等统计数据,作为未来分析之用,可以向Histats申请免费的Counter网站计数器,它的功能相当齐全,同时也会保留一段时间的资料,当作统计比较的资料,更可以进一步付 ...
- servlet-servletContext网站计数器
1.在项目中新建文件夹新建文件nums.txt 2.在web.xml文件配置 <servlet> <description>This is the descriptio ...
- zabbix添加IIS网站计数器(并发连接数)详解
环境:windows server 2012 前提:IIS上要添加好配置 1,在被监控主机,powershell输入perfmon.msc 2,点击添加按钮 3,在下拉菜单中点击小箭头 ...
- Servlet之ServletContext以及文件操作
ServletContext ------------------------------------ ServletContext是什么? 与cookie,session比较. 可以把它想象成一个共 ...
- 【jsp网站计数功能】 application session
在jsp页面中实现网站计数器的方法有很多,其中比较普遍的做法是利用application 和session对象.application对象可被所有用户共享:session是单用户共享,用户从访问系统开 ...
随机推荐
- Jetty 服务器的知识
Jetty 服务器的知识 也许你还没有听说过这个Jetty服务器,不过它确实是一种比较轻量级的Java服务器,和Tomcat一样,专门解释JavaWeb程序的服务器.因为在之前学习Java Web 的 ...
- 查看SSIS Package 部署的历史记录
1,通过Integration Services Catalogs来查看 打开SSISDB->Projects,查看指定project的version history,这种方式查看Deploye ...
- js高程读书笔记(1-3章)
一.js简介 js是一种专为与网页交互而设计的脚本语言,由以下三个不同的部分组成: 1.ECMAScript,由ECMA-262(它规定了语言的这些组成部分:语法,类型,语句,关键字,保留字,操作符, ...
- ECMAScript 位运算符
位运算符是在数字底层(即表示数字的 32 个数位)进行操作的. 重温整数 ECMAScript 整数有两种类型,即有符号整数(允许用正数和负数)和无符号整数(只允许用正数).在 ECMAScript ...
- javascript中Date对象的应用——简易日历的实现
× 目录 [1]效果 [2]HTML [3]CSS[4]JS 前面的话 简易日历作为javascript中Date对象的常见应用,用途较广泛.本文将详细说明简易日历的实现思路 效果演示 HTML说明 ...
- Yii2的深入学习--自动加载机制
Yii2 的自动加载分两部分,一部分是 Composer 的自动加载机制,另一部分是 Yii2 框架自身的自动加载机制. Composer自动加载 对于库的自动加载信息,Composer 生成了一个 ...
- Android UI设计中一些不错的示例及第三方控件
1.二级ListView自定义布局ExpandableListView http://pan.baidu.com/s/1mhlJh12 密码:nhc2 2.ListView实现各种动画效果ListVi ...
- ViewPager的缓存机制
1.实现Viewpager的页面懒加载: 在某些情况下,例如使用ViewPager查看多张大图,此时多张图片不能一次性载入,只有在浏览该页面时才载入(或者预先载入下一页面)页面的具体内容. 2.可控V ...
- Linux rsync实现断点续传
Linux 主机之间即时传送文件,scp命令大家都很熟悉但当要传送的文件较大,过程中如果网络中断了,就比较悲剧了.这时候可以考虑使用rsync命令替代scp,实现断点续传文件. 试验:rsync使用 ...
- Asp.net 高性能 Sqlite ORM 框架之 sqliteSugar
一.介简 easyliter框架的升级版本,并且正式命名为SqliteSugar框架,另外Sugar系列还有 MySql和MsSql版本,Oracle版本待开发中(因为客户端太大一直在忧郁当中) 用S ...