第三十七节,java-开发流量分析统计系统

User.java文件里:

package com.tanzhou.util;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

/**
 * 用户对象
 * 
 * @author Ming
 * @version 1.0
 * 2015-2-7
 *
 *实现了HttpSessionBindingListener接口,就会把user对象绑定到session中,或者从
 *session移除掉
 */
public class User implements HttpSessionBindingListener{

    private String name; // 用户名
    
    public User(String uname){
        super();
        this.name = uname;
    }
    
    //得到UserList的实例
    private UserList ul =UserList.getInstance();

    
    /**
     * 用户登陆---User -- session(将user绑定到session)-自动调用valueBound
     */
    public void valueBound(HttpSessionBindingEvent arg0) {
        ul.addUser(name); //添加用户
    }

    /**
     * 用户退出---User -- session(将user绑定到session)-自动调用valueUnbound
     */
    public void valueUnbound(HttpSessionBindingEvent arg0) {
        ul.removeUser(name);
    }
    
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

///////////////////////////////////////////////////////////////////////
UserList.java文件里:

package com.tanzhou.util;

import java.util.Vector;

/**
 * 装载用户的容器类
 * @author Ming
 * @version 1.0
 * 2015-2-7
 *
 *
 *单例模式:是指一个类只有一个实例。
 *单例模式的特点:
 *1、单例类只能有一个实例
 *2、单例类必须自己创建自己的唯一实例
 *3、单例必须给所有其他对象那个提供这一实例
 *
 */
public class UserList {
    // List下的实现类, 装载登陆用户的容器
    private Vector<String> vector;
    
    // 自己创建自己的唯一实例
    private static final UserList  userList = new UserList();
    
    // 提供私有的无参构造函数
    private UserList() {
        vector = new Vector<String>();
    }
    
    /**
     * 对外提供访问的入口
     * @return
     */
    public static UserList getInstance(){
        return userList;
    }
    
    /**
     * 向集合中添加用户
     * @param name 登陆进来的用户名
     */
    public void addUser(String name) {
        if(name!=null){
            vector.add(name);
        }
    }
    
    /**
     * 退出后,在容器里把该用户移除掉
     * @param name 退出的用户名
     */
    public void removeUser(String name){
        if(name!=null){
            vector.remove(name);
        }    
    }
    
    /**
     * 统计用户列表
     * @return 用户列表
     */
    public Vector<String> getUserList() {
        return vector;
    }
    
    /**
     * 获得用户的数量
     * @return
     */
    public int getUserCount() {
        return vector.size();
    }
}

///////////////////////////////////////////////////////////////
UserList.jsp文件里:

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


// 获取用户名,并且处理编码集
    String name = new String(request.getParameter("username").getBytes("ISO-8859-1"),"gbk");
    
    if(name==null || "".equals(name)){
        response.sendRedirect("index.jsp");
    }else{
        User user = (User)session.getAttribute("user");
        
        if(user==null || !name.equals(user.getName())){
            user = new User(name);
            session.setAttribute("user", user);
        }
    }
    UserList ul = UserList.getInstance();  // 获得UserList对象
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>用户列表</title>

  </head>
  
  <body>
     <table align="center" width="70%" >
         <tr>
             <td><b>欢迎【<%=name %>】登陆!</b></td>
         </tr>
         <tr>
             <td >在线人数:<%=ul.getUserCount() %></td>
         </tr>
         <tr>
             <td height="100px">
                 <%
                 Vector<String> vector = ul.getUserList(); // 获取到容器
                 int i=0;
                 // Enumeration 列举类型
                 Enumeration<String> enums = vector.elements();
                 while(enums.hasMoreElements()){
                     out.println(enums.nextElement()); // 打印出来这个值
                     out.println("&nbsp;&nbsp;&nbsp;");
                     if((++i%8)==0){
                         out.println("<br />");
                     }
                 }
                 %>
             </td>
         </tr>
         <tr>
             <td><a href="exit.jsp">退出登陆</a></td>
         </tr>
     </table>
  </body>
</html>



/////////////////////////////////////////////////////////////////
exit.jsp文件里:

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

response.setContentType("text/html");
User user = (User)session.getAttribute("user");
session.invalidate(); // session销毁
response.sendRedirect("index.jsp");
%>

///////////////////////////////////////////////////////////
index.jsp文件里:

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%
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>登陆界面</title>
    
  </head>
  
  <body>
     【用户登陆页面<br />
     <form action="UserList.jsp" method="POST">
         用户名: <input type="text" name="username" /><br />
         密码:<input type="password" name="password" /><br />
         <input type="submit" value="登陆">
     </form>
  </body>
</html>