Listener

作者: 蜗牛滴追逐 | 来源:发表于2018-09-25 14:45 被阅读0次

Listener
监听web应用是否启动,session是否有创建
一.Hello Listener
Listener的作用是用于监听web应用的创建和销毁,及其在其上attribute发生的变化,
web应用即ServletContext对象(jsp的隐式对象application)
除了对web应用的监听外,还能监听session和request的生命周期,以及他们的attribute发生的变化。
二.监听Context
对Context的监听分生命周期的监听,和Context上Attribute变化的监听两种。
1.编写ContextListener
ublic class ContextListener implements ServletContextListener {
//对应当前web应用的销毁
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("web 应用销毁 ");
}
//对应当前web应用的初始化
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("web 应用初始化 ");

}

}
2.配置 web.xml (配置监听器)
<listener>
<listener-class>listener.ContextListener</listener-class>
</listener>
3.测试
web应用的自动重载需要如下前提:

  1. 配置: server.xml中对应的<context配置 的属性 @reloadable="true"
  2. 某个servlet 发生了变化,导致这个web应用自动重启
    4.编写 ContextAttributeListener
    public class ContextAttributeListener implements ServletContextAttributeListener {
    //监听属性的增加
    @Override
    public void attributeAdded(ServletContextAttributeEvent e) {
    // TODO Auto-generated method stub
    }
    //监听属性的移除
    @Override
    public void attributeRemoved(ServletContextAttributeEvent e) {
    // TODO Auto-generated method stub
    }
    //监听属性的替换
    @Override
    public void attributeReplaced(ServletContextAttributeEvent e) {
    // TODO Auto-generated method stub
    }
    }
    5.配置web.xml
    配置ContextAttributeListener
    <listener>
    <listener-class>listener.ContextAttributeListener</listener-class>
    </listener>
    6.testContext.jsp
    故意造成Context属性的增加,替换和移除
    <%
    application.setAttribute("test", 1);
    application.setAttribute("test", 2);
    application.removeAttribute("test");
    %>
    7.测试
    http://127.0.0.1/testContext.jsp

三.监听session
1.编写 SessionListener
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent e) {
}

@Override
public void sessionDestroyed(HttpSessionEvent e) {
}

}
2.配置web.xml
<listener>
<listener-class>listener.SessionListener</listener-class>
</listener>
3.测试
随意访问任意页面,如果是第一次访问,都会触发session创建,后续访问不会触发session的创建
4.编写 SessionAttributeListener
public class SessionAttributeListener implements HttpSessionAttributeListener {
public void attributeAdded(HttpSessionBindingEvent e) { }
public void attributeRemoved(HttpSessionBindingEvent e) { }
public void attributeReplaced(HttpSessionBindingEvent e) { }
}
5.配置web.xml
<listener>
<listener-class>listener.SessionAttributeListener</listener-class>
</listener>
6.testSession.jsp
<%
session.setAttribute("test", 1);
session.setAttribute("test", 2);
session.removeAttribute("test");
%>
7.测试
访问页面http://127.0.0.1/testSession.jsp

四.监听Request
RequestListener 实现接口 ServletRequestListener和ServletRequestAttributeListener
测试
<%
request.setAttribute("test", 1);
request.setAttribute("test", 2);
request.removeAttribute("test");
%>

五.统计在线人数
Http协议是短链接的,所以无法在服务端根据建立多少连接来统计当前有多少人在场,可以通过session多少来估计在线人数
一旦一个用于访问服务器,就会创建一个session,如果用户持续访问,那么该session会持续有效,如果经理30分钟,对应的session也会被销毁。
1.编写 OnlineNumberListener
public class OnlineNumberListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent e) {
//application对象是ServletConntext接口的实例,可以通过reques.getServletContext()来获取,application映射的就是web应用本身
ServletContext application=e.getSession().getServletContext();
Integer online_number=(Integer) application.getAttribute("online_number");

    if(null==online_number)
         online_number=0;
    online_number++;
    application.setAttribute("online_number", online_number);
}

public void sessionDestroyed(HttpSessionEvent e) {
    ServletContext application=e.getSession().getServletContext();
    Integer online_number=(Integer) application.getAttribute("online_number");  
    if(null==online_number) {
        online_number=0;
    }
    else
        online_number--;
application.setAttribute("online_number", online_number);
}

2.配置web.xml
配置 listener.OnlineNumberListener
<listener>
<listener-class>listener.OnlineNumberListener</listener-class>
</listener>
3.checkOnlineNumber.jsp
通过EL表达式,直接获取application中的值
当前 在线人数 : ${online_number}

相关文章

  • Event Emitter

    Tips: 先注册listener - on,后emit Listener function 同步执行 'on' ...

  • 启动和停止Oracle

    配置Oracle listener 启动Oracle 2.1 启动server 2.2 启动listener 停止...

  • 0009.使用环境变量中设定的topic

    topics = {"#{__listener.getTopic()}"},__listener相当于一个伪Bea...

  • 监听

    listener创建方式(1)netca (2)netmgr (3)编辑listener.ora文件 listen...

  • 三、Listener介绍

    使用Listener步骤: 定义Listenner实现类。 通过注解或在web.xml文件配置Listener。 ...

  • Kotlin-委托剖析(1)- 接口委托

    简单列子 定义Listener接口,A、B都实现Listener接口。如果A、B onSuccess\onFail...

  • SpringCloud Stream 集成 rabbitMQ

    配置文件 基础配置 consumer消费者 channel listener队列监听 listener/dlq死信...

  • Listener

    监听器是实现特定的接口的java类,用来监听web应用中ServletContext,ServletRequest...

  • Listener

    Listener与Filter

  • Listener

    Listener的作用是监听web应用(ServletContext对象,即jsp的隐式对象application...

网友评论

      本文标题:Listener

      本文链接:https://www.haomeiwen.com/subject/duhloftx.html