什么是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与网站计数器的更多相关文章

  1. ServletContext实现网站计数器

    在网站开发中,有很多功能需要使用ServletContext,比如: 1.网站计数器 2.网站在线用户的显示 3.简单的聊天系统 总之,如果是涉及到不用用户共享数据,而这些数据量不大,同时又不希望写入 ...

  2. ServletContext结合Servlet接口中的init()方法和destroy()方法的运用----网站计数器

    我们一般知道Servlet接口中的init()方法在tomcat启动时调用,destroy()方法在tomcat关闭时调用.那么这两个方法到底在实际开发中有什么作用呢?这就是这个随笔主要讲的内容. 思 ...

  3. application 网站计数器

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. Histats安装Counter网站计数器 - Blog透视镜

    Histats提供十分多样性的Counter网站计数器,可以依照你个人的喜好与需求,选择适合的Counter网站计数器,也可以针对同一网站,安装多个Counter网站计数器,作法其实比注册账号时更简单 ...

  5. Histats申请Counter网站计数器 - Blog透视镜

    为了计算网页被浏览的次数,访客人数等统计数据,作为未来分析之用,可以向Histats申请免费的Counter网站计数器,它的功能相当齐全,同时也会保留一段时间的资料,当作统计比较的资料,更可以进一步付 ...

  6. servlet-servletContext网站计数器

    1.在项目中新建文件夹新建文件nums.txt 2.在web.xml文件配置 <servlet>     <description>This is the descriptio ...

  7. zabbix添加IIS网站计数器(并发连接数)详解

    环境:windows server 2012 前提:IIS上要添加好配置   1,在被监控主机,powershell输入perfmon.msc   2,点击添加按钮     3,在下拉菜单中点击小箭头 ...

  8. Servlet之ServletContext以及文件操作

    ServletContext ------------------------------------ ServletContext是什么? 与cookie,session比较. 可以把它想象成一个共 ...

  9. 【jsp网站计数功能】 application session

    在jsp页面中实现网站计数器的方法有很多,其中比较普遍的做法是利用application 和session对象.application对象可被所有用户共享:session是单用户共享,用户从访问系统开 ...

随机推荐

  1. KnockoutJS 3.X API 第四章 数据绑定(4) 控制流with绑定

    with绑定的目的 使用with绑定的格式为data-bind="with:attribute",使用with绑定会将其后所跟的属性看作一个新的上下文进行绑定.with绑定内部的所 ...

  2. StringUtils 的用法

    1.public static boolean isEmpty(String str) 判断某字符串是否为empty,标准是 null == str 或 str.length() == 0 2.pub ...

  3. CSS3选择器的研究

    属性选择器 [title]:选择带有title属性的元素 [title='hello']:选择属性是title并且值是hello的元素 [title~='hello']:选择属性是title并且部分值 ...

  4. 用命令行编译java并生成可执行的jar包

    用命令行编译java并生成可执行的jar包 1.编写源代码. 编写源文件:CardLayoutDemo.java并保存,例如:I:\myApp\CardLayoutDemo.java.程序结构如下: ...

  5. Cocos2d-x 3.2 学习笔记(六)Layer

    Layer 游戏中的背景容器,Layer类是Node类的一个子类,它实现了触屏事件代理(TouchEventsDelegate)协议. LayerColor是Layer的一个子类,它实现了RGBAPr ...

  6. Unity3D 开发之shader教程(浅谈光照之漫反射diffuse)

    在游戏开发过程中,光照应该是必不可少部分,当然,这是指大多数的稍微大型一些的3D游戏会需要,给模型或者山山水水加上光照,会看上去更加的真实,获得更好的体验.一个本身不发光物体显示什么颜色,在于本身反射 ...

  7. [New Portal]Windows Azure Virtual Machine (19) 关闭Azure Virtual Machine与VIP Address,Internal IP Address的关系(1)

    <Windows Azure Platform 系列文章目录> 默认情况下,通过Azure Management Portal创建的Public IP和Private IP都是随机分配的. ...

  8. java设计模式学习(-)

    在我目前看来博客的作用就是笔记了,所谓的原创也仅仅是复制了别人的东西实践了一下,但为了学习记忆确实要记录下来.在这里感谢网络各处的资源,原谅我对资源的索取. 接下来每天开始学以则设计模式或者几天学一则 ...

  9. oracle表数据类型number对应java中BIgDecimal转int

    oracle中id为number类型,在java获取id时用getBigDecimal 相匹配, 如果想转换成int,重写model中的getInt方法: public Integer getInt( ...

  10. 解决AndroidStudio升级版本后恢复初始化设置的问题

    今天把AndroidStudio升级到1.5后发现所有的个性设置全变为初始化了.包括皮肤啊,字体大小.颜色啊,以及快捷键等等.一瞬间就懵了. 升级完后好像有一个弹窗就是提示是否要继续使用之前的配置的, ...