zoukankan      html  css  js  c++  java
  • 如何实现对网站页面访问量的统计(javaweb和php)

    如何实现对网站页面访问量的统计(javaweb和php)

    一、总结

    一句话总结:其实很简单啦,每访问一次那个页面对应的index函数(控制器中的那个函数)访问次数就加1就可以了。

    1、javaweb中如何实现对网站页面访问量的统计?

    用拦截器+定时更新

    要对页面访问量统计也就是pv,主要就是拦截,写一个拦截器类实现HandlerInterceptor接口,拦截所有请求

    然后拦截请求需要做的是什么?从数据库取出访问量?然后加1?这显然是不合理的,因为请求太多了,对数据库的频繁交互应该避免,

    2个小时(自定义:时间越短越不容易造成访问量数据丢失)

    2、thinkphp中如何实现对网站页面访问量的统计?

    thinkphp中真实超级简单

    每访问一次那个页面对应的index函数(控制器中的那个函数)访问次数就加1就可以了。

    记得加1的时候用自增函数(setInc)就好

    二、javaweb中如何实现对网站页面访问量的统计?

    我用的springmvc,大致讲讲自己的思路吧:

    要对页面访问量统计也就是pv,主要就是拦截,写一个拦截器类实现HandlerInterceptor接口,拦截所有请求,但是需要注意的是,配置拦截器的时候

    需要排除不拦截的请求,因为对于静态资源css,js,以及图片,还有后台管理系统我们是不需要拦截的,我们只拦截用户访问的页面,也就是你展示

    给用户的那些页面,配置拦截大概这样配置

     

    	<mvc:interceptor>
    			<!-- 拦截路径 -->
    			<mvc:mapping path="/**" />
    			<mvc:exclude-mapping path="后台管理url就不透露了"/><!-- 不拦截后台管理 -->
    			<mvc:exclude-mapping path="/css/**"/>
    			<mvc:exclude-mapping path="/js/**"/>
    			<mvc:exclude-mapping path="/images/**"/>
    			<mvc:exclude-mapping path="/fonts/**"/>
    			<bean class="com.colin.interceptor.InterceptAllRequest"/>
    		</mvc:interceptor>

     

    然后拦截请求需要做的是什么?从数据库取出访问量?然后加1?这显然是不合理的,因为请求太多了,对数据库的频繁交互应该避免,

    我想的是写一个监听器,servletContextListener,监听servletContext的初始(只在服务器启动的时候被创建),服务器启动时候去数据库中取出访问量,

    放到servletContext(全局的域,在其他请求中都可以取出来),然后每次一个请求都把放在servletContext中的访问量加1(这个是在拦截器中做的事情),在初始化servletContext时还需要做一个事情,开启线程定时把servletContext中的访问量存储到数据库中,如何定时执行?我想的是写一个循环,执行一次循环就让线程休眠

    2个小时(自定义:时间越短越不容易造成访问量数据丢失),后来偶然看到了jdk文档中一个类,Timer,一个定时器,详细参考文档,它的访问可以实现定时执行任务,原理估计也差不多吧,这大概就是实现过程,具体代码就不贴了。有个比较严重的问题没有考虑到:由于ServletContext在内存中

    只有一个对象,并发访问可能会造成线程安全问题,初步想在ServletContext中当一个线程安全的集合,数据的存取放在集合中

     
    参考:如何实现对网站页面访问量的统计? - CSDN博客
    https://blog.csdn.net/qq_37667364/article/details/79326243
     
     

    三、thinkPHP实现新闻访问量统计

    public function detail(){
            $this->assign('page_title','新闻中心');
            $id=I('id',0,'int');
            $newsModel=M('News');
            // 新闻点击量的实现,借助于setInc()函数,每访问一次新闻字段“in_on”加1
            $newsModel->where(array('id'=>$id))->setInc('in_on',1);
            $news=$newsModel->find($id);
            $this->assign('news',$news);
            $this->display();
        }

    在新闻详细页面控制器中加入
    $newsModel->where(array('id'=>$id))->setInc('in_on',1);
    $news=$newsModel->find($id);

    利用setInc实现没访问一次字段‘in_on’的值加1,这里字段“in_on”的初始值为0.

     
  • 相关阅读:
    关于int8_t,uint8_t.....等数据类型的理解
    导出函数__declspec(dllexport)
    c++中的namespace
    GitHub C 和 C++ 开源库的清单(含示例代码)
    进制之间的转换一
    为 JSON 字符串创建对象
    HTML5 简单Demo1
    主要浏览器的调试工具
    fiddler2抓包工具使用图文教程
    JAVA将秒的总和转换成时分秒的格式
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9545755.html
Copyright © 2011-2022 走看看