首页
论坛
图书
开发资料
在线文档
网址
下载
联系我们
 新闻│Java│JavaScript│Eclipse│Eclipse 英文│J2EE│J2ME│J2SE│JSP│Netbeans│Hibernate│JBuilder│Spring│Struts
站内搜索: 请输入搜索关键词

当前页面: 开发资料首页 → Java 专题 → 年、日、月,周访问量统计

年、日、月,周访问量统计

摘要: 年、日、月,周访问量统计

</td> </tr> <tr> <td height="35" valign="top" class="ArticleTeitle"> 学习笔记:年、日、月,周访问量统计
看了champion的文章《灵活的计数器的设计与实现》与源码,(这篇文章在
http://champion.ewuxi.com/old/opensource/my/count.htm),就做了这个练习。用session来计数,它是将访问量保存在一个xml文件中,读写xml文件用的是Castor。

<table width="664" border="0"> <tr> <td width="386">一、这是jsp调用页testcount.jsp

<%@ page import="java.util.Date" %>
<%@ page import="count.CountXml" %>

计算器测试

<%
CountXml xmlcount=CountXml.getInstance();

if (session.isNew()){
xmlcount.addcount(new Date());//增加访问量
int n =xmlcount.getTotalCount();//取总访问量
String count=Integer.toString(n);
session.putValue("count",count);

}
</td> <td width="268"> </td> </tr> </table>
%>
您是第<%=session.getValue("count")%>位访问者


总访问量: <%=xmlcount.getTotalCount() %>

本年访问量:<%=xmlcount.getYearCount() %>

本月访问量:<%=xmlcount.getMonthCount() %>

本周访问量:<%=xmlcount.getWeekCount() %>

本日访问量:<%=xmlcount.getDayCount() %>


二、用到的两个类
1、CountXml.java

package count;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.util.Properties;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;


import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;

public class CountXml{
private String fileName = "h:\\Tomcat 5.0\\webapps\\zz3zcwbwebhome\\WEB-INF\\xmlcount.xml";
private static CountObjectInf obj=null;
private static CountXml instance=null;

public static CountXml getInstance(){
if(instance==null){
instance=new CountXml();
}
return instance;
}

private CountXml() {
try{
obj=read(fileName);
}catch(Exception e){
System.out.println(e);
}


}

public int getTotalCount(){
return obj.getTotalCount();
}

public int getDayCount() {
return obj.getDayCount();
}


public int getMonthCount() {
return obj.getMonthCount();
}


public int getWeekCount() {
return obj.getWeekCount();
}


public int getYearCount() {
return obj.getYearCount();
}

public synchronized void addcount(Date da){//比较日期增加计数

if (new SimpleDateFormat("yyyy-MM-dd").format(this.obj.date)
.equals(new SimpleDateFormat("yyyy-MM-dd").format(da)))
this.obj.setDayCount(this.obj.getDayCount() + 1);
else
this.obj.setDayCount(1);

if (new SimpleDateFormat("yyyy-MM").format(this.obj.date)
.equals(new SimpleDateFormat("yyyy-MM").format(da)))
this.obj.setMonthCount(this.obj.getMonthCount() + 1);
else
obj.setMonthCount(1);

Calendar ca = Calendar.getInstance();
ca.setTime(da);
ca.setFirstDayOfWeek(Calendar.MONDAY);

if (ca.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY && !new SimpleDateFormat("yyyy-MM-dd").format(this.obj.date).equals(new SimpleDateFormat("yyyy-MM-dd").format(da)))
obj.setWeekCount(1);
else
obj.setWeekCount(obj.getWeekCount() + 1);

if (new SimpleDateFormat("yyyy").format(this.obj.date)
.equals(new SimpleDateFormat("yyyy").format(da)))
this.obj.setYearCount(this.obj.getYearCount() + 1);
else
obj.setYearCount(1);
obj.setDate(da);

obj.setTotalCount(obj.getTotalCount()+1);
obj.setTempCount(obj.getTempCount()+1);
if(obj.getTempCount()>=20){//只有当临时访问量大于等于20时才保存一次
obj.setTempCount(0);//临时计数器置0
write(fileName);

}
}

private void write(String fileName) {
try {
FileWriter writer = new FileWriter(fileName);
Marshaller.marshal(obj, writer);
writer.close();
} catch (Exception e) {
System.out.println(e);

}
}

private CountObjectInf read(String fileName) throws Exception {
FileReader reader = new FileReader(fileName);
CountObjectInf result = (CountObjectInf)

Unmarshaller.unmarshal(CountObjectInf.class, reader);
reader.close();
return result;
}
}

2、

package count;

import java.util.Date;
public class CountObjectInf {
// 总访问量合计
protected int totalCount = 0;
//日访问量
protected int dayCount = 0;
//周访问量
protected int weekCount = 0;
// 月访问量
protected int monthCount = 0;
//年访问量
protected int yearCount = 0;

//临时访问量
protected int tempCount=0;

protected Date date =new Date();

/**
* @return
*/
public int getDayCount() {
return dayCount;
}

/**
* @return
*/
public int getMonthCount() {
return monthCount;
}

/**
* @return
*/
public int getTotalCount() {
return totalCount;
}

/**
* @return
*/
public int getWeekCount() {
return weekCount;
}

/**
* @return
*/
public int getYearCount() {
return yearCount;
}

/**
* @param i
*/
public void setDayCount(int i) {
dayCount = i;
}

/**
* @param i
*/
public void setMonthCount(int i) {
monthCount = i;
}

/**
* @param i
*/
public void setTotalCount(int i) {
totalCount = i;
}

/**
* @param i
*/
public void setWeekCount(int i) {
weekCount = i;
}

/**
* @param i
*/
public void setYearCount(int i) {
yearCount = i;
}



/**
* @return
*/
public Date getDate() {
return date;
}

/**
* @param date
*/
public void setDate(Date date) {
this.date = date;
}

/**
* @return
*/
public int getTempCount() {
return tempCount;
}

/**
* @param i
*/
public void setTempCount(int i) {
tempCount = i;
}

}
function TempSave(ElementID) { CommentsPersistDiv.setAttribute("CommentContent",document.getElementById(ElementID).value); CommentsPersistDiv.save("CommentXMLStore"); } function Restore(ElementID) { CommentsPersistDiv.load("CommentXMLStore"); document.getElementById(ElementID).value=CommentsPersistDiv.getAttribute("CommentContent"); } </td> </tr> <tr>


↑返回目录
前一篇: 关于在bean里面打印html的利弊看法
后一篇: 使用FileUpload组件实现文件上传

首页 | 全站 Sitemap | 联系我们 | 设为首页 | 收藏本站
版权所有 Copyright © 2006-2007, Java 编程资料牛鼻站, All rights reserved