Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 352|回复: 0

[jsp学习]年、日、月,周访问量统计

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-1 06:00:47 | 显示全部楼层 |阅读模式
    学习笔记:年、日、月,周访问量统计
         看了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;
    }

    }

      

      
      
       
       

         
       

         
       
      



    源码下载:http://file.javaxxz.com/2014/10/1/060046594.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-6 04:56 , Processed in 0.429321 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表