posts - 26,  comments - 14,  trackbacks - 0
          用Java程序   
               現(xiàn)在許多網(wǎng)站都必須統(tǒng)計(jì)瀏覽量,在此為了記錄當(dāng)前在線人數(shù),我設(shè)計(jì)了一個(gè)計(jì)數(shù)器。其功能是:計(jì)數(shù)器就將自動(dòng)加一,離開時(shí)就自動(dòng)減一。。
          這里就做了個(gè)很小的demo:
          Java 代碼如下:


          package com.dr.demo2.servlet;

          import java.io.IOException;
          import java.sql.Timestamp;
          import java.util.ArrayList;

          import javax.servlet.ServletException;
          import javax.servlet.ServletRequestEvent;
          import javax.servlet.ServletRequestListener;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import javax.servlet.http.HttpSession;
          import javax.servlet.http.HttpSessionEvent;
          import javax.servlet.http.HttpSessionListener;

          import org.apache.log4j.Logger;

          public class SessionCounter implements HttpSessionListener,
            ServletRequestListener {
           private static Logger log = Logger.getLogger(SessionCounter.class);
           private static final String CONTENT_TYPE = "text/html; charset=GBK";
           private static int activeSessions = 0;// 當(dāng)前活動(dòng)的人數(shù)
           private HttpServletRequest request;
           private static ArrayList list = new ArrayList();// 用來存放不同ip的地址

           public void init() throws ServletException {
            log.info("SessionCounter init!");

           }

           public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
            log.info("SessionCounter doGet!");
            response.setContentType(CONTENT_TYPE);
            HttpSession session = request.getSession();
           }

           public void destroy() {
            log.info("SessionCounter destroy!");
           }

           public void requestDestroyed(ServletRequestEvent event) {
            // To change body of implemented methods use File | Settings | File
            // Templates.
            log.info("SessionCounter requestDestroyed!");
           }

           public void requestInitialized(ServletRequestEvent sre) {
            request = (HttpServletRequest) sre.getServletRequest();
            log.info("SessionCounter requestInitialized!");
           }

           public void sessionCreated(HttpSessionEvent httpSessionEvent) {
            log.info("SessionCounter sessionCreater!");
            String sessionId = httpSessionEvent.getSession().getId();
            Timestamp createTime = new Timestamp(System.currentTimeMillis());
            String loginIp = request.getRemoteAddr();
            boolean rs = true;
            if (list.size() > 0) {
             for (int i = 0; i < list.size(); i++) {
              if (loginIp.equals(list.get(i))) {
               rs = false;
              }
             }
            }
            if (rs) { // 如果隊(duì)列中存在相同的IP 則SESSION不增加
             list.add(loginIp);
             log.info("ipList隊(duì)列新增ip: " + loginIp);
             activeSessions++;
             log.info("新增SESSION,sessionId = " + sessionId + "; createTime = "
               + createTime + "; loginIp = " + loginIp + "; 當(dāng)前總SESSION值為 "
               + activeSessions);
            }
           }

           public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
            log.info("SessionCounter sessionDestroyed!");
            String sessionId = httpSessionEvent.getSession().getId();
            Timestamp overTime = new Timestamp(System.currentTimeMillis());
            String loginIp = request.getRemoteAddr();
            if (activeSessions > 0) {
             if (list.size() > 0) {
              for (int i = 0; i < list.size(); i++) {
               if (loginIp.equals(list.get(i))) {
                list.remove(i);
                log.info("ipList隊(duì)列移除ip: " + loginIp);
               }
              }
             }
             activeSessions--; // 在用戶銷毀的時(shí)候,從隊(duì)列中踢出這個(gè)IP
             log.info("銷毀SESSION,sessionId = " + sessionId + "; overTime = "
               + overTime + "; loginIp = " + loginIp + "; 當(dāng)前總SESSION值為 "
               + activeSessions);
            }
           }

           public static int getActiveSessions() {
            log.info("SessionCounter getActiveSessions!");
            return activeSessions;
           }

           public void setActiveSessions(int i) {
            log.info("SessionCounter setActiveSessions!");
            activeSessions = i;
           }

          }

          jsp  部分代碼


          <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
          <%
          String path = request.getContextPath();
          String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
          %>

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
            <head>
              <base href="<%=basePath%>">
             
              <title>My JSP 'online.jsp' starting page</title>
             
           <meta http-equiv="pragma" content="no-cache">
           <meta http-equiv="cache-control" content="no-cache">
           <meta http-equiv="expires" content="0">   
           <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
           <meta http-equiv="description" content="This is my page">
           <!--
           <link rel="stylesheet" type="text/css" href="styles.css">
           -->

            </head>
           
            <body>
              <%@   page   import= "com.dr.demo2.servlet.SessionCounter"   %>  
           在線: <%=  SessionCounter.getActiveSessions()   %>人 
            </body>
          </html>

          啟動(dòng)tomcat ,在瀏覽器中輸入:http://127.0.0.1:8080/OnlineCount/online.jsp

          執(zhí)行效果如下:

           


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2011年3月>
          272812345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 黄浦区| 井研县| 黑山县| 鄂尔多斯市| 永吉县| 汪清县| 凤山县| 榆中县| 广元市| 旌德县| 信丰县| 鹿泉市| 大厂| 眉山市| 辽源市| 南投县| 绥江县| 舟山市| 壶关县| 凤冈县| 大洼县| 蓬安县| 板桥市| 桐庐县| 宁明县| 贞丰县| 军事| 清水河县| 堆龙德庆县| 庆安县| 桂平市| 金阳县| 嘉黎县| 遵义县| 泸州市| 安义县| 高邮市| 辛集市| 南郑县| 陆河县| 鄢陵县|