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,这就实现了站点刷新量的统计。
javaEE之-------统计站点刷新量的更多相关文章
- javaEE之--------统计站点在线人数,安全登录等(观察者设计模式)
整体介绍下: 监听器:监听器-就是一个实现待定接口的普通Java程序,此程序专门用于监听别一个类的方法调用.都是使用观察者设计模式. 小弟刚接触这个,做了些简单的介绍.大神请绕道,技术仅仅是一点点, ...
- Oracle查询优化之减少统计的数据量
统计各部门人数很简单,通过部门分组即可,要统计部门以下下级部门的人数也简单,通过递归.要统计所有有下级部门的部门人数(包含下级)页比较简单, 先查询出有下级的部门,在对每个部门进行递归查询,如下: ) ...
- wordpress添加文章浏览统计(刷新不重复)
wordpress本身不带文章浏览统计,可以用插件wp-postview,但是刷新还是算一个浏览次数. 1.首先在主题下functions.php里增加以下代码,这段代码也是网上可以找到的 //add ...
- Mysql查询优化之 触发器加中间表 方法优化count()统计大数据量总数问题
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6138288.html 在上一篇博文我们提到,分页有三种方法.其中,第三种是我们最常用的.然而,在实际应用过程中 ...
- 在windows 上统计git 代码量
1 需要系统安装 git + gawk git 安装自行百度 gawk 到官网下载 http://gnuwin32.sourceforge.net/packages/gawk.htm 1.2 下载好后 ...
- 通过Confulence API统计用户文档贡献量
Confulence提供了非常清晰的RESTful API,直接使用API比confluence_python_cli这个库更方便. 参考文档:https://developer.atlassian. ...
- phpcms v9全站点击量排行代码
前台: <ul> {pc:content action="sitehits" siteid="1" num="10" order ...
- 统计每日单量MySQL语句
-- 每日单量 select DATE_FORMAT(createtime,'%Y-%m-%d') as days,count(*) count from ibt_shop_order group b ...
- 使用redis实现【统计文章阅读量】及【最热文章】功能
1.视图函数 # 不需要登录装饰器,匿名用户也可访问def article_detail(request, id, slug): # print(slug,id) article = get_obje ...
随机推荐
- CDR X6设计师的福利,3折特惠!
最新消息称,即日起CorelDRAW官方为回馈新老用户长期以来的支持,特别推出CorelDRAW X6降价活动.目前CorelDRAW X6售价仅为2399元,照这个价格,CDR 2017 会 ...
- checkbox控制显示隐藏
显示文本框<input type = "checkbox" id="checkbox" onclick="on_hide();"/&g ...
- NodeJS学习笔记 (5)网络服务-http-req(ok)
原文:https://github.com/chyingp/nodejs-learning-guide 自己敲代码: 概览 本文的重点会放在req这个对象上.前面已经提到,它其实是http.Incom ...
- 浅谈python 中正则的一些函数
主要的函数有 : match() search() findall() group() groups() split() match (): 含义 开头匹配,匹配成功返回一个对象失败则 ...
- HTTP——学习笔记(1)
名词解释: 协议: HTTP:HyperText Transfer Protocol,超文本传输协议,属于应用层的协议 FTP:File Transfer Protocol,文件传输协议,相比于HTT ...
- cogs 181. [USACO Jan07] 最高的牛
181. [USACO Jan07] 最高的牛 ★★ 输入文件:tallest.in 输出文件:tallest.out 简单对比时间限制:1 s 内存限制:32 MB FJ's N ( ...
- hdu_5139 概率问题
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int main( ...
- POJ 3173 模拟
按照题意模拟就好-- //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; in ...
- Metasploit的三种启动方式
不多说,直接上干货! 注意:博主我用的是Kali linux 2016.2(Rolling). msfcli 的启动 root@kali:~# msfcli -h bash: msfcli: 未找到 ...
- Android RecyclerView 水平滚动+自动循环轮播
主要处理的地方: 1.RecyclerView中Adapter的item个人可以无限轮询. 2.RecyclerView自动滑动 3.手指按下时滑动停止,手指抬起后继续自动滑动 public clas ...