java web用监听器listener简单的实现在线统计人数

今天又重新学习了java web的基础 监听器技术,用sessionListener简单的实现了网页统计在线人数 (有一个bug就是当关闭网页的时候 session不会关闭依旧存在,除非关闭服务器),代码如下(前端网页代码就不显示了):

LoginServlet.java:

 1 import javax.servlet.ServletException;
 2 import javax.servlet.annotation.WebServlet;
 3 import javax.servlet.http.HttpServlet;
 4 import javax.servlet.http.HttpServletRequest;
 5 import javax.servlet.http.HttpServletResponse;
 6 import javax.servlet.http.HttpSession;
 7 import java.io.IOException;
 8
 9 @WebServlet(name = "LoginServlet",urlPatterns = "/login")
10 public class LoginServlet extends HttpServlet {
11     @Override
12     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
13        String username=request.getParameter("username");
14         HttpSession session=request.getSession();
15         session.setAttribute("username",username);
16         //重新定向到index.jsp
17         response.sendRedirect("index.jsp");
18     }
19
20     @Override
21     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
22
23     }
24 }

ExitServlet.java:

 1 package servlet;
 2
 3 import javax.servlet.ServletException;
 4 import javax.servlet.annotation.WebServlet;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 import javax.servlet.http.HttpSession;
 9 import java.io.IOException;
10
11 @WebServlet(name = "ExitServlet",urlPatterns = "/exit")
12 public class ExitServlet extends HttpServlet {
13     @Override
14     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
15     //从session中移除loginName参数
16         response.getWriter().write("2222");
17         HttpSession session=request.getSession();
18         session.removeAttribute("username");
19         //重新定向到login.jsp
20         response.sendRedirect("login.jsp");
21     }
22
23     @Override
24     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
25     doPost(request, response);
26     }
27 }

OnlineListener.java:

 1 package listener;
 2
 3 import bean.User;
 4
 5 import javax.servlet.ServletContextEvent;
 6 import javax.servlet.ServletContextListener;
 7 import javax.servlet.http.HttpSessionAttributeListener;
 8 import javax.servlet.http.HttpSessionEvent;
 9 import javax.servlet.http.HttpSessionListener;
10 import javax.servlet.http.HttpSessionBindingEvent;
11
12 @javax.servlet.annotation.WebListener()
13 public class OnlineListener implements ServletContextListener,
14         HttpSessionListener, HttpSessionAttributeListener {
15     public OnlineListener() {
16     }
17     @Override
18     public void contextInitialized(ServletContextEvent sce) {
19
20     }
21     @Override
22     public void contextDestroyed(ServletContextEvent sce) {
23
24     }
25     @Override
26     public void sessionCreated(HttpSessionEvent se) {
27         System.out.println("会话已创建");
28     }
29     @Override
30     public void sessionDestroyed(HttpSessionEvent se) {
31         System.out.println("会话已销毁");
32     }
33
34     @Override
35     public void attributeAdded(HttpSessionBindingEvent sbe) {
36       //向session范围中添加一个用户
37         User.addUser(String.valueOf(sbe.getValue()));
38         System.out.println("session增加属性为"+sbe.getName()+"值为:"+sbe.getValue());
39     }
40     @Override
41     public void attributeRemoved(HttpSessionBindingEvent sbe) {
42      //将session会话中的用户移除
43         User.removeUser(String.valueOf(sbe.getValue()));
44         System.out.println(sbe.getValue()+"属性已被移除");
45     }
46     @Override
47     public void attributeReplaced(HttpSessionBindingEvent sbe) {
48       //获取旧的属性值
49         String oldValue=String.valueOf(sbe.getValue());
50         //获取新的属性值
51         String newValue=String.valueOf(sbe.getSession().getAttribute(sbe.getName()));
52         //移除旧的属性,添加新的属性
53         User.removeUser(oldValue);
54         User.addUser(newValue);
55     }
56 }

用两个不同的浏览器运行结果如下图所示:

项目工程目录如下图:

(坚持学习!努力加油!勉励自己)

原文地址:https://www.cnblogs.com/crabmany/p/8605826.html

时间: 2024-10-28 02:28:29

java web用监听器listener简单的实现在线统计人数的相关文章

Java Web(五) 监听器Listener

监听器概述 在上一篇里介绍了过滤器Filter,而Listener是Servlet的另一个高级特性.Listener用于监听Java Web程序中的事件,例如创建,修改,删除Session,request,context等,并触发相应的事件.Listener主要用于对Session,request,context等进行监控,目前共有8种Listener,分别完成对不同事件的监听. 使用Listener不需要关注事件是怎样触发的或者怎么调用相应的Listener,只要记住该类事件触发时一定会调用相

【java web】监听器listener

一.简介 Java的监听器,也是系统级别的监听.监听器随web应用的启动而启动.Java的监听器在c/s模式里面经常用到,它会对特定的事件产生产生一个处理.监听在很多模式下用到,比如说观察者模式,就是一个使用监听器来实现的,在比如统计网站的在线人数. 1.1 监听器分类 1) 按监听的对象划分,可以分为: ServletContext对象监听器 HttpSession对象监听器 ServletRequest对象监听器 2)按监听的事件划分 对象自身的创建和销毁的监听器 对象中属性的创建和消除的监

Java Web 之 Servlet - Listener、Filter、Decorator 精辟

Listener-监听器 Listener为在Java Web中进行事件驱动编程提供了一整套事件类和监听器接口.Listener监听的事件源分为ServletContext/HttpSession/ServletRequest三个级别: ServletContext级别 Listener 场景 ServletContextListener 响应ServletContext生命周期事件(创建/销毁),在ServletContext创建/销毁时分别调用其相应的方法. ServletContextAt

jHipster 3.4 创建最流行Java Web应用项目最简单的入门基本教程

jHipster(J潮客)其亮点: 风头超劲,席卷欧美,最新全能Java Web开发程式产生器 (java web generator). 由Java专家累积的开发经验,配上各类实用的框架技术,去繁取精的运用,全方位的配置,制成出完备的开发应用程式. 完美Java体系架构,适合各行各业项目,尤其以适用于面向服务的体系结构(SOA)更为胜任. 不论菜鸟,老牛或专家,极容易上手,只要你可以下载及建立以下要求的工作环境. 快速建成一个制作就绪的基本项目工作模版,令你可以用有限的精力专注业务上的运作.

java中的监听器(listener)

监听器在java应用中比较广泛,记得web启动的时候的监听器吗,记得spring配置中的监听器吗?,记得消息传输中的监听器吗? 没错,这就是listener的应用,无处不在,身为一个java程序员,你如果不懂的监听器的原理是不是很可悲啊,没错我感觉挺可悲的(因为我刚刚才了解到监听器的工作原理), 为了纪念自己取得的一点小小的success,写篇博文记录一下自己的一些不成熟的意见和理解 监听器,就我理解就和我们日常生活中的原始概念一样,就是监听事物的一些行为.举个例子,抗战时期,发现一个国民党特务

Java Web之监听器

监听器的使用: * 作用: * 监听作用域对象request.session.application的创建.销毁和内容的改变 * 使用: * 创建一个实现了指定接口的java类 * 监听request--->ServletRequestListener 监听request对象的创建和销毁 * requestInitialized(ServletRequestEvent sre)//创建 * requestDestroyed(ServletRequestEvent sre)//销毁 * 注意: *

web.xml监听器 - listener

(面向事件编程概念) <listener> <listener-class>com.kiqi.listener.MyListener</listener-class> </listener> 一.监听器类型 1.Listener是Servlet的监听器 2.可以监听客户端的请求.服务端的操作等. 3.通过监听器,可以自动激发一些操作,如监听在线用户数量,当增加一个HttpSession时,给在线人数加1. 4.编写监听器需要实现相应的接口 5.编写完成后在w

Java web的读取Excel简单Demo

目录结构: Data.xls数据: ? 后台页面: GetExcelData.java ? ????public void doGet(HttpServletRequest request, HttpServletResponse response) ????????????throws ServletException, IOException { ????????//System.out.println(this.getServletContext().getRealPath ("/&quo

java web(七)Cookie的简单使用

一.概述 测试 //1.创建一个Cookie对象    //Cookie cookie1=new Cookie("name","xrk");    //2.调用response的一个方法把Cookie传给客户端    //response.addCookie(cookie1);        //1.获取Cookie    Cookie[] cookies=request.getCookies();     if(cookies!=null&&coo