903前端埋点 springboot

article/2025/10/8 8:35:58

显示用户偏好效果 ajax代码效果 accessrandomfile

创建springboot工程

spring:datasource:driver-class-name: oracle.jdbc.driver.OracleDriverurl: jdbc:oracle:thin:@192.168.100.151:1521:orclusername: cmpassword: okmybatis:mapper-locations: classpath*:mapper/*.xmltype-aliases-package: com.njbdqn.myspb1.entity
server:port: 8888

 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="plugin/bootstrap.3.2.0/css/bootstrap.min.css"/>
</head>
<body><a href="javascript:;" data-href="shopid=1&e=nanjing" onclick="send(this)"><img src="img/TB2333XwkCWBuNjy0FaXXXUlXXa_!!0-saturn_solar.jpg_230x230.jpg" alt=""/></a><script type="text/javascript" src="plugin/jquery/jquery-3.6.0.min.js"></script><script type="text/javascript" src="js/log.js"></script>
</body>
</html>

 

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.4</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.njbdqn</groupId><artifactId>myspb1</artifactId><version>0.0.1-SNAPSHOT</version><name>myspb1</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId><version>11.2.0.1.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

 

function send(obj) {//获取点击超链接上的data-href中的数据var dh = $(obj).attr("data-href");//获取当前时间//组装信息为json格式var params = dh.split("&");var sendInfo = {browser:getBrowserInfo(),actionTime:currentTime(),actionType:"CLICK",shopid:params[0].split("=")[1],addr:params[1].split("=")[1]}//向后台发送日志数据$.ajax({type:"POST",url:"http://localhost:8888/log",data:{"logInfo":JSON.stringify(sendInfo)}})}function currentTime() {var date = new Date();return date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate()+" "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();
}function getBrowserInfo() {var Sys = {};var ua = navigator.userAgent.toLowerCase();var re = /(msie|firefox|chrome|opera|version).*?([\d.]+)/;var m = ua.match(re);try{Sys.browser = m[1].replace(/version/, "'safari");Sys.ver = m[2];}catch(e){console.log("getBrowserInfo fail.")}return Sys;
}

 

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njbdqn.myspb1.dao.BankDAO"><select id="findAll" resultType="bank">select * from bank</select><insert id="insertBanK" parameterType="bank">insert into bank values(#{id},#{name},#{money})</insert><delete id="deleteBank" parameterType="int">delete from bank where id=#{id}</delete><update id="updateBank" parameterType="bank">update bank<set><if test="name != null">name=#{name},</if><if test="money != -1">money=#{money}</if></set><where><if test="id !=0">id=#{id}</if></where></update>
</mapper>

package com.njbdqn.myspb1;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.njbdqn.myspb1.dao")
public class Myspb1Application {public static void main(String[] args) {SpringApplication.run(Myspb1Application.class, args);}}

 

package com.njbdqn.myspb1.services;import org.springframework.stereotype.Service;import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;@Service
public class WriterLogService {public synchronized void write(String info) {//生成对于的文件名//今天的文件是否存在 如果不存在就创建一个 如果存在就直接把数据写在文件最后File file = new File("d:/mylog1/"+getFileName());try {if (!file.exists()) {file.createNewFile();}} catch (IOException e) {e.printStackTrace();}try {//写文件RandomAccessFile raf = new RandomAccessFile(file,"rw");raf.seek(file.length());raf.writeUTF(info+"\n");raf.close();} catch (IOException e) {e.printStackTrace();}}private String getFileName(){SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String name = null;try {name = "log_"+sdf.format(new Date())+".log";} catch (Exception e) {e.printStackTrace();}return name;}
}

 

package com.njbdqn.myspb1.services;import com.njbdqn.myspb1.dao.BankDAO;
import com.njbdqn.myspb1.entity.Bank;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;
import java.util.List;
//@Component == @Service  new 对象存放到spring容器中
@Service
@Transactional //开启自动事务
public class BankService {@Resourceprivate BankDAO bdao;public List<Bank> fall(){return bdao.findAll();}public void save(Bank bank) {bdao.insertBanK(bank);}public void del(int uid) {bdao.deleteBank(uid);}public void update(Bank bank) {bdao.updateBank(bank);}
}

package com.njbdqn.myspb1.entity;public class Bank {private int id;private String name;private int money;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getMoney() {return money;}public void setMoney(int money) {this.money = money;}
}

 

 

package com.njbdqn.myspb1.dao;import com.njbdqn.myspb1.entity.Bank;import java.util.List;public interface BankDAO {public List<Bank> findAll();//增public void insertBanK(Bank bank);//删除public void deleteBank(int id);//修改public void updateBank(Bank bank);
}

 

package com.njbdqn.myspb1.controller;import com.njbdqn.myspb1.services.WriterLogService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;@RestController
public class LogCtrl {@Resourceprivate WriterLogService wls;//埋点@RequestMapping("/log")public String log(String logInfo){wls.write(logInfo);return "ok";}
}

 

package com.njbdqn.myspb1.controller;import com.njbdqn.myspb1.entity.Bank;
import com.njbdqn.myspb1.services.BankService;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import java.util.List;/** 告诉spring 本类下所有添加的RequestMapping的方法都是Servlet*  并且所有的方法返回值自动转为JSON* */
@RestController
public class BankCtrl {/*** 按类型进行注入*/@Resourceprivate BankService bankService;/*** 给你的servlet起个名字* @return*/@RequestMapping("/all")public List<Bank> find() {return bankService.fall();}@RequestMapping("/save")public String save(@RequestBody Bank bank) {bankService.save(bank);return "ok";}@RequestMapping("/del")public String del(int uid) {bankService.del(uid);return "ok";}@RequestMapping("/update")public String up(@RequestBody Bank bank) {bankService.update(bank);return "ok";}
}

在首页

效果 单击衣服

 产生文件

 


http://chatgpt.dhexx.cn/article/qCcw9RFp.shtml

相关文章

前端埋点学习笔记

目的 埋点是为了采集用户行为数据&#xff08;例如页面访问路径&#xff0c;点击了什么元素&#xff09;&#xff0c;便于进行数据分析。 三大类型 现有的埋点采集方案可以大致被分为三种 手动埋点 需要调用埋点的业务方在需要采集数据的地方调用埋点的方法&#xff0c;可以…

浅谈前端埋点监控

大家好&#xff0c;我是若川。持续组织了近一年的源码共读活动&#xff0c;感兴趣的可以 加我微信lxchuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外&…

【埋点】前端埋点打点库数据统计库

前端埋点sdk 前言埋点包括在IOS、Android、H5、小程序等前端埋点&#xff0c;也包括后端业务埋点。这里仅仅讲讲这些年和产品经理、运营撕逼上百个回合的前端埋点内容。 一、buried-point-sdk是什么&#xff1f;二、使用和例子1.如何使用(一)、第一种:umd方式(1)、引入文件(2)、…

web前端埋点及数据上报

web前端埋点及数据上报 简介 前端埋点即在产品客户端获取用户行为和使用情况的一种监控方式。通过埋点可以获取到用户行为数据&#xff0c;借助这些数据&#xff0c;我们可以从用户角度出发&#xff0c;升级迭代产品&#xff0c;使其更加贴近用户使用习惯&#xff0c;提升产品…

【前端埋点方案】前端监控和前端埋点方案介绍

在线上项目中,需要统计产品中用户行为和使用情况&#xff0c;从而可以从用户和产品的角度去了解用户群体&#xff0c;从而升级和迭代产品&#xff0c;使其更加贴近用户。用户行为数据可以通过前端数据监控的方式获得&#xff0c;除此之外&#xff0c;前端还需要实现性能监控和异…

埋点tracker:前端埋点服务-技术要点梳理

一、背景 埋点方案&#xff0c;前端涉及到哪些技术要点&#xff0c;本文做简单的梳理和总结。 二、指纹追踪技术&#xff1a;识别到用户及设备 浏览器&#xff1a;浏览器指纹_snowli的博客-CSDN博客 三、用户设备信息&#xff08;navigator&#xff09; navigator.userAgent 四…

前端 埋点

App.vue是vue页面资源的首加载项&#xff0c;是主组件&#xff0c;页面入口文件。所有页面都是在App.vue下进行也换的&#xff0c;APP.vue 负责构建定义及页面组件归集 需求 1.打开页面的时候&#xff0c;记录当前页面 2.切换页面的时候&#xff0c;记录在当前页面的停留时间…

前端埋点实现方案

前言 领导今天又来活了&#x1f623;&#xff0c;要记录每个页面的停留时间&#xff0c;以及页面的操作&#xff0c;是由哪个页面跳转过来的&#xff0c;给每个页面生成GUID上报给服务端&#xff0c;并且需要携带设备型号和设备唯一标识&#x1f644; 名称解释 UV&#xff0…

前端组件化埋点方案与实现

背景 埋点&#xff0c;是收集产品的数据的一种方式&#xff0c;其目的是上报相关行为数据&#xff08;PV/UV/时长/曝光/点击等&#xff09;&#xff0c;由相关人员以此分析用户的使用习惯&#xff0c;助力产品不断迭代和优化。对于开发来说&#xff0c;通常不仅仅需要完成基础…

三分钟,教你3种前端埋点方式!

作者&#xff1a;彩虹修狗 https://juejin.cn/post/7224132741997281338 前言 只有了解用户&#xff0c;我们才能服务好用户&#xff0c;而最接近用户的我们&#xff0c;自然要承担起更多的责任。 那么在一个企业中&#xff0c;我们要如何去了解用户呢&#xff1f;最直接有效的…

前端数据埋点

数据埋点&#xff0c;是一种常用的数据采集方法。埋点是数据的来源&#xff0c;采集的数据可以帮助业务人员分析网站或者App的使用情况、用户行为习惯等&#xff0c;是后续建立用户画像、用户行为路径等数据产品的基础。 前端的埋点方式主要分为代码埋点、可视化埋点、无埋点三…

前端埋点实现

您好&#xff0c;如果喜欢我的文章&#xff0c;可以关注我的公众号「量子前端」&#xff0c;将不定期关注推送前端好文~ 前端埋点实践 介绍1. 实现自定义hook&#xff0c;监测组件2. 收集数据3.前端错误捕捉4. 发送后端保存数据5.收集数据展示总结 介绍 这段时间博主一直在投入…

前端埋点实现及原理分析

正如在宏观介绍的博客中写到的&#xff0c;做用户行为分析的方式有“前端埋点”和“后端埋点”的区分&#xff0c;真好今天敲了一个坤哥整理的“前端埋点”的程序&#xff0c;理解了之后结合demo来简单讲解“前端埋点”如何做。 前端埋点原理图&#xff1a; 如上所示&#xff…

FReLU

论文&#xff1a;https://arxiv.org/pdf/2007.11824.pdf 代码&#xff1a;https://github.com/megvii-model/FunnelAct 概述 卷积神经网络&#xff08;CNN&#xff09;在许多视觉识别任务&#xff08;例如图像分类&#xff0c;目标检测和语义分割&#xff09;中均达到了最先进…

LFR benchmark在windows操作系统下形成网络详细步骤

研究社交网络的人应该都知道LFR benchmark network吧。但是我从网上找到很多关于LFR的压缩包&#xff0c;里面包含很多.cpp文件&#xff0c;在vs下建工程&#xff0c;把这些文件放进去却怎么也跑不通&#xff0c;真的是很恼火。 今天&#xff0c;终于看到一篇博客&#xff0c;…

神经网络-LFR model

CLDNN[1] 不同的网络结构有不同的优势 CNN擅长减少频率偏移LSTM擅长对时序信号进行建模DNN可以对特征做更高阶的抽象&#xff0c;更容易进行分类 CLDNN依次将CNN/LSTM/DNN进行串联组合成一个新的网络&#xff0c;相当于依次进行频域变化/时域关联/特征抽象&#xff0c;相比于…

CRLF和LF区别

目录&#xff1a; 文章目录 1、什么是CRLF和LF2、为什么要探究CRLF和LF3、三种方式处理的不同4、在Git中如何转换&#xff1f;参考文献 1、什么是CRLF和LF CRLF 是carriagereturnline feed的缩写。中文意思是回车换行。 LF是line feed的缩写&#xff0c;中文意思是换行。 2、…

LFR benchmark 操作步骤

先奉上资源 链接&#xff1a;https://pan.baidu.com/s/1Mm_UwUAhM0ofKXcFbti0YA 提取码&#xff1a;hvp8 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦运行操作 在解压后的文件下找到 /benchmark/Debug 文件夹&#xff0c; 在该文件下运行命令行程序&#x…

西克推出LBR/LFR长距离非接触物位/液位传感器

西克推出LBR/LFR长距离非接触物位/液位传感器 在日常的生产过程中&#xff0c;我们可能会遇到一些严苛的工作环境&#xff0c;例如上百米高的筒仓&#xff0c;诸多粉尘的罐内环境&#xff0c;亦或是充满蒸汽或附着物的生产环境&#xff1b;对料位的监控显得更加重要和困难。传…

CRLF和LF

目录&#xff1a; 什么是CRLF和LF为什么要探究CRLF和LF三种方式处理的不同更多参考文献 &#x1f441; 关注微信公众号&#xff1a;非典型理科男 回复&#xff1a;架构设计 获取 架构设计经典著作 1、什么是CRLF和LF CRLF 是carriagereturnline feed的缩写。中文意思是回车换…