我要啦免费统计

          微藍領域

          我的學習檔案館
          posts - 19, comments - 57, trackbacks - 0, articles - 57
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          JSP中年、日、月,周訪問量統計方法

          Posted on 2007-08-09 14:11 hilor 閱讀(2918) 評論(15)  編輯  收藏 所屬分類: 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

          # re: JSP中年、日、月,周訪問量統計方法  回復  更多評論   

          2009-01-18 15:24 by mcc
          請問xmlcount.xml需要進行初始化么
          因為的程序老是會報錯
          java.lang.NullPointerException
          at com.resume.common.CountXml.addcount(CountXml.java:73)

          # re: JSP中年、日、月,周訪問量統計方法[未登錄]  回復  更多評論   

          2009-04-03 16:47 by 程序人生
          樓上的你的路徑保存一定是錯了,不能自己隨便設置的,必須要求是在工作中,也就是tomcat目錄下的,你要按照樓主所給的路徑格式寫,我試過了,自己設置的路徑框架在解釋的時候它不識別,總是讀取為空!

          # re: JSP中年、日、月,周訪問量統計方法[未登錄]  回復  更多評論   

          2009-04-03 16:52 by 程序人生
          xmlcount.xml 配置文件

          <?xml version="1.0" encoding="UTF-8"?>
          <xml-body>

          </xml-body>

          # re: JSP中年、日、月,周訪問量統計方法[未登錄]  回復  更多評論   

          2009-04-03 17:51 by 程序人生
          經過我再三的測試,發現缺少配置文件初始化參數,根本無法保存配置參數
          樓主居然忘記把xml配置信息發出來了,這是個廢棄的程序,好比給你一把很好用的車,居然沒給你鑰匙一樣,大家還是走路吧,別開車了,扔了!
          java.lang.RuntimeException: Could not instantiate serializer org.apache.xml.serialize.XMLSerializer: java.lang.ClassNotFoundException: org.apache.xml.serialize.XMLSerializer

          連配置文件都沒寫,也貼出來,真以為時間不值錢啊

          # re: JSP中年、日、月,周訪問量統計方法  回復  更多評論   

          2010-01-08 09:17 by
          共享一下

          xmlcount.xml 配置文件的代碼吧。不然沒法用。

          # re: JSP中年、日、月,周訪問量統計方法  回復  更多評論   

          2010-01-08 09:26 by
          樓主。麻煩給發一下。xmlcount.xml配置文件的代碼。

          chailinglu_java@163.com

          謝謝。

          # re: JSP中年、日、月,周訪問量統計方法  回復  更多評論   

          2010-10-29 10:45 by 主人
          怎么沒有看到回復呀,xml里面的內容到底是什么呀?

          # re: JSP中年、日、月,周訪問量統計方法  回復  更多評論   

          2010-11-11 16:08 by folcan
          初使的xmlcount.xml

          <?xml version="1.0" encoding="UTF-8"?>
          <xml-body>

          </xml-body>

          --------serializer.jar和xerceslmpl.jar一定要引入進來,要不然你效果可以實現,但是文件會寫不進去,這樣服務器關掉之后就取不到數據了。XMLCOUNT.XML里面會是空的

          # re: JSP中年、日、月,周訪問量統計方法  回復  更多評論   

          2013-04-05 18:53 by 洛陽女兒
          可以使用

          # re: JSP中年、日、月,周訪問量統計方法  回復  更多評論   

          2013-05-24 17:12 by 帥帥華北
          樓主給的castor-1.2-xml.jar包不行,我導進去訪問的時候就出錯了,于是我在網上下的castor-xml.jar就行了,樓主能不能解決一樓的問題,急等
          主站蜘蛛池模板: 曲水县| 平塘县| 新密市| 南汇区| SHOW| 柘荣县| 洪江市| 宁安市| 怀仁县| 平凉市| 内江市| 繁昌县| 丰台区| 高青县| 崇文区| 马山县| 彩票| 南岸区| 长治市| 赤壁市| 庆城县| 万荣县| 台州市| 南岸区| 甘德县| 玛曲县| 大名县| 报价| 繁峙县| 海兴县| 新民市| 壶关县| 甘南县| 太湖县| 太谷县| 彰化县| 大渡口区| 于田县| 林州市| 河北区| 象州县|