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%" style="background-color:#D5FFFF;text-align:center;font-size:14px"> <tr> <td><b>欢迎【<%=name %>】登陆!</b></td> </tr> <tr> <td style="color:red">在线人数:<%=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>
时间: 2024-10-12 12:39:08