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.

     
  • 相关阅读:
    AtCoder Beginner Contest 167
    AtCoder Beginner Contest 166
    AtCoder Beginner Contest 165
    AtCoder Beginner Contest 164
    AtCoder Beginner Contest 163
    AtCoder Beginner Contest 162
    AtCoder Beginner Contest 161
    AtCoder Beginner Contest 160
    AtCoder Beginner Contest 159
    自定义Mybatis自动生成代码规则
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9545755.html
Copyright © 2011-2022 走看看