监听器(实现在线统计人数,踢人)


Servlet监听器

一、监听三个域对象创建和销毁的事件监听器

1.  ServletContextListener接口

MyServletContextListener

public class MyServletContextListener implements ServletContextListener {

    public void contextDestroyed(ServletContextEvent arg0) {

       System.out.println(arg0.getServletContext() + "被创建了");

    }

 

    public void contextInitialized(ServletContextEvent arg0) {

       System.out.println(arg0.getServletContext() + "被销毁了");

    }

}

Web.xml

<listener>      <listener-class>cn.class3g.web.listener.MyServletContextListener

</listener-class>

</listener>

 

应用:在web服务的启动时提供或创建资源,结束时回收。如web应用启动时利用ServletContextListener将数据表和数据准备好,则将创建表和数据的代码写在其中。Spring框架就是以监听器的形式启动的。

 

问:如果有多个监听器,在web.xml中注册时,怎样判断监听器的监听对象的?

答:利用java的反射机制

If(Object instanceOf ServletContextListener){

 

}else if( Object instanceOf HttpSessionListener){

 

}

 

2.  HttpSessionListener接口

MySessionListener

public class MyHttpSessionListener implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent arg0) {

       System.out.println(arg0.getSource() + "被销毁了");

    }

    public void sessionDestroyed(HttpSessionEvent arg0) {

       System.out.println(arg0.getSource() + "被创建了");

    }

}

注册这个监听器

 

问:这两句打印什么时候会输出?

直接访问index.jsp或index.html会不会输出

引申出:session对象何时被创建???

 

答:访问index.html时不会创建session,但是jsp文件被访问是会创建session,因为session对象在getSession()方法被调用是才会创建,而jsp文件被译成servlet时java代码中有此方法的调用

      _jspx_page_context = pageContext;

      application = pageContext.getServletContext();

      config = pageContext.getServletConfig();

 

      session = pageContext.getSession();

              。。。

如jsp页面中的page命令如下

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" session="false" %>

则servlet中不会调用getSession()

 

刷新jsp页面会不会打印

开心的浏览器访问jsp会不会打印

 

浏览器被关闭会不会摧毁session??不会,因为session默认存在30分钟

 

HttpSessionListener的作用:统计在线人数

 

 

3.  ServletRequestListener接口

MyServletRequestListener

public class MyServletRequestListener implements ServletRequestListener {

    public void requestDestroyed(ServletRequestEvent arg0) {

       System.out.println("请求对象"+arg0.getSource() + "被销毁了");

    }

 

    public void requestInitialized(ServletRequestEvent arg0) {

       System.out.println("请求对象"+arg0.getSource() + "被创建了");

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值