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

每个网站都有自己的统计访问量,但是少不了服务器会出现意外情况,(如断电。。)

所以就需要我们在网站挂机的前段时间将这个数据存起来。我们就需要用到网站最大的容器,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,这就实现了网站刷新量的统计。

时间: 2024-10-06 07:27:30

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

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

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

统计网站浏览量

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

Flume+Kafka+Storm+Redis构建大数据实时处理系统:实时统计网站PV、UV+展示

[TOC] 1 大数据处理的常用方法 前面在我的另一篇文章中<大数据采集.清洗.处理:使用MapReduce进行离线数据分析完整案例>中已经有提及到,这里依然给出下面的图示: 前面给出的那篇文章是基于MapReduce的离线数据分析案例,其通过对网站产生的用户访问日志进行处理并分析出该网站在某天的PV.UV等数据,对应上面的图示,其走的就是离线处理的数据处理方式,而这里即将要介绍的是另外一条路线的数据处理方式,即基于Storm的在线处理,在下面给出的完整案例中,我们将会完成下面的几项工作: 1

JSP:用隐式对象统计网站访问次数

JSP:用隐式对象统计网站访问次数 jsp 隐式对象 赵振江 隐式对象 application对象 利用隐式对象为某一网站编写一个JSP程序,统计该网站的访问次数. 一种情况是:按照客户进行统计(按照浏览器进行统计,一个浏览器如果访问网站的话,就算一次访问,换句话说如果这个浏览器刷新多次网站的话,也算是一次访问): 另一种情况:刷新一次页面,就算是一次访问. 要求用隐式对象去实现. counter.jsp <%@ page language="java" import="

监听器应用【统计网站人数、自定义session扫描器、踢人小案例】

从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器.这篇博文主要讲解的是监听器的应用. 统计网站在线人数 分析 我们在网站中一般使用Session来标识某用户是否登陆了,如果登陆了,就在Session域中保存相对应的属性.如果没有登陆,那么Session的属性就应该为空. 现在,我们想要统计的是网站的在线人数.我们应该这样做:我们监听是否有新的Session创建了,如果新创建了Sesssion,那么在线人数就应该+1.这个在线人数是整个站点的,所以应该有Context对象保存.

七、统计网站中不同省份用户的访问数

一.需求 针对log日志中给定的信息,统计网站中不同省份用户的访问数 二.编程代码 package org.apache.hadoop.studyhdfs.mapreduce; import java.io.IOException; import org.apache.commons.lang.StringUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; im

如何增加增加网站收录量

做SEO总是围绕着一个问题,就是网站的收录问题,网站收录分别有站内和站外收录.但是有时有收录的情况却不是很理想,所以小编我总结的一些经验,建议大家针对网站收录不好的情况下,我们可以用一些在网上有的一些资源来吸引蜘蛛收录爬行网站,以下是我的经验分享给大家(本文来自e良师益友网,elsyy.com): 一.如何更新站内文章提高收录量 其实我们做SEO工作时,每天都要更新4-6篇文章,而每天要让搜索引擎收录3-4篇文章才算正常,所以收录少的站内文章网站,可能你更新文章的方法不对,所以导致站内文章收录情

统计网站访问人数

添加一个Global.asax文件,加入以下代码: void Application_Start(object sender, EventArgs e) { // 在应用程序启动时运行的代码 int count = 0; System.IO.StreamReader srd; string file_path = Server.MapPath("counter.txt"); //打开文件进行读取 srd = System.IO.File.OpenText(file_path); whi

学习笔记_过滤器应用_1(分ip统计网站的访问次数)

分ip统计网站的访问次数 ip count 192.168.1.111 2 192.168.1.112 59 统计工作需要在所有资源之前都执行,那么就可以放到Filter中了. 我们这个过滤器不打算做拦截操作!因为我们只是用来做统计的. 用什么东西来装载统计的数据.Map<String,Integer> 整个网站只需要一个Map即可! Map什么时候创建(使用ServletContextListener,在服务器启动时完成创建,并只在到ServletContext中),Map保存到哪里!(Ma