每一个站点都有自己的统计訪问量,可是少不了server会出现意外情况,(如断电。。)

所以就须要我们在站点挂机的前段时间将这个数据存起来。

我们就须要用到站点最大的容器,application,我们採用观察者设计模式实现ServletContextListener接口。然后在销毁之前将这个数据存起来

ps:属于点点知识。大牛请绕道。

开发步骤:

第一步:实现ServletContextListener接口。
第二步:实现两个方法。
contextInitialized
contextDestroyed

第三步:在web.xml中加入<listener/>节点。

详细实现:

我们须要实现ServletContextListener接口,里面用两个方法。我们须要在初始化的时候从文件中面读出来。然后在销毁的时候存进去。

读取文件:

public class MyServletContext implements ServletContextListener {
//这是监听器。统计站点的訪问量
/*
* 启动的时候(初始化)从文件中读取。存在servletcontext中
* 销毁的时候,把数据从servletcontext中取出来,存到文件中
*/
String filename ="";
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext context=sce.getServletContext();
String filename=context.getRealPath("/count.txt");
try {
BufferedReader br =new BufferedReader(new FileReader(filename));
String num =br.readLine();
Integer numer =Integer.valueOf(num);
context.setAttribute("count", numer);//将读取的值存放到servletcontext容器中
br.close();
} catch( Exception e) {
e.printStackTrace();
context.setAttribute("count", new Integer(0));//出异常说明没有值读取,所以设置为0;
} }

 

销毁将数据存储到文件(仅仅有文件才是永久储存)

@Override
public void contextDestroyed(ServletContextEvent sce) {
ServletContext context=sce.getServletContext();
String filename=context.getRealPath("/count.txt");
try {
PrintWriter pw =new PrintWriter(filename);
Integer count=(Integer) context.getAttribute("count");//从容器中获取对应count值
// pw.write(count);//存的文件tomcat文件夹下
pw.print(count);
System.out.println("销毁了"+count);
pw.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

訪问量的加入

訪问量我们须要写在过滤器里面。每次过滤一次我们从context中加一次

	public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//这里考虑到多线程,这样写数据不准确,所以须要採用多线程
final ServletContext sct=request.getServletContext();
//启用新的线程去计数,不影响整个站点的速度,这样做非常好
new Thread(){
public void run(){
MyCount.addcount(sct);//把以下这个总体上锁。。 }
}.start();
chain.doFilter(request, response);
}

统计数量会存在多线程的问题。所以我们採用多线程处理,仅仅让统计数量线程,不影响整个站点的效率

//把这个上锁,仅仅会子分支会慢,不会影响整个站点的速度
class MyCount{
public synchronized static void addcount(ServletContext sct){
Integer count=Integer.parseInt(""+sct.getAttribute("count"));
count++;//加入之后,我们须要加入容器里面进去
sct.setAttribute("count", count);
System.out.println(count);
}
}

MyServletContext在初始化的时候会从文件中加载,不存在会自己主动设置为一,每过一次filter。就会加1,这就实现了站点刷新量的统计。

javaEE之-------统计站点刷新量的更多相关文章

  1. javaEE之--------统计站点在线人数,安全登录等(观察者设计模式)

    整体介绍下:  监听器:监听器-就是一个实现待定接口的普通Java程序,此程序专门用于监听别一个类的方法调用.都是使用观察者设计模式. 小弟刚接触这个,做了些简单的介绍.大神请绕道,技术仅仅是一点点, ...

  2. Oracle查询优化之减少统计的数据量

    统计各部门人数很简单,通过部门分组即可,要统计部门以下下级部门的人数也简单,通过递归.要统计所有有下级部门的部门人数(包含下级)页比较简单, 先查询出有下级的部门,在对每个部门进行递归查询,如下: ) ...

  3. wordpress添加文章浏览统计(刷新不重复)

    wordpress本身不带文章浏览统计,可以用插件wp-postview,但是刷新还是算一个浏览次数. 1.首先在主题下functions.php里增加以下代码,这段代码也是网上可以找到的 //add ...

  4. Mysql查询优化之 触发器加中间表 方法优化count()统计大数据量总数问题

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6138288.html 在上一篇博文我们提到,分页有三种方法.其中,第三种是我们最常用的.然而,在实际应用过程中 ...

  5. 在windows 上统计git 代码量

    1 需要系统安装 git + gawk git 安装自行百度 gawk 到官网下载 http://gnuwin32.sourceforge.net/packages/gawk.htm 1.2 下载好后 ...

  6. 通过Confulence API统计用户文档贡献量

    Confulence提供了非常清晰的RESTful API,直接使用API比confluence_python_cli这个库更方便. 参考文档:https://developer.atlassian. ...

  7. phpcms v9全站点击量排行代码

    前台: <ul> {pc:content action="sitehits" siteid="1" num="10" order ...

  8. 统计每日单量MySQL语句

    -- 每日单量 select DATE_FORMAT(createtime,'%Y-%m-%d') as days,count(*) count from ibt_shop_order group b ...

  9. 使用redis实现【统计文章阅读量】及【最热文章】功能

    1.视图函数 # 不需要登录装饰器,匿名用户也可访问def article_detail(request, id, slug): # print(slug,id) article = get_obje ...

随机推荐

  1. ZBrush软件特性之3D图层

    用过Photoshop的小伙伴都知道图层的概念,在Photoshop中可以创建许许多多的图层,在每一图层中又可以分别编辑图像信息.ZBrush®中的3D图层,也可以简单理解成Photoshop中的图层 ...

  2. linux系统利用GPU跑数据(tensorflow)

    https://blog.csdn.net/qq_26591517/article/details/82469680 查看机器上GPU情况 命令: nvidia-smi 功能:显示机器上gpu的情况 ...

  3. 由Request Method:OPTIONS初窥CORS(转)

    刚接触前端的时候,以为HTTP的Request Method只有GET与POST两种,后来才了解到,原来还有HEAD.PUT.DELETE.OPTIONS…… 目前的工作中,HEAD.PUT.DELE ...

  4. iOS开发——GCD总结

    Grand Central Dispatch,简称GCD,在异步执行任务的技术之一. 一般将应用程序中记述的线程管理用的代码在系统级中实现,开发者只需要定义想执行的任务并追加到适当的Dispatch ...

  5. HBuilder 连接小米手机

    (1)手机与电脑未用USB数据线连接(嘿嘿,这一部大家估计都做到了,可略过) (2)电脑上需要安装电脑版的手机助手,帮助手机顺利连接上(用安卓手机联调的话可安装360手机助手,若用iPhone的话可安 ...

  6. 安装anaconda和tensorflow

    一.首先下载anaconda,下载:Anaconda2-4.3.1-Linux-x86_64.sh(https://repo.continuum.io/archive/)参考网址:https://ww ...

  7. react添加右键点击事件

    1.在HTML里面支持contextmenu事件(右键事件).所以需要在组建加载完时添加此事件,销毁组建时移除此事件. 2. 需要增加一个state,名称为visible,用来控制菜单是否显示.在_h ...

  8. HDU--4891--The Great Pan--暴力搜索

    The Great Pan Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  9. [Angular] Create a ng-true-value and ng-false-value in Angular by controlValueAccessor

    If you're coming from AngularJS (v1.x) you probably remember the ng-true-value and ng-false-value di ...

  10. 深入C++ new/delete,malloc/free解析

    深入C++ new/delete,malloc/free解析 1.malloc与free是C++/C语言的标准库函数.new/delete是C++的运算符. 它们都可用于申请动态内存和释放内存 2.对 ...