java 登录下线_java web中Listener的实现(实现用户在线统计数量和强制用户下线)...
一、实现的具体功能
(1)实现用户在线数量的统计,并显示在页面上。
(2)实现强制用户下线的功能。创建一个超链接,用于实现强制用户下线的功能。
(3)监听session的创建和销毁。
二、代码实现
(1)主页面:index.jsp。
pageEncoding="utf-8"%>
Insert title here
用户在线列表数量:${userTable.size()}
用户信息 | |
${user.key } | 踢你下线 |
(2)服务器监听器:SCListener.java文件。
package com.listener;
import java.util.Hashtable;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
/**
* Application Lifecycle Listener implementation class SCListener
*
*/
@WebListener
public class SCListener implements ServletContextListener {
//在线用户数量sessionId , session
private static Hashtable userTable;
/**
* Default constructor.
*/
public SCListener() {
// TODO Auto-generated constructor stub
}
/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
//服务器关闭了
System.out.println("服务器关闭了......");
}
/**
* @see ServletContextListener#contextInitialized(ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent sre) {
// TODO Auto-generated method stub
//服务器启动
System.out.println("服务器启动了......");
//创建用户在线列表
userTable = new Hashtable();
//放入全局对象,第一个userTable的Key
sre.getServletContext().setAttribute("userTable",userTable );
}
}
(3)UserListener.java文件。
package com.listener;
import java.util.Hashtable;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* Application Lifecycle Listener implementation class UserListener
*
*/
@WebListener
public class UserListener implements HttpSessionListener {
/**
* Default constructor.
*/
public UserListener() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpSessionListener#sessionCreated(HttpSessionEvent)
*/
public void sessionCreated(HttpSessionEvent se) {
// TODO Auto-generated method stub
System.out.println("session创建了");
//获取全局对象
ServletContext sc = se.getSession().getServletContext();
//获取用户列表
Hashtable userTable = (Hashtable)sc.getAttribute("userTable");
//获取sessionId
String sid = se.getSession().getId();
//用户session信息添加到用户列表
userTable.put(sid, se.getSession());
System.out.println("用户在线数量:"+userTable.size());
}
/**
* @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)
*/
public void sessionDestroyed(HttpSessionEvent se) {
// TODO Auto-generated method stub
System.out.println("session销毁了");
ServletContext sc = se.getSession().getServletContext();
//获取用户列表
Hashtable userTable = (Hashtable)sc.getAttribute("userTable");
//获取sessionId
String sid = se.getSession().getId();
//移除用户列表中的用户
userTable.remove(sid);
}
}
(4)交互层用于实现强制用户下线的功能:KickUser.java文件。
package com.servlet;
import java.io.IOException;
import java.util.Hashtable;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
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;
/**
* Servlet implementation class KickUser
*/
@WebServlet("/KickUser")
public class KickUser extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public KickUser() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//获取Id
String sid = request.getParameter("sid");
//获取全局对象
ServletContext sc= request.getServletContext();
//获取用户列表
Hashtable userTable = (Hashtable)sc.getAttribute("userTable");
if(userTable.get(sid) != null) {
//销毁session
userTable.get(sid).invalidate();
}
response.sendRedirect("index.jsp");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
三、运行结果
(1)用不同的浏览器打开,用户在线数就会增加,然后进行测试。
一只小小的蚂蚁
发布了45 篇原创文章 · 获赞 3 · 访问量 3048
私信
关注
标签:web,java,用户,userTable,Hashtable,import,servlet,javax
来源: https://blog.csdn.net/qq_44863179/article/details/104483179
java 登录下线_java web中Listener的实现(实现用户在线统计数量和强制用户下线)...相关推荐
- java 问号乱码_Java web中常见编码乱码问题(一)
最近在看Java web中中文编码问题,特此记录下. 本文将会介绍常见编码方式和Java web中遇到中文乱码问题的常见解决方法: 一.常见编码方式: 1.ASCII 码 众所周知,这是最简单的编码. ...
- java cookie 永久_java web中cookie的永久创建与撤销
一.首先是创建cookie 当在数据库中查找知道所输入的用户名和密码正确之后,就开始创建: String cb=request.getParameter("cb");//cb就是登 ...
- java通过struts实现web中的文件下载
上一篇已经记录了 web中的文件上传功能 java通过struts实现web中的文件上传 本篇记录下载功能 定义一个Action类,FileDownload.java package com.stru ...
- java入侵检测源码_Java Web中的入侵检测及简单实现
作者:EasyJF开源团队 大峡 一.简介 在Java Web应用程中,特别是网站开发中,我们有时候需要为应用程序增加一个入侵检测程序来防止恶意刷新的功能,防止非法用户不断的往Web应用中重复发送数据 ...
- Java中用JS那些_java web中javascript主要用哪些?
java web中javascript主要用途是在页面上完成特定按钮的事件功能并且实现前后台交互. JavaScript 是一种跨平台,面向对象的脚本语言.作为一种小巧且轻量级的语言,JavaScri ...
- java web工程中如何添加图片_java web中如何添加图片
java web中如何添加图片 对于java可视化界面插入背景图片只需要background-image:url(图片路径)就行,而对于web项目中,并非如此 效果如下: 我们就需要在jsp页面中写J ...
- java手机验证码登录代码_java web实现手机短信验证码登录实例
运行环境 jdk7+tomcat7 项目技术(必填) Servlet+Ajax+Bootstrap 数据库文件 我这里没用到数据库,比较简单,如果需要用到数据库不会的话可以私信我或者加我QQ jar包 ...
- java mvc实例_Java Web实现的基本MVC实例分析
本文实例讲述了Java Web实现的基本MVC.分享给大家供大家参考.具体如下: login.jsp--视图部分的输入文件 success.jsp--视图部分的输出文件 failure.jsp--视图 ...
- java session原理_java web开发—session的工作原理总结
session的工作原理总结 一.什么是session session是一次浏览器和服务器交互的会话,在jsp中,作为一个内置对象存在.我的理解,就是当用户打开网页时,程序会在浏览器中开辟一段空间来存 ...
最新文章
- 四级嵌入式系统开发工程师-计算题题库
- 3——PHP 简单运算符的使用
- @NotNull 、@NotBlank、@NotEmpty区别
- windows下揪出java程序占用cpu很高的线程
- java修改list中对象的值_Java中List集合的一点总结
- Python基础篇:某宝一键秒杀,毫秒级的精准度
- vue3.0新特性及用法
- vue2.0 之事件处理器
- Dubbo本地伪装 Mock
- 计算机安全知识策划书,安全知识策划书
- 6月28(docker)
- 基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送
- 数电课设—四位数字电子钟设计
- 2.3 OverFeat
- 这一年我都做了什么......
- 各台平台电商API接口吊桶,API接口分类
- 关于彭先生和我的未来呀~
- 相似度衡量: 苏剑林博客-1
- python爬取京东书籍_一个scrapy框架的爬虫(爬取京东图书)
- 两位数合并成一个四位数
热门文章
- python中list的运算,操作及实例
- linux kernel 最新版本,linux kernel 最新版本4.10正式发布 附下载地址
- 计算机xp怎么做备份,怎样备份xp系统电脑上的所有数据?在xp系统中备份所有文件的方法...
- mysql+只读参数_mysql只读变量
- pytorch torch.cumsum(input, dim, out=None)函数(沿轴逐级累加)
- python PyQt5中文教程☞【第一节】PyQt5简介
- python matplotlab.pyplot.scatter() 函数的用法
- tensorflow中张量、常量、变量、占位符
- 跟着书本学习CSS(2)
- pidstat 命令查看某个进程的CPU、内存、磁盘使用情况