利用JS跨域做一个简单的页面訪问统计系统

利用JS跨域做一个简单的页面訪问统计系统

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

事实上在大部分互联网web产品中,我们一般会用百度统计或者谷歌统计分析系统,通过在程序中引入特定的JS脚本,然后便能够在这些统计系统中看到自己站点页面详细的訪问情况。可是有些时候,因为一些特殊情况,我们须要自己来设计统计系统。因为前段时间公司的业务需求,我也是自己尝试了下,本文提供的是一个基本思路,统计系统也比較简单。

 
几个基本统计需求:
1.统计web每一个页面用户訪问量
2.统计用户訪问者的和IP地址信息
3.页面之间的跳转情况
4.訪问高峰时间段
 
server结构:
利用JS跨域做一个简单的页面訪问统计系统
数据库表设计:
     以上仅仅是我简单列举的需求,这边简单的就一张统计表,而这张统计表能满足的需求是不仅仅仅仅是上面四个主要的需求的,能够看需求情况再做对应的业务处理。
 
tb_visit_count_log
 
ID ip (varchar) IP地址 title(varchar)标题 cur_page(varchar) 当前页面 from_page(varchar) 源页面 time(datetime)日期时间 app(varchar) 应用
 

数据採集:
     我们提交编写一个JS脚本,用来抓取当前页面中我们须要的数据,然后通过跨域请求道我们的Statistics Server进行存储,便于之后的统计分析业务的操作。
  JS跨域:
     我们都知道在开发web应用的时候,我们常常利用<script src=”//ajax.proxy.ustclug.org/ajax/libs/jquery/1.9.1/jquery.min.js”></script>去请求其他server内的脚本资源,src是source的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置。所以利用这一点,我们能够通过JS动态创建<script>标签,并抓取页面相关的信息后,设置该标签src地址为远程Statisticsserver地址,将其加入�到当前文档中,该标签便会自己主动将请求发送到指定server,而server便可解析改请求中的參数和请求信息,将其存储入库。
  

  演示样例代码:
复制代码
     (function() { var title = document.getElementsByTagName("title")[0].innerHTML, // 页面标题
                 url = window.location.href, // 当前请求路径名称
                site = window.location.host, // 网站host
                // 此处为从header获取 Refere參数,详细获取看当前的web程序
                 ref = ' <%=request.getHeader( "Referer") %>', param = "?title="+title+" &url="+url+" &ref="+ref ,     // 引用页地址
                script = document.createElement("script"); script.src = "http://example.com/analysis"+param; document.getElementsByTagName("head")[0].appendChild(script); })();
复制代码

注意:上演示样例代码中用了一个JSP标签,从header中获取了Referer參数。
 
server端:
   本演示样例server框架採用的是SpringMVC,可是获取參数都是一样的。
获取參数:
复制代码
     /** * 记录网站统计信息 * @param request */ @RequestMapping( "/analysis") @ResponseBody public void visitorLogger(HttpServletRequest request) { try { WebsiteVisitCount visitor = new WebsiteVisitCount(); visitor.setUrl(request.getParameter( "url")); String title = request.getParameter( "title"); if (title != null) { visitor.setTitle( new String(title.getBytes("ISO-8859-1" ), "utf-8")); } // 用户IP
                visitor.setFromUrl(request.getParameter( "ref")); visitor.setUserIp(getRemortIP(request)); visitor.setApp(request.getParameter( "site")); // 存储数据
 websiteVisitCountService.addVisitor(visitor); } catch (Exception e) { LOGGER.error( "WebsiteVisitCountController.visitorLogger():"
                           +request.getRequestURI(), e.getMessage()); } } 
复制代码

   以上代码中并没有响应给client不论什么可运行的JS脚本,当然假设须要,这个是全然没有问题的,在跨域其它需求的时候,全然能够响应serverJS运行脚本。
   获取訪问IP:
复制代码
      /** * 获取clientIP地址 * @param request * @return
      */
      public String getRemortIP(HttpServletRequest request) { if (request.getHeader( "x-forwarded-for" ) == null ) { return request.getRemoteAddr(); } return request.getHeader( "x-forwarded-for" ); }
复制代码

以上则是统计的核心代码部分,数据入库后便能够对其进行对应业务上的处理,获取想了解的数据。部署时仅仅须要把JS採集脚本加入�到要监控的页面就可以。

作者:Ziv小威
出处:http://imziv.com/
关于作者:专注于Java技术的程序猿一枚,此外对JS开发保持着较高的兴趣。爱好音乐,阅读,FM等等。
本文版权归作者和博客园共同拥有,欢迎转载,但未经作者允许必须保留此段声明,且在文章页面明显位置给出原文连接。
如有问题,能够邮件:wewoor@foxmail.com
微博:Ziv小威

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118239.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • js获取元素到文档区域document的(横向、纵向)坐标的两种方法

    js获取元素到文档区域document的(横向、纵向)坐标的两种方法获取页面中元素到文档区域document的横向、纵向坐标的两种方法及其比较在js控制元素运动的过程中,对于页面元素坐标位置的获取是经常用到的,这里主要总结下两种方法:一:通过叠加元素对象和它的offsetParent(如果存在)的offsetLeft/offsetTop属性来实现在阅读javascript高级程序设计第三版DOM部分时,了解到要获取某个元素在页面上的偏移量,需要将这个元素的offsetLeft和offsetTop与其offsetParent的相同属性相加,一直循环直至根元素。所以,要得到

    2022年7月19日
    15
  • 基于51单片机+LD3320语音模块+SYN6288语音合成——语音识别智能分类垃圾桶「建议收藏」

    基于51单片机+LD3320语音模块+SYN6288语音合成——语音识别智能分类垃圾桶「建议收藏」语音识别智能分类垃圾桶基本介绍器件51单片机LD3320语音模块SYN6288语音合成SG90舵机(4个)usb-ttl模块垃圾桶四个(4个)面包板(建议用)实现思路与接线实现流程图接线呈现图代码编写语音模块(部分代码)语音模块串口调试结果51单片机代码(部分代码 )项目展示基本介绍这个一个基于51单片机做的一个语音识别分类智能垃圾桶,通过我们说话来对垃圾词语进行分类。比如:垃圾桶(一级指令)易拉罐(垃圾词语),我们通过说话说出关键字让语音模块接收到——语音模块通过串口发指令给51单片机,针对

    2022年6月26日
    27
  • 网站下载工具有哪些_网页怎么更改不了下载软件

    网站下载工具有哪些_网页怎么更改不了下载软件收藏几款好用的网页下载工具(网页下载器)引言webzipTeleportUltraTeleportUltra小飞兔下载MihovPictureDownloaderWinHTTrackHTTrack仿站小工具引言有的人利用网页下载工具下载网站到本地进行慢慢的欣赏,有的人利用下载工具创建垃圾站。不管你是出于什么样的目的,下面这些工具软件你可以会需要。webzip一款国外的网页下载器,把一个网站下载并压缩到一个单独的ZIP文件中,可以帮您将某个站台全部或部份之资料以ZIP格式压缩起来,可供你日后

    2022年4月19日
    38
  • Linux traceroute 命令详解

    Linux traceroute 命令详解traceroute命令Linux中traceroute命令用于显示数据包到目的主机的路径Windows中路由追踪命令是tracert。traceroute指令可以追踪你发送的数据包在网络中传输的路由途径,主要显示走了什么路,到了什么站。其预设的数据包大小是40bytes,该值可以另设。语法:traceroute【参数】【主机】举个简单例子:traceroute-dww…

    2025年8月11日
    2
  • 手机usb调试不弹出授权解决办法_adb远程调试怎么打开

    手机usb调试不弹出授权解决办法_adb远程调试怎么打开这里使用的Android源码是基于Android4.4的。如下图所示,修改persist.sys.usb.config=mtp,adb,修改ro.adb.secure=0。这里我修改的是device目录下对应厂家和产品的脚本,如果需要统一修改可以去build/core/main.mk中对应修改。…

    2025年9月2日
    6
  • Android蓝牙开发(二)之蓝牙配对和蓝牙连接

    Android蓝牙开发(二)之蓝牙配对和蓝牙连接上篇文章:https://blog.csdn.net/huangliniqng/article/details/82185983讲解了打开蓝牙设备和搜索蓝牙设备,这篇文章来讲解蓝牙配对和蓝牙连接1.蓝牙配对搜索到蓝牙设备后,将设备信息填充到listview中,点击listiew则请求配对蓝牙配对有点击配对和自动配对,点击配对就是我们选择设备两个手机弹出配对确认框,点击确认…

    2022年6月29日
    113

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号