Java开发的流量分析系统
一,此系统是网上搜的潭州学院的Tony老师的视频学习的,用于实时分析一个网站的访问量的简单的例子,主要功能是用户登录,展示在线人数以及信息。其中细致的讲解了单例模式,Vector集合的应用,以及web网站如何在外网上发布。
1,单利模式(来自百度百科):单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。
单例模式的特点从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。
此项目中与单利模式相关的代码:
public class UserList {//List下的实现类,线程安全,装载用户登录的容器private Vector<String> vector;//自己创建自己的唯一实例private final static UserList userlist=new UserList();//提供私有的无参构造函数private UserList(){vector=new Vector<String>();}/*** 对外提供访问的入口*/public static UserList getInstance(){return userlist;}
2,Vector集合对象(来自百度百科):Vector 类在 java 中可以实现自动增长的对象数组; vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。
在相对于ArrayList来说,Vector线程是安全的,也就是说是同步的
创建了一个向量类的对象后,可以往其中随意地插入不同的类的对象,既不需顾及类型也不需预先选定向量的容量,并可方便地进行查找。对于预先不知或不愿预先定义数组大小,并需频繁进行查找、插入和删除工作的情况,可以考虑使用向量类。
3,具体项目实现:
(1),创建单例类UserList,并创建私有构造函数,唯一实例对象,以及外界访问的接口,重写相关方法。
package com.smf.util;import java.util.Vector;/*** 装载用户的容器* @author SMF* @Version 1.0*2017-2-23**单例模式:是指一个类只有一个实例的模式*单例模式的特点:*1,单例类只能有一个实例*2,单利泪必须自己创建自己的唯一实例*3,单利必须给所有其他对象提供这一实例**/
public class UserList {//List下的实现类,线程安全,装载用户登录的容器private Vector<String> vector;//自己创建自己的唯一实例private final static UserList userlist=new UserList();//提供私有的无参构造函数private UserList(){vector=new Vector<String>();}/*** 对外提供访问的入口*/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();}
}
(2),创建User类为用户访问对象,并实现HttpSessionBindListenser接口,重写valueBond和valueOnbond方法实现对用户访问的监听。
package com.smf.util;import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;/*** 用户对象* @author Administrator* @version 1.0* 2017-2-23* 实现了HttpSessionBindingListener接口,就会把user对象绑定到session中,* 或者从session中把user移除掉*/
public class User implements HttpSessionBindingListener{private String name;//用户名//得到UserList实例private UserList ul=UserList.getInstance();public User(String name){super();this.name=name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public UserList getUl() {return ul;}public void setUl(UserList ul) {this.ul = ul;}/*** 用户登录---User--Session(将User 绑定到Session)-自动调用valueBond*/@Overridepublic void valueBound(HttpSessionBindingEvent event) {// TODO Auto-generated method stubul.addUser(name); }/*** 用户退出---User--Session(将User 绑定到Session)-自动调用valueBond*/@Overridepublic void valueUnbound(HttpSessionBindingEvent event) {// TODO Auto-generated method stubul.removeUser(name);}
}
(3),建立用户登录页面Login.jsp和用户在线人数情况展示页面UserList.jsp并利用简单的jsp中加入java代码实现展示功能。exit.jsp用于用户退出登陆。