实现方法:拦截器+session存储

拦截器初始化时,即在@PostConstruct注解的initMethod方法中读取数据库的isystem对象,该对象记录了网站访问量的信息。

拦截器销毁时,即在@PreDestroy注解的destroyMethod方法中向数据库更新isystem对象。

拦截器的初始化和销毁都只有在应用启动和关闭的时候才被调用,因此减少了对数据库的访问。

SpringMVC中,每一次请求控制器,都会先执行拦截器的preHandle方法,在该方法内先查看session中的一个标志accessedFlag,如果该标志不存在,说明此次会话没有被统计,因此在isystem对象中增加一次访问量,并向session添加标志accessedFlag,下一次访问时,该session不再添加访问量,即一个session算访问一次。并且在session中存储isystem对象,并于网页显示数据的调用。

为了保证并发的正确性,局部代码块使用同步锁,见下面红色部分。

总结:拦截器有一个静态属性isystem,用户第一次请求时,都会更新这个属性的值。用户的每一次请求都会把该属性放入到用户的session中去。因此,B用户第一次访问后,A用户第二次访问时(和第一次访问共享一个session),A用户的session中的isystem也会被更新。

拦截器类如下:

package com.wuchao.utils.interceptor;

import javax.annotation.PostConstruct;

import javax.annotation.PreDestroy;

import javax.annotation.Resource;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.wuchao.blog.system.bo.intf.IsystemBo;

import com.wuchao.blog.system.po.Isystem;

import com.wuchao.blog.user.controller.LoginController;

import com.wuchao.utils.config.SpringContextHolder;

public class RequestInterceptor extends HandlerInterceptorAdapter {

private static Logger log = Logger.getLogger(LoginController.class);

@Resource(name="isystemBo")

public IsystemBo isystemBo;

@Resource(name="springContextHolder")

SpringContextHolder springContextHolder;

public static Isystem isystem;

//请求控制器前,处理请求

@Override

public boolean preHandle(HttpServletRequest request,

HttpServletResponse response, Object handler) throws Exception {

try {

log.info("RequestInterceptor");

//网站访问量+1

if(isystem==null) {

log.info("isystem==null");

isystem = isystemBo.getIsystemByDefault();

}

if(isystem!=null) {

//每一个session理论上只能记一次访问,因此在session里面存一个访问标记,如果存在标记,则不再计算此次访问

String accessedFlag = "accessedFlag";

if(request.getSession().getAttribute("accessedFlag")==null) {

//同步锁

synchronized(this) {

log.info("网站访问量+1,存入session");

isystem.setAmountOfAccess(isystem.getAmountOfAccess()+1);

request.getSession().setAttribute("Isystem", isystem);

request.getSession().setAttribute("accessedFlag", accessedFlag);

}

}

}

}catch(Exception e) {

e.printStackTrace();

throw e;

}

return true;

}

@Override

public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,

ModelAndView modelAndView) throws Exception {

}

@Override

public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)

throws Exception {

}

/*

* 实例化时执行的操作

*/

@PostConstruct

public void initMethod() throws Exception {

log.info("initMethod 被执行");

//加载isystem对象

if(isystem==null) {

log.info("加载isystem");

isystem = isystemBo.getIsystemByDefault();

}

}

/*

* 销毁前执行的操作

*/

@PreDestroy

public void destroyMethod() throws Exception {

log.info("destroyMethod 被执行");

//保存isystem

if(isystem!=null) {

isystemBo.saveIsystem(isystem);

}

}

}

java实现网站统计功能_网站访问量统计功能的实现相关推荐

  1. python测试网站功能_网站测试流程、要求及测试报告

    网站测试流程.要求及测试报告 一个网站基本完工后,需要通过下面三步测试才可以交活. 一. 制作者测试,包括美工测试页面.程序员测试功能.在做完后第一时间内有制作者本人进行测试. a) 页面 包括首页. ...

  2. 打开特定的网站特别慢_网站建设的注意事项

    最近标兵seo的一些客户都在咨询我:企业在网站建设的过程中应该注意些什么?其实这一类的文章和内容,我在之前就写过一篇<营销型文章如何制作>,这里面也有所提及. 营销型网站 下面标兵SEO就 ...

  3. 网站运营手册_网站建设PC端开发

    网站建设系统开发,网站建设PC端开发,网站建设APP开发,网站建设软件开发,网站建设平台开发,网站建设模式开发,网站建设源码开发,网站建设商城开发PC.WAP.微信.小程序APP五站合一网站管理系统是 ...

  4. 网站互点排名掉了网站互点排名掉了网站互点_网站随意改版,是否会对网站造成降权等影响?...

    随着互联网时代的到来,各种功能界面以及用户体验都在不断迭代,这就是互联网的精髓.网站seo改版也是其中的一部分,在很多行业,网站改版已成为必然,但是网站改版会不会造成网站降权呢? 其实是有影响的,在很 ...

  5. 百度爬虫爬到虚拟链接 网站被黑_网站地图sitemap对SEO优化有什么作用?

    网站地图:是指明网站基本信息的页面,如网站结构.栏目.内容描述等,用户可以借助网站地图快速了解网站信息,反过来说,一个设计良好的网站地图应该起到让用户快速了解网站结构和内容的作用. 网站地图实际上并非 ...

  6. 一个完整网站的代码_网站优化三步走,怎样给自己的网站做优化?

    网站优化有难度?自己的网站优化不起来?怎样给自己的网站做优化呢?这是网站优化的灵魂三连.很多头条的网友都来咨询我这几个网站优化的问题,今天特意写了这么一篇网站优化扫盲贴. 网站优化 网站优化第一步:代 ...

  7. 开源网站有哪些_网站建设你懂的多少啊?

    01 你建过网站吗? 现在很多人可以在网站上看到自己想要查询的东西,那么你对网站研究过吗?这些网站的搭建因素又是什么呢?又有哪些注意的事项呢?你只要掌握了这四种技巧就可以自己搭建网站了:今天就让小编为 ...

  8. 个人网站备案起名_网站更换服务器空间后,需要重新备案吗?

    搭建过网站的企业和个人都知道,网站想要在国内上线就必须要进行网站备案,不管是个人网站还是企业网站.域名备案,其主要的目的是为了防止网上出现非法网络经营活动,打击不良互联网信息的传播,如果网站不备案的话 ...

  9. 在页脚里显示本页统计数据_外卖营业统计里的数据您能看懂吗?

    自己的外卖店铺在商圈里是处于什么水平?这周的营业额相对上周下滑很多,是哪里出现问题?无效订单这么多,到底是哪个环节没做好?这些问题在"营业统计"的数据分析里统统可以得到解答. &q ...

  10. idea强大功能_强大的打印功能

    自1988年IBM®AS /400®平台问世以来,IBM一直在缓慢但肯定地将增强功能引入操作系统的打印功能. 这些增强功能中的许多增强功能都来得很慢(例如,仅在7.1版中,IBM才提供了将假脱机文件转 ...

最新文章

  1. opencv mat2 ffmpeg frame
  2. 【Python】青少年蓝桥杯_每日一题_6.19_画风车
  3. 令人窒息的数学动态图
  4. 10款Flash和Javascript网页音乐播放器
  5. STM32采集电阻触摸贴膜
  6. Python Challenge 过关心得(0)
  7. robotframework 新建UI自动化测试用例实例一(2)
  8. nodejs,webpack安装以及初步运用
  9. eclipse及tomcat设置编码
  10. c600 raid linux,华硕Z9PA-D8 (-C600 INTEL RAID)主板驱动3.8.0.1108版下载,适用于Win8-64,win7,Win7-64,winxp-驱动精灵...
  11. 模块[camera]_摄影基础知识: 曝光补偿完全指南
  12. 关于virtualbox虚拟电脑控制台严重错误解决方法。。。(博客园搬家至此,尚未整理)(六)
  13. 关于ios::sync_with_stdio(false);和cin.tie(0);cout.tie(0);
  14. UG曲面造型——手机壳
  15. 久视伤血,久卧伤气,久坐伤肉,久立伤骨,久行伤筋
  16. linux故障报错及解决方法
  17. 【GO | 基于linux和Windows平台的下载安装及配置】
  18. 解决Win10开始屏幕磁铁图标无法加载问题
  19. JAVA基础学习20191-01-基础部分
  20. 杰理6905A芯片使用T卡升级方法

热门文章

  1. 实时数仓在有赞的实践
  2. Android仓库管理系统
  3. 使用淘宝api直接上传图片的方法
  4. Dreamweaver CS6 破解补丁免费下载
  5. 计算机键盘上的2个定位键,电脑键盘上Tab 键的神奇之处!(用途详解)
  6. 纵横算法之三:算法到底考什么
  7. 【很有趣】用Python实现一个简单的人脸识别,原来我和这个明星如此相似
  8. 80端口映射外网方法
  9. 苹果Mac中delete键的七种用法!
  10. 12本最具影响力的程序员书籍_书籍书评_酷勤网