Listener使用案例

本文档介绍了如何使用监听器实现单态登录功能,确保同一账号不能在多个设备上同时登录。首先讲解了加入标签库jar、创建javaBean以及测试页面的步骤。然后详细阐述了如何通过监听器控制单态登录,以及如何配置web.xml以实现功能。此外,还探讨了显示在线用户的方法,包括常量类、监听信息的设置和展示页面的构建。所有这些都旨在实现无耦合的数据收集和业务服务。
摘要由CSDN通过智能技术生成

回到首页☞

1、单态登录

单态登录,或者称为单一登录,就是一个账号只能在一台机器上登录,如果在其他机器上登录了,则原来的登录自动失效。单态登录的目的是防止多态机器同时使用一个账号。
原理:监听session如果Session中有PersonInfo信息,则表示已经登录,页面将显示登录有的账号。如果Session中没有PersonInfo信息,则表示没有登录,页面将显示登录输入框。登录与销毁动作都在该JSP中完成。

1.1 加入标签库jar

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

2.2 搞一个简单的javaBean

package com.wht.demo.listener;

import java.io.Serializable;
import java.util.Date;

/**
 * @author JDIT
 */
public class PersonInfo implements Serializable {
   

  private String account;
  private String ip;
  private Date loginDate;

  @Override
  public boolean equals(Object obj) {
   
    if (obj == null || !(obj instanceof PersonInfo)) {
   
      return false;
    }
    return this.account.equalsIgnoreCase(((PersonInfo) obj).getAccount());
  }

  public String getAccount() {
   
    return account;
  }

  public void setAccount(String account) {
   
    this.account = account;
  }

  public String getIp() {
   
    return ip;
  }

  public void setIp(String ip) {
   
    this.ip = ip;
  }

  public Date getLoginDate() {
   
    return loginDate;
  }

  public void setLoginDate(Date loginDate) {
   
    this.loginDate = loginDate;
  }
}

1.3 测试用jsp页面

msg等信息肯定来自监听

<%@ page import="com.wht.demo.listener.PersonInfo" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<%
    String action = request.getParameter("action");
    String account = request.getParameter("account");
    if ("login".equals(action) && account.trim().length() > 0) {
   
        PersonInfo personInfo = new PersonInfo();
        personInfo.setAccount(account.trim().toLowerCase());
        personInfo.setIp(request.getRemoteAddr());
        personInfo.setLoginDate(new Date());
        session.setAttribute("personInfo", personInfo);
        response.sendRedirect(response.encodeRedirectURL(request.getRequestURI()));
        return;
    } else if ("logout".equals(action)) {
   
        session.removeAttribute("personInfo");
        response.sendRedirect(response.encodeRedirectURL(request.getRequestURI()));
        return;
    }

%>
<html>
<head>
    <title>单态登录测试</title>
</head>
<body>
<c:choose>
    <c:when test="${personInfo !=null}">
        <center>
            <div>
                <h3>
                    欢迎您
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值