java如何统计网站访问量?

最近做了一个javaweb项目,用servlet+jsp做的,网站是不需要用户登录的,我需要在后台查看网站的访问量,请问如何实现访问量的统计?要求一个IP在一天内的访问只... 最近做了一个java web项目,用servlet+jsp做的,网站是不需要用户登录的,我需要在后台查看网站的访问量,请问如何实现访问量的统计?要求一个IP在一天内的访问只算一次。 展开
 我来答
小西
2015-11-19 · 运营
小西
运营
采纳数:218 获赞数:3887
百度知道热心用户

向TA提问 私信TA
展开全部
  步骤一、建一个表,表名任意,这里取名为: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() %>
没有响应m2
2012-11-04 · TA获得超过8387个赞
知道大有可为答主
回答量:7579
采纳率:33%
帮助的人:3496万
展开全部
.如果是一个ip一天只能访问一次的话
每当用户访问的时候
用 String localIp=request.getLocalAddr();
取得用户ip
这里怎么说呢 应该把每次访问的ip都存起来
然后用这个新ip和 存起来的ip做下比较就
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
辣星获1c
2012-11-04 · TA获得超过620个赞
知道答主
回答量:246
采纳率:100%
帮助的人:64.4万
展开全部
这个简单啊,你只需要把参数写到application中去就可以啊,至于ip的话,只要一样的一天统计一次就可以了 ,application是ServletContext对象实例,生命周期是项目的启动和销毁阶段,里面设置的参数只要不断进行更新就可以啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fatg1988
2012-11-05 · 超过12用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:32.5万
展开全部
学过servlet应该也会Listener吧
建立一个requestListener 有请求的时候就把请求连带用户ip信息存入数据库中(
时间判定,相同则不存,未发现相同则存入数据库

)
追问
这样是不是有点影响访问速度,而且如果是并发访问会不会出问题?
追答
总得用数据库记录用户请求吧
用sessionListener好多了
先都存入临时表,再定时转到访问记录表就行,这个要靠触发器判断差异,这样数据库内部操作速度快。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
irejjjj
2012-11-09 · 超过11用户采纳过TA的回答
知道答主
回答量:65
采纳率:0%
帮助的人:38.2万
展开全部
页面加载的时候直接访问后台,取ip时间保存就好了;这是原始数据,如果一天算一次,那groupby时间(只取到yyyy-MM-dd)就好了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式