实例(1)----------Listener监听器统计在线人数

Listener监听统计在线人数:

1、login.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" >
	</head>
	<body>
		<form action="/bz1/loginServlet1" method="post">
			用户名:<input type="text" name="username"/><br/>
			密码:<input type="text" name="password"/>
			<input type="submit" value="提交">
		</form>
	</body>
</html>

2、UserInfoList.java

package Listener;

import java.util.Vector;

/**
 * 
 * @作用:主要用来存储在线用户和对在线用户进行具体操作
 * @作者:sqc
 * @版本:1.0
 * @时间:2018年4月24日下午8:54:57
 */
public class UserInfoList {
	private static UserInfoList user = new UserInfoList();
	private Vector vector = null;
	/**
	 * 利用private 调用构造函数
	 * 防止被外界产生的新对象的instance对象
	 */
	private UserInfoList(){
		this.vector = new Vector();
	}
	//外界使用instance对象
	public static UserInfoList getInstance(){
		return user;
	}
	
	/**
	 * 增加用户
	 */
	public boolean addUserInfo(String user){
		if(user!=null){
			this.vector.add(user);
			return true;
		}else{
			return false;
		}
	}
	/**
	 * 删除用户
	 */
	public void removeUserInfo(String user){
		if(user!=null){
			vector.removeElement(user);
		}
	}
	/**
	 * 获取用户列表
	 */
	public Vector getList(){
		return vector;
	}
	/**
	 * 统计在线人数
	 */
	public int getCount(){
		return vector.size();
	}
}

3、OnlineListener.java

package Listener;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

@WebListener("This is a Listener.")
public class OnlineListener implements HttpSessionAttributeListener,
		HttpSessionListener {
	private UserInfoList user = UserInfoList.getInstance();
	@Override
	public void sessionCreated(HttpSessionEvent arg0) {
		System.out.println("session已经创建!");
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent arg0) {
		System.out.println("session已经销毁!");
	}

	@Override
	public void attributeAdded(HttpSessionBindingEvent sadd) {
		//将session中内容添加到vector集合
		user.addUserInfo(String.valueOf(sadd.getValue()));
		System.out.println(sadd.getSession().getId()+":"+sadd.getName()+":"+sadd.getValue());
	}

	@Override
	public void attributeRemoved(HttpSessionBindingEvent srem) {
		//移除
		user.removeUserInfo(String.valueOf(srem.getValue()));
		System.out.println(srem.getSession().getId()+":"+srem.getName()+":"+srem.getValue());
	}

	@Override
	public void attributeReplaced(HttpSessionBindingEvent supd) {
		//更改;获取旧的属性
		String oldValue = String.valueOf(supd.getValue());
		//获取新的属性
		String newValue = String.valueOf(supd.getSession().getAttribute(supd.getName()));
		//移除旧属性
		user.removeUserInfo(oldValue);
		//添加新属性
		user.addUserInfo(newValue);
		System.out.println("更改属性");
	}

}

4、loginServlet.java

package Listener;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.print.attribute.standard.Severity;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/loginServlet1")
public class LoginServlet extends HttpServlet{
	public void service(HttpServletRequest request,HttpServletResponse response) throws IOException{
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html");
		
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		
		HttpSession session = request.getSession(true);
		session.setAttribute("username", username+":"+password);
		response.sendRedirect(request.getContextPath()+"/index.jsp");
	}
}

5、ExitServlet.java

package Listener;

import java.io.IOException;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/exitLogin")
public class ExitLoginServlet extends HttpServlet{
	public void service(HttpServletRequest request,HttpServletResponse response) throws IOException{
		request.getSession(false).invalidate();
		response.sendRedirect(request.getContextPath()+"/login.html");
	}
}
6、index.jsp
<%@ page language="java" import="java.util.*,Listener.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  	<title>index</title>
  </head>
   <% UserInfoList user = UserInfoList.getInstance(); %>
   <%  
        //如果未登录,转向登录页面  
        if (request.getSession(false).getAttribute("username") == null) {  
            response.sendRedirect(request.getContextPath()+"/login.html");  
        }  
       Vector vector = user.getList(); //获取存储在线用户名的vector对象  
    %>  
  <body>
  <center>
    <h1>欢迎您:【${sessionScope.username}】</h1>
    
    <p>当前在线人数:<%=user.getCount() %>人</p>
    	在线人员:
    	<%
    		for(int i=0;i<user.getCount();i++){
    			out.println(vector.get(i));
    		}
    	%>
    	<p><a href="/bz1/exitLogin">退出</a><p>
    </center>
  </body>
</html>



猜你喜欢

转载自blog.csdn.net/qq_36115651/article/details/80043065