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是单用户共享,用户从访问系统开 ...
随机推荐
- 无法启动此程序,因为计算机中丢失AdbWinApi.dll。尝试重新安装该程序以解决此问题
第一次搭建android开发环境,装完adb以后,打开DOS验证安装是否成功:但输入adb logcat调试时,系统弹出以下异常的对话框: 无法启动此程序,因为计算机中丢失AdbWinApi.dll. ...
- css绘制三角形原理
1.新建一个元素,将它的宽高都设置为0:然后通过设置border属性来实现三角形效果,下面是css绘制三角形的原理: <!DOCTYPE html> <html> <he ...
- jQuery学习易忘细节
1.类似于alert(""),但不会中断页面操作:console.log("last"); 2.javascript是HTML5以及所有现代浏览器中的默认脚本语 ...
- OpenCascade Tcl vs. ACIS Scheme
OpenCascade Tcl vs. ACIS Scheme eryar@163.com 摘要Abstract:本文通过OpenCascade的Tcl/Tk和ACIS的Scheme的对比来说明脚本语 ...
- Android入门(四)UI-创建自定义控件
原文链接:http://www.orlion.ga/441/ 一.引入布局 iphone应用顶部会有一个标题栏,我们可以模仿着做一个,但是如果我们的程序中很多个活动都需要这样的标题栏,如果 每一个活动 ...
- Android Fragment 解析和使用
Android Fragment的生命周期和Activity类似,实际可能会涉及到数据传递,onSaveInstanceState的状态保存,FragmentManager的管理和Transactio ...
- 【图论】深入理解Dijsktra算法
1. Dijsktra算法介绍 Dijsktra算法是大牛Dijsktra于1956年提出,用来解决有向图单源最短路径问题.但不能解决负权的有向图,若要解决负权图则需要用到Bellman-Ford算法 ...
- 基于HT for Web的3D拓扑树的实现
在HT for Web中2D和3D应用都支持树状结构数据的展示,展现效果各异,2D上的树状结构在展现层级关系明显,但是如果数据量大的话,看起来就没那么直观,找到指定的节点比较困难,而3D上的树状结构在 ...
- 激活当前视图菜单高亮呈现 V2.0
前一段时间,Insus.NET有分享一篇<激活当前视图菜单高亮呈现>http://www.cnblogs.com/insus/p/5287093.html 这篇只是同一控制器的菜单. 今天 ...
- asp.net后台注册js的四种方法
1. 用Response.Write方法 代码如下: Response.Write("<script type='text/javascript'>alert("kel ...