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>