java如何统计网站访问量?

java如何统计网站访问量?,第1张

步骤一、建一个表,表名任意,这里取名为: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() %>

给你个思路:比如要统计某一篇文章的访问次数。

你应该能获取这篇文章所在的数据库的记录;然后把记录的ID保存在当前的session中。判断当前session中是否有这个ID了,如果没有的话,把这条记录的访问记录加1(前提是这条记录有字段去记录对应的访问次数),如果有的话,啥都不 *** 作。

保存在session中的话,如果在session有效期内,用户无论怎么刷新页面访问次数不会重复叠加,这样做有一个不好的地方就是如果session失效了,那么即使是同一台电脑再次访问这篇文章的话,记录还是会加1的。

因此有人提出保存在cookie中,只要用户不清理cookie,并且cookie设置永久不失效那么即使是同一台电脑在不同时间访问这个文章,那么之前已经统计过的话,这个是不会重复统计的。

两个方法都有优缺点,一般来说访问次数都是一个大概取值,所以上述两者其实都有人用的。

大约要三张表

A表(地区名):

地区代码 地区名 总访问次数

1 广东省 0

2 江苏省 0

...

B表(日访问表)

地区代码 访问时间 日访问次数

1 20131224 0

8 20131224 0

C表(ip来源表)

序号 来访IP 地区代码 时间

处理流程基本上就是

1、先取用户ip,从ip库中查询出用户地区(这种代码随处可以找到,比如http://zhaoshijie.iteye.com/blog/1171132)一般就是纯真ip库,有了地区后,从A表中查出地区代码

2、向C表中添加记录

3、然后查一下B表有没有当日该地区记录,如果没有就在B表中新增一条,如果有就将B表对应的次数加1,然后A表中对应地区代码次数统计也加1

然后比如你要查2013年12月24日的各地区统计就可以是

select * from a,b where a.地区代码=b.地区代码 and b.访问时间=20131224


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6771433.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存