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(" ");
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>