问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java如何统计网站访问量?

发布网友 发布时间:2022-05-12 07:25

我来回答

5个回答

热心网友 时间:2024-02-19 15:36

  步骤一、建一个表,表名任意,这里取名为:visitorcounter,表的结构如下所示:
  +-------+------------------+------+-----+------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+------------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| vdate | date | NO | | 2000-01-01 | |
| vnum | int(11) | NO | | 0 | |
+-------+------------------+------+-----+------------+----------------+
  步骤二、建立一个java类,名字也为:visitorcounter,类的内容如下:
  package com.hdzx.pub;
  import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.Date;
  public class VisitorCounter {
private final static String TABLE_NAME = "visitorcounter";
private static String today = null;
private static long today_num = 0;
private static long total_num = 0;
//加载访问量
public static void loadNum(){
if(total_num<1)
loadTotalNum();
if(today_num<1)
loadToadyNum();
}
//加载今日访问量
private static void loadToadyNum() {
// TODO Auto-generated method stub
DBConnect db = null;
ResultSet rs = null;
if(today==null)
today = getTodayDate();
String sql = "select vnum from "+TABLE_NAME+" where vdate='"+today+"'";
try {
db = new DBConnect();
rs = db.executeQuery(sql);
if(rs.next()){
today_num = rs.getLong("vnum");
}
else
{
sql = "insert into "+TABLE_NAME+"(vdate,vnum) values('"+today+"',0)";
db.executeUpdate(sql);
today_num = 0;
}
} catch (Exception e) {
// TODO: handle exception
today_num = 0;
System.out.println("com.hdzx.pub~VisitorCounter.incTotalCounter:获得访问人数");
}
}
//加载总访问量
private static void loadTotalNum() {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
DBConnect db = null;
ResultSet rs = null;
if(today==null)
today = getTodayDate();
String sql = "select vnum from "+TABLE_NAME+" where id=1";
try {
db = new DBConnect();
rs = db.executeQuery(sql);
if(rs.next()){
total_num = rs.getLong("vnum");
}
else
{
total_num = 0;
}
} catch (Exception e) {
// TODO: handle exception
total_num = 0;
System.out.println("com.hdzx.pub~VisitorCounter.incTotalCounter:获得访问人数");
}
}
//增加总的访问量
private static int incTotalCounter(){
int k = 0;
DBConnect db = null;
loadNum();
total_num = total_num+1;
String sql = "update "+TABLE_NAME+" set vnum="+total_num+" where id=1";
try {
db = new DBConnect();
k = db.executeUpdate(sql);
} catch (Exception e) {
// TODO: handle exception
System.out.println("com.hdzx.pub~VisitorCounter.incTotalCounter:增加访问人数");
}
return k;
}
//增加今日的访问量
public static int incTodayCounter(){
int k = 0;
DBConnect db = null;
String sql = null;
loadNum();
today_num += 1;
sql = "update "+TABLE_NAME+" set vnum="+today_num+" where vdate='"+today+"'";
try {
db = new DBConnect();
k = db.executeUpdate(sql);
if(k > 0)
incTotalCounter();
} catch (Exception e) {
// TODO: handle exception
System.out.println("com.hdzx.pub~VisitorCounter.incTotalCounter:增加访问人数");
}
return k;
}
//获得今天的日期
private static String getTodayDate(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(new Date());
}
///获得今日访问量
public static long getTodayNum(){
loadNum();
return today_num;
}
//获得总的访问量
public static long getTotalNum(){
loadNum();
return total_num;
}
}
步骤三、经过以上的步骤后,在页面中加入以下的代码,就可以实现网站访问量的统计工作:
  if(session.isNew())
{
VisitorCounter.incTodayCounter();
}
%>
今日访问量:<%=VisitorCounter.getTodayNum() %><br/>
总的访问量: <%=VisitorCounter.getTotalNum() %>

热心网友 时间:2024-02-19 15:36

.如果是一个ip一天只能访问一次的话
每当用户访问的时候
用 String localIp=request.getLocalAddr();
取得用户ip
这里怎么说呢 应该把每次访问的ip都存起来
然后用这个新ip和 存起来的ip做下比较就

热心网友 时间:2024-02-19 15:37

这个简单啊,你只需要把参数写到application中去就可以啊,至于ip的话,只要一样的一天统计一次就可以了 ,application是ServletContext对象实例,生命周期是项目的启动和销毁阶段,里面设置的参数只要不断进行更新就可以啊

热心网友 时间:2024-02-19 15:38

学过servlet应该也会Listener吧
建立一个requestListener 有请求的时候就把请求连带用户ip信息存入数据库中(
时间判定,相同则不存,未发现相同则存入数据库

)追问这样是不是有点影响访问速度,而且如果是并发访问会不会出问题?

追答总得用数据库记录用户请求吧
用sessionListener好多了
先都存入临时表,再定时转到访问记录表就行,这个要靠触发器判断差异,这样数据库内部操作速度快。

热心网友 时间:2024-02-19 15:38

页面加载的时候直接访问后台,取ip时间保存就好了;这是原始数据,如果一天算一次,那groupby时间(只取到yyyy-MM-dd)就好了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
qq空间的花藤怎么样才能开更多的花 QQ空间里的花藤怎样长的快 QQ空间领养的花藤怎样成长快点啊、? 新宝马x1的空调滤芯在哪里? 下载电脑管家后,网页游戏微端不能登录了,是不是管家隔离区里的 对微端... 烈焰传奇为什么无法登录烈焰微端无法登陆游戏 街机三国用微端登陆不了,总提示登陆超时,怎解决? 如何在word中插入己有公式的 excel表,并在文档中多处引用这张表计算结果... 钢化玻璃碎了会掉么 朝阳的社保中心地址 如何提高远程桌面清晰度 hibernate 中的groupby 查询 有什么软件可以比较两段基本相同文字的细微差异 JAVA排序的问题 scala groupby返回值不是map如何解决? 为什么明明是太阳晒我,要说我晒太阳? java se 实现 group by操作 如果你也晒太阳,那么你希望在自己的身上留下什么样的花印 晒太阳给你一种怎样的体验? 早上吃再多都不会胖吗? 表格文字对比? 请问有什么工具可以比较两段文字的差异呀? 火影世界料理制作配方技巧攻略 料理有什么效果详解 想瘦吃早餐要远离那些食品 蔬食小饭团怎样做? 除了寿司、饭团、三明治还有什么简单易做的食品? 饭团可以用普通剩饭做吗? 菜心杆子小炒肉怎么做好吃 能否介绍下海豹饭团便当的推荐做法? 为什么我的脸上老是感觉有虫子在爬? 如何利用word找出两段文字的不同之处 Java用Sql语句执行以下语句查询竖排表得到如下结果(横排表)?如何实现? 本科提档线对应的当年的一分一段怎么查? java题目 将一些学生分别按姓氏分类,每个姓氏的学生输出到一行上。 java中数据查询问题 电脑远程桌面监控清晰度 笔记本远程桌面模糊不清 微软远程桌面最高能支持多大的高清图像 远程桌面远程声音不清晰有短暂卡顿,画面清晰流畅,该如何解决,求大神帮助 摩托罗拉V8手机后部为何发热易常? PA10TL740HB物性表 PA10T和PA9T的形状有什么区别 10T千斤顶什么意思 厨房用水龙头哪个可以用呢? 天津高考17000名次能上什么大学 天津考生 21年分数655分,男生,有哪些高校、专业推荐? 日语中的十 二十 三十 四十 五十 六十 七十 八十 九十 一百都怎么写怎么读 2020年天津高考千40000位次能上哪些大学? 日语30,40,50,60,70.80.90.100岁怎么说呢? 30日用日语怎么写?