javaee 使用监听器统计当前在线用户列表

news/2024/11/30 20:47:43/

在这里插入图片描述在这里插入图片描述
ServletContextListener 和 HttpSessionBindingListener 需要配和使用

TestServletContextListener

package com.yyy.listener;import java.util.ArrayList;
import java.util.List;import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;import com.yyy.po.Users;/*** Application Lifecycle Listener implementation class TestServletContextListener**/
@WebListener
public class TestServletContextListener implements ServletContextListener {/*** Default constructor. */public TestServletContextListener() {// TODO Auto-generated constructor stub}/*** @see ServletContextListener#contextDestroyed(ServletContextEvent)*/public void contextDestroyed(ServletContextEvent arg0)  { // TODO Auto-generated method stubSystem.out.println("服务器关闭了");}/*** @see ServletContextListener#contextInitialized(ServletContextEvent)*/public void contextInitialized(ServletContextEvent arg0)  { // TODO Auto-generated method stub// TODO Auto-generated method stub//初始化数据 变量  数据库连接信息  连接池的信息ServletContext application=  arg0.getServletContext();application.setAttribute("count", 0);//存放所有登录的用户List<Users> onLineUserList=new ArrayList<Users>();application.setAttribute("onLineUserList", onLineUserList);System.out.println("服务器启动了");}}

TestHttpSessionBindingListener

package com.yyy.listener;import java.util.List;import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;import com.yyy.po.Users;/*** Application Lifecycle Listener implementation class TestHttpSessionBindingListener**/
@WebListener
public class TestHttpSessionBindingListener implements HttpSessionBindingListener {private Users user;private List<Users> onLineUserList;/*** Default constructor. */public TestHttpSessionBindingListener() {// TODO Auto-generated constructor stub}public TestHttpSessionBindingListener(Users user) {this.user=user;// TODO Auto-generated constructor stub}public boolean isUserExists(){for(Users myuser:onLineUserList){if(myuser.getUname().equals(user.getUname()))return true;}return false;}public void printUserList(){System.out.println("当前用户列表:");for(Users user:onLineUserList){System.out.println(user.getUname());}}/*** @see HttpSessionBindingListener#valueBound(HttpSessionBindingEvent)*/@Overridepublic void valueBound(HttpSessionBindingEvent arg0)  { // TODO Auto-generated method stub// TODO Auto-generated method stubServletContext application= arg0.getSession().getServletContext();onLineUserList=  (List<Users>) application.getAttribute("onLineUserList");//判断当前用户是否在用户列表中,不存在  则添加到在线列表中		if(!isUserExists()){onLineUserList.add(user);System.out.println("用户:"+user.getUname()+"上线了");//存回到application变量application.setAttribute("onLineUserList", onLineUserList);//打印用户列表printUserList();}}/*** @see HttpSessionBindingListener#valueUnbound(HttpSessionBindingEvent)*/@Overridepublic void valueUnbound(HttpSessionBindingEvent arg0) {// TODO Auto-generated method stubServletContext application= arg0.getSession().getServletContext();if(isUserExists()){onLineUserList.remove(user);System.out.println("用户:"+user.getUname()+"下线了");//存回到application变量application.setAttribute("onLineUserList", onLineUserList);//打印用户列表printUserList();}}}

LoginServlet

package com.yyy.servlet;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import com.yyy.listener.TestHttpSessionBindingListener;
import com.yyy.po.Users;
import com.yyy.util.DbHelper;/*** Servlet implementation class LoginServlet*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public LoginServlet() {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//response.getWriter().append("Served at: ").append(request.getContextPath());//获得用户信息String uname=request.getParameter("uname");String pwd=request.getParameter("pwd");//判断是否登录成功String sql="select * from user where uname=? && upwd=?";List<Object> paramList=new ArrayList<Object>();paramList.add(uname);paramList.add(pwd);	DbHelper dbHelper=new DbHelper();List<Map<String, Object>> map=  dbHelper.executeQuery(sql, paramList);if(map!=null && map.size()>0){Users user=new Users();user.setUname(uname);user.setUpwd(pwd);//登录成功//创建一个HttpSessionBindingListener对象用来监听当前用户TestHttpSessionBindingListener httpSessionBingingListener=new TestHttpSessionBindingListener(user);HttpSession session=request.getSession();session.setAttribute("user", httpSessionBingingListener);response.sendRedirect("index.jsp");}elseresponse.getWriter().println("用户名或密码出错");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

http://www.ppmy.cn/news/642788.html

相关文章

Redis的高可用与持久化

Redis的高可用与持久化 一、Redis 高可用1、 概念2.、高可用技术以及作用2.1 持久化2.2 主从复制2.3 哨兵2.4 集群 二、Redis 持久化1、 持久化的功能2、Redis 持久化方式 三、RDB 持久化1、概述2、触发条件2.1 手动触发2.2 自动触发2.3 其他自动发机制 3、执行流程4、启动时加…

《希尔斯亲密育儿百科》读书笔记

在豆瓣上看了一些育儿图书的评价&#xff0c; 在网上找了这本电子书&#xff0c; 花了几个网上翻了大半(1岁前的部分). 主要的观念就是尽量采用母乳喂养, 多与宝宝亲密接触. 都是老外的育儿做法, 中国这样做的人相对比较少. 而且很多观念是本人以前不懂的, 算是临时抱佛脚吧. 我…

育儿经验(转)

来源:豆瓣/哆啦a梦的百宝袋 我在美国生了两个孩子,生育前后都有培训班,家庭医生每次洗脑让我受益匪浅,我的两个宝宝在婴儿时期乖巧得好像家里没有小婴儿,我甚至疑心她们会不会哭?如今外婆常拿这句傻话笑我。回国后看到朋友或邻居们被小祖宗折磨得精疲力竭,我遇到一个就…

公众号如何运营,大数据为你解说

本文来自&#xff1a;2015年腾讯自媒体大会演讲内容&#xff0c;作者&#xff1a;西瓜君 “西瓜君&#xff0c;我刚注册了公众号&#xff0c;该怎么运营啊?”&#xff0c;“西瓜君&#xff0c;我想快速增粉&#xff0c;给指点一下吧”&#xff0c;“西瓜君&#xff0c;我又掉粉…

organici iherb2

洗护 用品&#xff0c;安全最重要&#xff0c;其次就是性价比。 一&#xff0c;洁面皂和沐浴露&#xff0c;味道一定要淡&#xff0c;太浓烈 的 香味 孕妇 容易恶心 1&#xff0c;Tierra Mia Organics, 鲜羊奶 洗 面皂&#xff0c;38元 http://cn.iherb.com/Tierra-Mia-…

《人类简史》四、天堂地狱——人类餐桌上的动物

上一期讲到了一万两千年前开始的农业革命&#xff0c;这次 革命并不像是如今的学者宣称的那样&#xff0c;是人类的大跃进&#xff0c;是人类智力不断发展所推动的一个进步的故事。作者告诉我们不是这样的&#xff0c;农业革命并没有使得我们人类的生活更加轻松、富足和愉快。相…

用html整一个选择题怎么制作,【单选题】我们在HTML页面中制作了一个图像,想要在鼠标指向这个图像时浮出一条提示信息,应该使用哪个参数做到?...

【单选题】我们在HTML页面中制作了一个图像,想要在鼠标指向这个图像时浮出一条提示信息,应该使用哪个参数做到? 更多相关问题 【单选题】糖浆剂稳定性试验不需考察的项目是 单味制剂命名时一般采用 基尔霍夫电压定律又叫回路定律,它是指任一回路中,( )。 【判断题】一旦DNA的…

音频视频转换隐私政策

音频视频转换隐私政策 本软件尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务&#xff0c;本软件会按照本隐私权政策的规定使用您的个人信息。除本隐私权政策另有规定外&#xff0c;在未征得您事先许可的情况下&#xff0c;本软件不会将这些信…