Servelt监听器实例

 

Servelt监听器实例

一  概念

1.在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为 ServletContext, HttpSessionServletRequest 这三个域对象。

2. Servlet规范针对这三个对象上的操作,又把这多种类型的监听器划分为三种类型。

(1)监听三个域对象创建和销毁的事件监听器

(2)监听域对象中属性的增加和删除的事件监听器

(3)监听绑定到 HttpSession 域中的某个对象的状态的事件监听器。(查看API文档)

二   作用域对象的创建和销毁动作的监听器

1.ServletContextListener

(1)在web.xml中配置

    <!-- 注册监听器 -->

<listener>    <listener-class>com.hbsi.web.listener.MyServletContextListener</listener-class>

</listener>

(2)类的使用测试

    public class MyServletContextListener implements ServletContextListener {

 

    //初始化和销毁的过程,在服务启动和停用的时候

    public void contextDestroyed(ServletContextEvent arg0) {

       // TODO Auto-generated method stub

       System.out.println("ServetContext对象被销毁了");

    }

 

    public void contextInitialized(ServletContextEvent arg0) {

       // TODO Auto-generated method stub

       System.out.println("ServletContex对象被创建了");

    }

在服务开启和停用的时候调用

2. HttpSessionListener域对象的创建和销毁

(1)实现类

    public class MySessionListener implements HttpSessionListener {

    //在访问index.jsp的时候会调用,因为在jsp中有session对象

    //session=pageContex.getSession();

    public void sessionCreated(HttpSessionEvent arg0) {

       System.out.println("Session对象被创建了");

 

    }

    public void sessionDestroyed(HttpSessionEvent arg0) {

       System.out.println("Session对象被销毁了");

    }  

}

(2)配置文件

<listener>

    <listener-class>com.hbsi.web.listener.MySessionListener</listener-class>

  </listener>

  两个监听器不会出现混乱,因为他们在内部已经有了判断,通过反射的机制可以把相应的类实例化为对象,先判断类是哪个监听器的对象,然后再执行

 

三  案例实现---统计当前在线人数

1.在java中的代码

    public class CountLineListener implements HttpSessionListener {

    // 设置计数器

    public void sessionCreated(HttpSessionEvent se) {

       // 怎样得到ServeltContext对象

       ServletContext context = se.getSession().getServletContext();

       // 得到的是对象的应用 对地址的操作

       Integer count = (Integer) context.getAttribute("count");

       if (count == null) {

           count = 1;

       } else {

           count++;

       }

       context.setAttribute("count", count);

    }

    public void sessionDestroyed(HttpSessionEvent se) {

       ServletContext context = se.getSession().getServletContext();

       // 得到的是对象的应用 对地址的操作

       Integer count = (Integer) context.getAttribute("count");

       count--;

    }

}

2.在jsp中的获取

    在线人数:${count}

 

补充:

JavaWeb监听器

    就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听的对象发送上述事件后,监听器某个方法方法将立即被执行

 

你可能感兴趣的:(Servelt监听器实例)