posts - 26,  comments - 14,  trackbacks - 0
          用Java程序   
               現(xiàn)在許多網(wǎng)站都必須統(tǒng)計瀏覽量,在此為了記錄當(dāng)前在線人數(shù),我設(shè)計了一個計數(shù)器。其功能是:計數(shù)器就將自動加一,離開時就自動減一。。
          這里就做了個很小的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)前活動的人數(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) { // 如果隊列中存在相同的IP 則SESSION不增加
             list.add(loginIp);
             log.info("ipList隊列新增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隊列移除ip: " + loginIp);
               }
              }
             }
             activeSessions--; // 在用戶銷毀的時候,從隊列中踢出這個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>

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

          執(zhí)行效果如下:

           


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


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

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 即墨市| 堆龙德庆县| 新干县| 奎屯市| 左云县| 临泽县| 东阳市| 定结县| 密山市| 荣成市| 玛纳斯县| 泗洪县| 屯昌县| 凤山县| 砚山县| 贵德县| 海口市| 新蔡县| 五大连池市| 靖安县| 原平市| 德钦县| 威海市| 遵化市| 玉溪市| 通州市| 开阳县| 阜宁县| 遵义县| 南宫市| 郸城县| 拉萨市| 股票| 巩义市| 通海县| 贡山| 义乌市| 永安市| 高安市| 昆山市| 和顺县|