zoukankan      html  css  js  c++  java
  • 第七章 监听器listener显示在线用户案例学习心得

    前言:这个是我自己的学习笔记,用于加深自己对于java web 理解。
            显示在线用户:这个案例主要是统计启动时间、累积访问人数、最大同时在线以及发生的时间、当前用户数以及当前登录的用户数。
    这个案例和上一个案例基本类似,利用相关的listener可以实现。
            统计信息的类代码如下所示。
     1 package hellojava.listener.util;
     2 import java.util.Date;
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 import javax.servlet.http.HttpSession;
     6 public class ApplicationConstants
     7 {
     8 //所有的session
     9 public static Map<String,HttpSession> SESSION_MAP= new HashMap<String, HttpSession>();
    10 //当前登录的用户总数
    11 public static int CURRENT_LOGIN_COUNT=0;
    12 //历史访客总数
    13 public static int TOTAL_HISTORY_COUNT=0;
    14 //服务器启动时间
    15 public static Date START_DATE=new Date();
    16 //最高在线时间
    17 public static Date MAX_ONLINE_COUNT_DATE=new Date();
    18 //最高在线人数
    19 public static int MAX_ONLINE_COUNT=0;
    20 }
            里面有一个重要的数据结构为SESSION_MAP,保存所有用户的session。
    JSP页面代码学习:
    JSP页面效果图
     
    图片是分别在三个浏览器上登录之后的效果,用户登录情况表格形式呈递的效果实现代码如下所示。
    <%
    for (String id : ApplicationConstants.SESSION_MAP.keySet()) {
    HttpSession sess = ApplicationConstants.SESSION_MAP.get(id);
    PersonInfo personInfo = (PersonInfo)sess.getAttribute("personInfo");
    %>
    <tr <%= session == sess ? "bgcolor=#DDDDDD" : "" %>>
    <td><%=id%></td>
    <td><%=personInfo==null ? "&nbsp;" : personInfo.getAccount()%></td>
    <td><%=DateFormat.getDateTimeInstance().format(sess.getCreationTime())%></td>
    <td><%=DateFormat.getDateTimeInstance().format(
    new Date(sess.getLastAccessedTime()))%></td>
    <td><%=sess.isNew()%></td>
    <td><%=sess.getAttribute("activeTimes")%></td>
    <td><%=sess.getAttribute("ip") %></td>
    </tr>
    <%
    }
    %>
    for循环中的花括号{},中间有html内容,这样可以动态的输出表格。<tr <%= session == sess ? "bgcolor=#DDDDDD" : "" %>>这段代码可以设置你所对应的记录的背景颜色。
    教训:        
            蓝色部分是书中的源代码,红色部分是我照着书中的代码重新写了一遍,书中的online.jsp页面我也重新写了一个,名字叫做MyOnline.jsp,MyOnline.jsp用到的是都是我自己的类代码,但是我没有在web.xml中添加相应的的Listener文件,导致我访问MyOnline.jsp中在线人数显示一直为空。在web.xml中配置相关文件后,问题解决。
            虽然MyOnline.jsp和online.jsp使用的是不同的代码,但是他们使用的是相同session,第一章图片中,activeTimes那一列代表访问次数都是偶数,就是因为activeTimes这个属性存放在session中,两个功能相同的Listener都会执行对activeTimes执行++操作,因此每次访问就会执行两次++操作。(PersonInfo这个类我也是在不同的包实现了一次,在对session["personInfo"]的处理中,就会出现hellojava.listener.singleton.PersonInfo cannot be cast to com.helloweenvsfei.singleton.PersonInfo的异常。)因此在开发中,对于自定义的session属性,要实现定义好,避免属性名相同的情况。
            经验:1web.xml文件很重要。2在实际开发中,session的自定义属性,要事先定义好,最好有一个文本化的表格
     
     
                                                                                                                                    菜包子
                                                                                                            2013年6月9日17:33:17 于马甸桥东
            
     
     
     
     
     
  • 相关阅读:
    初识多线程
    java开发中我们经常用到的一些名词
    gitHub提交代码
    Java-基础-HashMap
    Java-基础-LinkedList
    Java-基础-ArrayList
    Java-基础-JDK动态代理
    Java-基础-反射
    RabbitMQ-延迟队列
    RabbitMQ-TTL-死信队列_DLX
  • 原文地址:https://www.cnblogs.com/CaiBaoZi/p/3129598.html
Copyright © 2011-2022 走看看