counter.jsp
上传用户:jhtang88
上传日期:2014-01-27
资源大小:28528k
文件大小:15k
源码类别:

Jsp/Servlet

开发平台:

Java

  1. <%@ page contentType="text/html;charset=gb2312"%>
  2. <%@ page import="java.util.Calendar" %>
  3. <%@ page import="cn.js.fan.db.*" %>
  4. <%@ page import="cn.js.fan.web.*" %>
  5. <%@ page import="java.sql.*" %>
  6. <jsp:useBean id="fchar" scope="page" class="cn.js.fan.util.StrUtil"/>
  7. <%!
  8. int ToDay,Avera,DayMax,AllCount;
  9. int CountSize = 6;         //计数不足在前面加零
  10. boolean CountView = true;  //计数是否显示在页面上,False/True
  11. boolean CountType = true;  //统计是记时间还是不记.True记,False不记
  12. boolean CountMode = true;  //在页面上显示不计时的计数结果,还是显示计时的结果,默认为不计时(计时为:20分钟内不加数)
  13. //==========================================================================
  14. //计算两个日期之间相隔的天数
  15. public int DateDiff(java.util.Date lowerLimitDate,java.util.Date upperLimitDate){
  16.    long upperTime,lowerTime;
  17.    upperTime=upperLimitDate.getTime();
  18.    lowerTime=lowerLimitDate.getTime();
  19.    if(upperTime<lowerTime)
  20. return -1;
  21.    Long result=new Long((upperTime-lowerTime)/(1000*60*60*24));
  22.    return result.intValue();
  23. }
  24. public void addinfo(String Name,String Info,boolean NewDays)
  25. {
  26. boolean Found = false;
  27. ConnUpdate conn = null;
  28. ResultSet MyCount = null;
  29. Conn conn1 = new Conn(Global.defaultDB);
  30. try {
  31. conn = new ConnUpdate(Global.defaultDB);
  32. MyCount = conn.executeQuery( "Select "+Name+",count,todays,ID FROM " + Name);
  33. int id = 0;
  34. if (conn.getRows()>0)
  35. {
  36.   while(MyCount.next())
  37.   {
  38.   id = MyCount.getInt(4);  
  39.   if (NewDays)
  40.   {
  41.   if (MyCount.getString(Name).equals(Info))
  42.   {
  43.  // MyCount.updateInt(2,MyCount.getInt("count")+1);
  44.  // MyCount.updateInt(3,MyCount.getInt("todays")+1);
  45.  // MyCount.updateRow();
  46.  String sql = "update " + Name + " set count=count+1,todays=todays+1 where id=" + id;
  47.  conn1.executeUpdate(sql);
  48.  Found = true;
  49.   }
  50.   }
  51.   else
  52.   {
  53.   if (MyCount.getString(Name).equals(Info))
  54.   {
  55.  // MyCount.updateInt(2,MyCount.getInt("count")+1);
  56.  // MyCount.updateInt(3,1);
  57.  String sql = "update " + Name + " set count=count+1,todays=1 where id=" + id;
  58.  conn1.executeUpdate(sql);
  59.  Found = true;
  60.   }
  61.   else {
  62.  // MyCount.updateInt(3,0);
  63.  String sql = "update " + Name + " set todays=0 where id=" + id;
  64.  conn1.executeUpdate(sql);
  65.   }
  66.   // MyCount.updateRow();
  67.   }
  68.   }
  69. }
  70. if (!Found)
  71. {
  72. // System.out.print("not found+"+Name+"n");
  73. /*
  74. MyCount.moveToInsertRow();
  75. MyCount.updateString(1,Info);
  76. MyCount.updateInt(2,1);
  77. MyCount.updateInt(3,1);
  78. MyCount.insertRow();
  79. */
  80. String sql = "insert " + Name + " set "+Name+"="+cn.js.fan.util.StrUtil.sqlstr(Info)+",count=1,todays=1";
  81. conn1.executeUpdate(sql);
  82. }
  83. }
  84. catch (Exception e)
  85. {
  86. System.out.println("addinfo:"+e.getMessage());
  87. }
  88. finally {
  89. if (MyCount!=null) {
  90. try { MyCount.close(); } catch (SQLException e) {}
  91. MyCount = null;
  92. }
  93. if (conn!=null) {
  94. conn.close();
  95. conn = null;
  96. }
  97. if (conn1!=null) {
  98. conn1.close();
  99. conn1 = null;
  100. }
  101. }
  102. }
  103. %>
  104. <%
  105. Conn conn = new Conn(Global.defaultDB);
  106. String CountLink = request.getContextPath()+"/cms/counter/showcount.jsp"; //查看统计结果的连接。
  107. String ImageLink = request.getContextPath()+"/cms/counter";              //图片地址
  108. String NewYear,NewMonth,NewDay;
  109. Calendar cal  = Calendar.getInstance();
  110. NewYear = ""+(cal.get(cal.YEAR));
  111. NewMonth = ""+(cal.get(cal.MONTH)+1);
  112. NewDay = ""+cal.get(cal.DATE);
  113. if (NewYear.length()<=2) NewYear="20" + NewYear;
  114. if (NewMonth.length()<=1) NewMonth="0" + NewMonth;
  115. if (Integer.parseInt(NewDay)<=9) NewDay="0" + NewDay;
  116. //===========================================================================  基本统计数据
  117. ResultSet rs = null;
  118. java.util.Date StartDate,LogDate=null;
  119. int Avera,DayMax,AllCount,ToDay=0,TotalDays;
  120. String sql = "";
  121. try {
  122. sql = "Select count(*) from DayCount";
  123. rs = conn.executeQuery(sql);
  124. int DayTotal = 0;
  125. if (rs!=null && rs.next())
  126. DayTotal = rs.getInt(1);                             //获得统计总天数
  127. else
  128. DayTotal = 0;
  129. if (rs!=null) {
  130. rs.close();
  131. rs = null;
  132. }
  133. rs = conn.executeQuery("Select * from Count");
  134. if (rs!=null && rs.next())
  135. {
  136. StartDate = rs.getDate("StartDate");                                 //开始统计日期
  137. DayMax    = rs.getInt("DayMax");                                     //最高一天流量
  138. AllCount  = rs.getInt("AllCount");                                   //统计访问总数(使用的天数)
  139. ToDay     = rs.getInt("ToDayCount");                                 //今天访问流量
  140. LogDate   = rs.getDate("LogDate");                                   //统计截止日期
  141. TotalDays = DateDiff(StartDate,new java.util.Date())+1;       //统计访问日期数(不管有没有使用,从开始统计算起.)
  142. Avera     = rs.getInt("AllCount") % TotalDays;                  //日均访问流量
  143. }
  144. }
  145. catch (Exception e) {
  146. //e.printStackTrace();
  147. }
  148. finally {
  149. if (rs!=null) {
  150. try { rs.close(); } catch (SQLException e) {}
  151. rs = null;
  152. }
  153. }
  154. if (DateDiff(LogDate,new java.util.Date())>=1) ToDay = 0;
  155. //===========================================================================  预计一天访问量
  156. //注意此处要防止除0,因为在夜里12点钟时cal.HOUR_OF_DAY是0
  157. //int intending=(ToDay/(1+cal.get(cal.HOUR_OF_DAY)))*(24-cal.get(cal.HOUR_OF_DAY)-1)+ToDay;
  158. //===================================================================
  159. String DayDate = NewYear + NewMonth + NewDay;                      //20001818
  160. String MonDate = NewYear + NewMonth;                               //200018
  161. String YeaDate = NewYear;                                          //2000
  162. //===================================================================
  163. ResultSet MyCount = null;
  164. String StrSQL = "";
  165. try {
  166. //===================================================================
  167.         int Dayn = cal.get(cal.DATE);
  168.         StrSQL = "Select ID,monthcount."+Dayn+" FROM monthcount Where ID = " + MonDate;
  169.         MyCount = conn.executeQuery(StrSQL);
  170. int MyCountDay = 0;
  171.         if (!MyCount.next())
  172. {
  173. // MyCount.moveToInsertRow();
  174. // MyCount.updateInt(1,Integer.parseInt(MonDate));
  175. // MyCount.updateInt(""+Dayn,1);
  176. // MyCount.insertRow();
  177. StrSQL = "insert monthcount (ID, monthcount." + Dayn + ") values (" + MonDate + ",1)";
  178. conn.executeUpdate(StrSQL);
  179. }
  180.         else
  181. {
  182. MyCountDay = MyCount.getInt(2);
  183.             // MyCount.updateInt(2,MyCount.getInt(2)+1);
  184. // MyCount.updateRow();
  185. StrSQL = "update monthcount set monthcount." + Dayn + "=" + (MyCountDay+1) + " where ID=" + MonDate;
  186. conn.executeUpdate(StrSQL);
  187. }
  188. if (MyCount!=null) {
  189. try { MyCount.close(); } catch (Exception e) {}
  190. MyCount = null;
  191. }
  192. //===================================================================
  193. StrSQL = "Select AllCount,ToDayCount,DayMax,StartDate,LogDate FROM Count";
  194.         MyCount = conn.executeQuery(StrSQL);
  195.         if (!MyCount.next())
  196. {
  197. /*
  198.                 MyCount.moveToInsertRow();
  199. MyCount.updateInt(1,1);
  200. MyCount.updateInt(2,1);
  201. MyCount.updateInt(3,1);
  202. MyCount.updateDate(4,new java.sql.Date(cal.getTimeInMillis()));
  203. MyCount.updateDate(5,new java.sql.Date(cal.getTimeInMillis()));
  204. MyCount.insertRow();
  205. */
  206. StrSQL = "insert Count (AllCount,ToDayCount,DayMax,StartDate,LogDate) values (1,1,1,NOW(),NOW())";
  207. conn.executeUpdate(StrSQL);
  208. }
  209.         else
  210. {
  211. /*
  212.                 if (MyCount.getInt("DayMax") < MyCountDay)
  213.                         MyCount.updateInt(3,MyCountDay);
  214.                 MyCount.updateInt(1,MyCount.getInt("AllCount")+1);
  215.                 MyCount.updateInt(2,MyCountDay);
  216. MyCount.updateDate(5,new java.sql.Date(cal.getTimeInMillis()));
  217. MyCount.updateRow();
  218. */
  219. int dayMax = MyCount.getInt("DayMax");
  220. if (dayMax < MyCountDay)
  221. dayMax = MyCountDay;
  222. StrSQL = "update Count set AllCount=AllCount+1,ToDayCount="+MyCountDay+",DayMax="+dayMax+",LogDate=NOW()";
  223. conn.executeUpdate(StrSQL);
  224.         }
  225. if (MyCount!=null) {
  226. try { MyCount.close(); } catch (Exception e) {}
  227. MyCount = null;
  228. }
  229. //===================================================================
  230.         int Hourn = cal.get(cal.HOUR_OF_DAY);
  231. boolean ToDaysCount = false;
  232.         StrSQL = "Select ID,DayCount."+Hourn+" FROM DayCount Where ID = " + DayDate;
  233.         MyCount = conn.executeQuery(StrSQL);
  234.         if (!MyCount.next())
  235. {
  236.                 /*
  237. MyCount.moveToInsertRow();
  238.                 MyCount.updateInt(1,Integer.parseInt(DayDate));
  239.                 MyCount.updateInt(2,1);
  240. MyCount.insertRow();
  241. */
  242. StrSQL = "insert DayCount (ID, DayCount."+Hourn+") values ("+DayDate+",1)";
  243. conn.executeUpdate(StrSQL);
  244.                 ToDaysCount = false;
  245. }
  246.         else
  247. {
  248.                 // MyCount.updateInt(2,MyCount.getInt(2)+1);
  249.                 // ToDaysCount    = true;
  250. // MyCount.updateRow();
  251. int dayCount = MyCount.getInt(2);
  252. StrSQL = "update DayCount set DayCount."+Hourn+"="+(dayCount+1) + " where ID="+DayDate;
  253. conn.executeUpdate(StrSQL);
  254.         }
  255. if (MyCount!=null) {
  256. try { MyCount.close(); } catch (Exception e) {}
  257. MyCount = null;
  258. }
  259. //===================================================================
  260.         int Monn=cal.get(cal.MONTH)+1;
  261.         StrSQL = "Select ID,"+Monn+" FROM YearCount where ID = " + YeaDate;
  262.         MyCount = conn.executeQuery(StrSQL);
  263.         if (!MyCount.next())
  264. {
  265.                 /*
  266. MyCount.moveToInsertRow();
  267.                 MyCount.updateInt(1,Integer.parseInt(YeaDate));
  268.                 MyCount.updateInt(2,1);
  269. MyCount.insertRow();
  270. */
  271. StrSQL = "insert YearCount (ID,YearCount."+Monn+") values ("+YeaDate+",1)";
  272. conn.executeUpdate(StrSQL);
  273.         }
  274. else
  275. {
  276. // MyCount.updateInt(2,MyCount.getInt(2)+1);
  277. // MyCount.updateRow();
  278. StrSQL = "update YearCount set YearCount."+Monn+"=YearCount."+Monn+"+1 where ID="+YeaDate;
  279. conn.executeUpdate(StrSQL);
  280.         }
  281. if (MyCount!=null) {
  282. try { MyCount.close(); } catch (Exception e) {}
  283. MyCount = null;
  284. }
  285. String BC="",OS="";
  286. String[] Agt;
  287. //===================================================================
  288.         String aAgt = request.getHeader("User-Agent");
  289. //===================================================================
  290.         if (aAgt.indexOf("Mozilla")!=-1)
  291. {
  292.                    if (aAgt.indexOf("MSIE")!=-1)
  293.    {
  294.                          if (aAgt.indexOf("4.90")!=-1)
  295.                              aAgt = aAgt.replaceAll("98","Me");
  296.                          Agt = aAgt.split(";");
  297.                          BC  = Agt[0].trim();
  298.                          OS  = Agt[1].trim();
  299.        }
  300.                    if (aAgt.indexOf("Opera")!=-1)
  301.    {
  302.    BC = "Opera" + aAgt.substring(aAgt.indexOf(")")+1);
  303.    OS = aAgt.substring(aAgt.indexOf(";")+2);
  304.    OS = OS.substring(0,OS.indexOf(";")+2);
  305.    OS = OS.substring(0,OS.indexOf(")"));
  306.                    }
  307. else
  308. {
  309.                            if (aAgt.indexOf("[en]")!=-1 || aAgt.indexOf("Gold")!=-1)
  310.    {
  311.  BC = aAgt.substring(aAgt.indexOf("/"));
  312.  BC = "Netscape" + " " + BC.substring(0,BC.indexOf(" "));
  313.  OS = aAgt.substring(aAgt.indexOf("(")+1);
  314.  OS = OS.substring(1,OS.indexOf(";")-1);
  315.  OS = OS.replaceAll("win","windows");
  316.                            }
  317.    else
  318.    {
  319.                                  BC = "Unknown";
  320.                                  OS = "Unknown";
  321.                            }
  322.                    }
  323.     }
  324.         else
  325. {
  326.                  BC = "Unknown";
  327.                  OS = "Unknown";
  328. }
  329.         BC = BC.replaceAll("MSIE","Internet Explorer");
  330.         OS = fchar.replace(OS,")","");
  331.         OS = OS.replaceAll("NT 5.0","2000");
  332.         OS = OS.replaceAll("4.10","98");
  333.         OS = OS.replaceAll("4.90","Me");
  334. //=========================================================
  335.         addinfo("bc",BC,ToDaysCount);
  336.         addinfo("os",OS,ToDaysCount);
  337. //=========================================================
  338.         String IPaddress = request.getRemoteAddr();
  339. //=========================================================
  340. StrSQL = "Select bc,OS,IP,Date FROM lastly";
  341.         MyCount = conn.executeQuery(StrSQL);
  342.         if (conn.getRows()>20)
  343. {
  344.                 // MyCount.first();
  345.                 // MyCount.deleteRow();
  346. if (MyCount.next()) {
  347. String IP = MyCount.getString(3);
  348. String date = MyCount.getString(4);
  349. StrSQL = "delete from lastly where IP=" + fchar.sqlstr(IP) + " and date=" + fchar.sqlstr(date);
  350. conn.executeUpdate(StrSQL);
  351. }
  352.         }
  353.         // MyCount.moveToInsertRow();
  354.         // MyCount.updateString(1,BC);
  355.         // MyCount.updateString(2,OS);
  356. // MyCount.updateString(3,IPaddress);
  357.         // MyCount.insertRow();
  358. StrSQL = "insert lastly (bc,OS,IP,Date) values("+fchar.sqlstr(BC)+","+fchar.sqlstr(OS)+","+fchar.sqlstr(IPaddress)+",NOW())";
  359. conn.executeUpdate(StrSQL);
  360. if (MyCount!=null) {
  361. try { MyCount.close(); } catch (Exception e) {}
  362. MyCount = null;
  363. }
  364. //Session("ASPCounter") = True
  365. //=========================================================
  366. String Counter = "";
  367. StrSQL = "Select PageCount,AllCount FROM Count";
  368. MyCount = conn.executeQuery(StrSQL);
  369. if (MyCount!=null && MyCount.next())
  370. {
  371. // MyCount.updateInt(1,MyCount.getInt(1)+1);
  372. // MyCount.updateRow();
  373. if (!CountMode)
  374. Counter = MyCount.getString("PageCount");
  375. else
  376. Counter = MyCount.getString("AllCount");
  377. StrSQL = "update Count set PageCount=PageCount+1";
  378. conn.executeUpdate(StrSQL);
  379. }
  380. if (CountView)
  381. {
  382. //=========================================================
  383. int CountLength=Counter.length();
  384. String Style = fchar.getNullString(request.getParameter("style"));
  385. //=========================================================
  386. String PicView="";
  387. if (CountLength < CountSize)
  388. {
  389. int CountToAdd = CountSize - CountLength;
  390. for (int i = 1; i<=CountToAdd; i++)
  391. {
  392.   if (!Style.equals(""))
  393.    PicView = PicView + "<IMG SRC=" + ImageLink + "/" + Style + "/0.gif border=0>";
  394.   else
  395.    PicView = PicView + "0";
  396. }
  397. }
  398. for (int i = 0; i<CountLength; i++)
  399. {
  400.  if (!Style.equals(""))
  401.   PicView = PicView + "<IMG SRC=" + ImageLink + "/" + Style + "/" + Counter.substring(i,i+1) + ".gif border=0>";
  402.  else
  403.   PicView = PicView + "" + Counter.substring(i,i+1) + "";
  404. }
  405. out.println("document.write('<NOBR><a href=" + CountLink + " title=?? target=_blank>" + PicView + "</A></NOBR>');");
  406. }
  407. }
  408. catch (Exception e) {
  409. out.print(e.getMessage() + "<BR>" + StrSQL);
  410.     e.printStackTrace();
  411. }
  412. finally {
  413. if (MyCount!=null) {
  414. try { MyCount.close(); } catch (SQLException e) {}
  415. MyCount = null;
  416. }
  417. }
  418. if (conn!=null) {
  419. conn.close();
  420. conn = null;
  421. }
  422. %>