LoginServlet登录页面:
package com.tanzhou.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.tanzhou.util.User;
import com.tanzhou.util.UserList;public classLoginServlet extends HttpServlet {publicLoginServlet() {
super();
}public voiddestroy() {
super.destroy();//Just puts "destroy" string in log
}public voiddoGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}public voiddoPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String name= getNewString(request.getParameter("username"));
String pass= request.getParameter("userpass");if(name==null || "".equals(name)){
response.sendRedirect("/OnlineUserDemo/login.html");return;
}else{//讲登录的用户名和密码保存到session中
HttpSession session = request.getSession(true);//保存对象到session
User user = (User)session.getAttribute("user");if(user==null || !name.equals(user.getName())){
user= newUser(name);
session.setAttribute("user", user);
}
}
PrintWriterout =response.getWriter();out.println("欢迎用户:"+name+"登录"+"
");out.println("
"+"在线人数列表:"+"
");
UserList ul=UserList.getInstance();/**
* Enumeration(列举)*/Enumeration enums =ul.getUserList();int i = 0;while(enums.hasMoreElements()){out.println(enums.nextElement()); //遍历出来的用户信息
out.println(" ");if((++i%8)==0){out.println("
");
}
}out.println("
");out.println("
"+"在线人数:"+ul.getUserCount());out.println("
"+" 退出登录");out.flush();out.close();
}public voidinit() throws ServletException {
}/**
* 编码集处理
* @param str
* @return
* @throws UnsupportedEncodingException*/
public staticString getNewString(String str) throws UnsupportedEncodingException
{return new String(str.getBytes("ISO-8859-1"),"UTF-8");
}
}
OutServlet退出页面:
package com.tanzhou.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.tanzhou.util.User;public classOutServlet extends HttpServlet {/**
* Constructor of the object.*/
publicOutServlet() {
super();
}/**
* Destruction of the servlet.
*/
public voiddestroy() {
super.destroy();//Just puts "destroy" string in log//Put your code here
}public voiddoGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}public voiddoPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriterout =response.getWriter();
HttpSession session= request.getSession(true);
User user= (User)session.getAttribute("user");
session.invalidate();//session销毁
response.sendRedirect("/OnlineUserDemo/login.html");
}/**
* Initialization of the servlet.
*
* @throws ServletException if an error occurs*/
public voidinit() throws ServletException {//Put your code here
}
}
User页面:
package com.tanzhou.util;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;/**
*
* @author Tony Liu
*
*
*如果一个对象实现了HttpSessionBindingListener接口,当这个对象被绑定到session中或者从session中被删除时,
*Servlet容器会通知该对象。*/
public classUser implements HttpSessionBindingListener{//得到UserList的实例
private UserList ul =UserList.getInstance();privateString name;publicUser(String name){this.name =name;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}/**
* session创建对象--自动调用valueBound 用户登录*/@Overridepublic voidvalueBound(HttpSessionBindingEvent arg0) {
ul.addUser(name);//添加用户
}/**
* session销毁--自动调用valueUnbound 用户退出*/@Overridepublic voidvalueUnbound(HttpSessionBindingEvent arg0) {
ul.removeUser(name);//删除用户
}
}
UserList页面:
package com.tanzhou.util;
import java.util.Enumeration;
import java.util.Vector;/**
* 用户集合类
* @author Ming
*
*
*
* 单例模式---是指一个类只有一个实例,并且能够自行的实例化
* 特点:构造方法是私有
*
* 单例模式:懒汉式单例 饿汉式单例 登记式单例
* 特点:
* 1、单例类只能有一个实例
* 2、单例类必须自己创建自己的唯一实例
* 3、单例类必须给所有其他对象提供这一实例*/
public classUserList {private static final UserList userList = newUserList();/**
* List 接口一共有三个 ArrayList Vector LinkedList*/
private Vector v; //用户集合
privateUserList(){
v= new Vector();
}public staticUserList getInstance(){returnuserList;
}/**
* 用户登录-添加用户信息
* @param name*/
public voidaddUser(String name){if(name!=null){
v.addElement(name);
}
}/**
* 用户退出的方法
* @param anme*/
public voidremoveUser(String name){if(name!=null){
v.remove(name);
}
}/**
* 用户数量的统计
* @return*/
public intgetUserCount(){returnv.size();
}/**
* Enumeration (列举)
* @return*/
public EnumerationgetUserList(){returnv.elements();
}
}