javaEE之-------统计站点刷新量

每一个站点都有自己的统计訪问量,可是少不了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,这就实现了站点刷新量的统计。

原文地址:https://www.cnblogs.com/zhchoutai/p/8446334.html

时间: 2024-11-13 13:00:48

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

javaEE之-------统计网站刷新量

每个网站都有自己的统计访问量,但是少不了服务器会出现意外情况,(如断电..) 所以就需要我们在网站挂机的前段时间将这个数据存起来.我们就需要用到网站最大的容器,application,我们采用观察者设计模式实现ServletContextListener接口.然后在销毁之前将这个数据存起来 ps:属于点点知识,大牛请绕道. 开发步骤: 第一步:实现ServletContextListener接口. 第二步:实现两个方法. contextInitialized contextDestroyed 第

统计网站浏览量

在电商公司基本上都会用到统计网站浏览量,目前我知道的统计网络浏览量的工具,一个是百度统计,另一个是CNZZ,这两个还挺好用的吧,关于百度统计浏览量可参考如下地址的文章: http://jingyan.baidu.com/article/2c8c281df76dd90008252ae5.html关于CNZZ的统计,可以参考如下地址: http://jingyan.baidu.com/article/6dad5075f51d64a123e36ee4.html

Django 统计文章阅读量(或热度排名)

添加新字段 为了记录文章的访问量,需要在文章的数据库表中新增一个用于存储阅读量的字段. 1 /models.py 2 3 class Post(models.Model): 4 #其它已有字段 5 #新添views字段记录阅读量 6 views = models.PositiveInterField(default=0) 注意 views 字段的类型为 PositiveInterField,该类型的值只允许为正整数或0,因为阅读量不可能 为负数.初始化时views的值为0. 添加模型方法 一旦用

九个技巧来提高SEO站点收录量

1:上网站内容的质量水平技巧    网站内容最好是原创,原创的质量高对比巨匠都知道吧.有些伴侣说文章不会写怎么办?其实文章也是可以写的,若是我们是做企业产物网站的,我们可以把公司的画册或者产品声名拿过来,把文字搬到网站上来,使用技巧,体例等等都是可以写的.只要连结更新即可,新网站建议一天有一篇的更新,坚持下去,也是一个不小的量.不建议一天采集几百条,然后几天不动.    2:频率的提交SEO搜索引擎    关于这点,可能有人不在做了.之前我做过一次测试,什么外链接都不做,然后就更新网站内容+提交

ServletContext设置全局变量实现统计站点访问次数

概述: 通过servlet实例设置全局变量,记录多个servlet实例访问总次数. HttpServletDemo02.java: package com.fl.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletExc

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

1.视图函数 # 不需要登录装饰器,匿名用户也可访问def article_detail(request, id, slug): # print(slug,id) article = get_object_or_404(ArticlePost, id=id, slug=slug) # 连接redis r = redis.StrictRedis(host=settings.REDIS_HOST, port=settings.REDIS_PORT, db=settings.REDIS_DB) # 总

统计站点访问量

#!/bin/bash#write by zhenglong 20150730 #Centos# http sataistics log_path1=/usr/local/apache/logs/access_log domain="www.xx.com" email="[email protected]" maketime=`date +%d/%b/%Y` logdate=`date -d "yesterday" +%Y-%m-%d` cat 

PHPCMS后台统计点击量时出现点击数不改变可能丢失了JS代码。

<script language="JavaScript" src="{APP_PATH}api.php?op=count&id={$id}&modelid={$modelid}"></script> 在phpcms中show.html 页面添加如上的js  代码实现.

git代码量统计(转载)

git统计某人代码量 指定用户名版 git log --author="your_name_here" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' 结果示例:added lines: