微蓝领域
我的学习档案馆
posts - 19, comments - 27, trackbacks - 0, articles - 57
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
JSP中年、日、月,周访问量统计方法
Posted on 2007-08-09 14:11
hilor
阅读(455)
评论(5)
编辑
收藏
所属分类:
J2EE
学习笔记:年、日、月,周访问量统计
看了champion的文章《灵活的计数器的设计与实现》与源码,(这篇文章在
http://champion.ewuxi.com/old/opensource/my/count.htm
),就做了这个练习。用session来计数,它是将访问量保存在一个xml文件中,读写xml文件用的是Castor。
一、这是jsp调用页testcount.jsp
<%@ page import="java.util.Date" %>
<%@ page import="count.CountXml" %>
计算器测试<br>
<%
CountXml xmlcount=CountXml.getInstance();
if (session.isNew()){
xmlcount.addcount(new Date());//增加访问量
int n =xmlcount.getTotalCount();//取总访问量
String count=Integer.toString(n);
session.putValue("count",count);
}
%>
您是第<font color="red"><%=session.getValue("count")%></font>位访问者 <br>
总访问量: <%=xmlcount.getTotalCount() %><br>
本年访问量:<%=xmlcount.getYearCount() %><br>
本月访问量:<%=xmlcount.getMonthCount() %><br>
本周访问量:<%=xmlcount.getWeekCount() %><br>
本日访问量:<%=xmlcount.getDayCount() %><br>
二、用到的两个类
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;
}
}
评论
#
re: JSP中年、日、月,周访问量统计方法
回复
更多评论
2007-08-29 16:48 by
鱼中鱼
你有这个包没呀,发下:
org.exolab
#
re: JSP中年、日、月,周访问量统计方法
回复
更多评论
2007-08-29 17:31 by
hilor
@鱼中鱼
不好意思, 这个包我没有.在网上搜了一下,找到相关网址
http://openejb.exolab.org/
不过我打不开这个网页, 无法给你答复..
实际上可以换种方法来实现XML的操作,而在具体的应用中应该是保存在数据库中的... 你可以试试, 如果有问题的话可以发邮件给我TO:hilor.l@163.com
#
re: JSP中年、日、月,周访问量统计方法
回复
更多评论
2008-03-04 21:19 by
Amayer
学习了,不过为什么要保存在XML文件中呢?保存在文本文件不是更好
#
re: JSP中年、日、月,周访问量统计方法
回复
更多评论
2008-04-05 18:54 by
xiyuc
谢谢你的东西!
#
re: JSP中年、日、月,周访问量统计方法
回复
更多评论
2008-11-28 20:56 by
asdf
jar包下载地址:
http://dist.codehaus.org/castor/1.2/castor-1.2-xml.jar
或者在这个地址:
http://www.castor.org/download.html#Latest-Stable-Release
IT新闻
新用户注册
刷新评论列表
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关文章:
深入剖析JSP和Servlet对中文的处理过程
用oscache+lucene2.2.0加快页面访问速度(转)
jsp中的include乱码问题
Java中static、this、super、final用法简谈
JAVA的可变类与不可变类
Dom4j的CRUD操作
Java实用经验总结--日期、数字篇
FCKEDITOR中文配置手册
[转帖]较为全面的JSP中文解决之道
java实现FTP文件上传出现的问题
相关链接:
网站导航:
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子博客
Powered by:
BlogJava
Copyright © hilor
日历
<
2008年3月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
公告
如果大家在阅读的过程中有什么问题,可以留言或发EMAIL给我. 我一定会回复并尽力给予答复.这也是相互促进的过程.. 有JAVA或J2EE方面的问题,也可以交流一下
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔分类
(15)
Hibernate(2)
J2EE(8)
杂谈(5)
文章分类
(59)
common(10)
eclipse(5)
Hibernate(3)
J2EE(32)
Spring(5)
SQL(2)
Struts(2)
个人
JAVA视线
matrix与java共舞
夏昕的hibernate
美河学习在线
搜索
积分与排名
积分 - 21081
排名 - 437
最新评论
1. re: JSP中年、日、月,周访问量统计方法
评论内容较长,点击标题查看
--asdf
2. re: javascript特殊字符转换[未登录]
无常
--无常
3. re: LINUX apache2.2X与TOMCAT5.5X整合
tomcat6的改进很大,采用了非阻塞IO,如果不是遗留系统的话,还是用6吧
--5452
4. re: FCKEDITOR中文配置手册
很详细。学习了。。。
--清风飒影
5. re: LINUX apache2.2X与TOMCAT5.5X整合[未登录]
使用 mod_proxy 模块来实现更快 更方便 呵
--颜小诗
阅读排行榜
1. Hibernate3的DetachedCriteria使用(2088)
2. LINUX apache2.2X与TOMCAT5.5X整合(1463)
3. DES加密解密算法(1056)
4. 男士护肤日记(861)
5. ANT使用(530)
评论排行榜
1. 男士护肤日记(3)
2. 不可征服(Invictus) (3)
3. LINUX apache2.2X与TOMCAT5.5X整合(2)
4. Hibernate3的DetachedCriteria使用(1)
5. 破解电信星空极速最简单办法(1)