servlet监听器 实现监听用户在线情况

本文介绍了一个使用Java Web技术实现的简单用户登录和会话管理示例。通过index.jsp页面,用户可以输入用户名并提交登录请求。在showUser.jsp页面中,应用程序将用户名保存到session中,并使用UserInfoList类来跟踪所有在线用户的列表。此外,还实现了UserInfoTrace类,当用户登录或退出时,会在控制台输出相应的消息,并更新用户列表。
摘要由CSDN通过智能技术生成

效果图:

登陆前输入用户名:
登陆前
登陆后:
登陆后
点击返回:
点击返回
控制台输出:
控制台输出

代码:

index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <form action="showUser.jsp" method="post">
    <input type="text" name="user">
    <input type="submit" value="登录">
  </form>
  </body>
</html>

showUser.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        UserInfoList userInfoList = UserInfoList.getInstance();
        UserInfoTrace userInfoTrace = new UserInfoTrace();
        String user = request.getParameter("user");
        userInfoTrace.setUser(user);
        session.setAttribute("list", userInfoTrace);
        userInfoList.addUserInfo(userInfoTrace.getUser());
        session.setMaxInactiveInterval(10);
    %>

    <textare>
        <%
            Vector<String> vector = userInfoList.getList();
            if(vector != null && vector.size()>0){
                for(int i=0; i<vector.size(); i++){
                    out.print(vector.elementAt(i)+"登陆成功");
                }
            }
        %>
    </textare>

    <a href="index.jsp">返回</a>
</body>
</html>

src目录下:

cn.test.UserInfoList.java

package cn.test;

import java.util.Vector;

public class UserInfoList {
    private static UserInfoList user = new UserInfoList();
    private Vector<String> vector = null;

    public 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 Vector<String> getList() {
        return vector;
    }

    //移除用户
    public void removeUserInfo(String user){
        if(user != null){
            vector.removeElement(user);
        }
    }
}

cn.test.UserInfoTrace.java

package cn.test;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

public class UserInfoTrace implements HttpSessionBindingListener {
    private String user;
    private UserInfoList container = UserInfoList.getInstance();

    public UserInfoTrace(){
        user = "";
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getUser() {
        return this.user;
    }

    @Override
    public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println(this.user+"上线");
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println(this.user+"下线");
        container.removeUserInfo(user);
    }
}

cn.test.MyContentListener.java

package cn.test;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyContentListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {

    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {

    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    
    <listener>
        <listener-class>cn.test.MyContentListener</listener-class>
    </listener>
</web-app>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值