您的位置:首页 > 编程语言 > Java开发

JavaWeb监听器

2016-05-25 00:00 316 查看
摘要: 本文介绍了监听器的作用,监听器的类型,以及如何实现各类监听器做了详细的介绍且有相关代码实例。并实现了监听器应用的经典例子:统计在线人数。

监听器的作用

监听你的web应用,监听许多信息的初始化,销毁,增加,修改,删除值等。当被监听对象发生上述事件后,监听器某个方法将立即被执行。

常用的有:1、统计在线人数和在线用户。2、系统加载时进行信息的初始化工作。3、统计网站的访问量。4、跟Spring结合。

监听器的类型

按监听的对象划分,servlet2.4规范定义的有三种

1.用于监听应用程序环境对象(ServletContext)的事件监听器。

2.用于监听用户会话对象(HttpSession)的事件监听器。

3.用于监听请求消息对象(ServletRequest)的事件监听器。

按监听的事件划分

1.用于监听域对象自身的创建和销毁。

2.用于监听域对象中的属性的增加和删除。

3.用于监听绑定到HttpSession域中的某个对象的状态。

详细介绍

1. Servlet上下文进行监听(Application级):

用于监听 ServletContext对象的创建和删除以及属性的添加、删除和修改等操作,该监听器需要用到如下两个接口类:

ServletContextAttributeListener:监听对 ServletContext 属性的操作,比如增加、删除、修改。

ServletContextListener:监听对 ServletContext 对象的创建和删除。

2、监听HTTP会话(Session级)

用于监听 HTTP 会话活动情况和 HTTP 会话中的属性设置情况,也可以监听 HTTP 会话的 active 和 passivate 情况等,该监听器需要用到如下多个接口类:

1) HttpSessionListener:监听 HttpSession 的操作

sessionCreate(HttpSessionEvent se) 初始化时调用;

sessionDestroyed(httpSessionEvent se) 销毁时调用,即当用户注销时调用

2) HttpSessionActivationListener:用于监听 HTTP 会话的 active 和 passivate 情况

3) HttpSessionAttributeListener:监听 HttpSession 中的属性操作

attributeAdded(HttpSessionBindingEvent se) 添加属性时调用

attributeRemoved(HttpSessionBindingEvent se) 删除属性时调用

attributeReplaced(HttpSessionBindingEvent se) 修改属性时调用

3. 对客户端请求进行监听(Request级):

用于对客户端的请求进行监听是在 Servlet2.4 规范中新添加的一项新技术,需要实现如下接口ServletRequestListener。

针对监听器类型分类进行代码演示

演示对客户端请求进行监听

[code=language-java]package com.springapp.mvc.Listener;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;

/**
* 对客户端请求进行监听(Request级)
*
* 监听ServletRequest对象的创建和销毁,需要实现ServletRequestListener接口。
*
*
* @author Leizhi 2016/5/25
* @see
* @since 1.0
*/
public class ServletRequestListenerDemo implements ServletRequestListener
{
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent)
{
System.out.println("----------监听到ServletRequest对象的创建---------");
}

@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent)
{
System.out.println("----------监听到ServletRequest对象的销毁---------");

}
}

演示监听HTTP会话(Session级),实现在线人数监听

[code=language-java]package com.springapp.mvc.Listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
* 监听HTTP会话(Session级)
*
* 作用:1、监听 HTTP会话活动情况,即创建、销毁。须实现HttpSessionListener接口。
* 2、监听HTTP 会话中的属性设置情况。须实现HttpSessionAttributeListener接口。
* 3、监听 HTTP 会话的 active 和 passivate 情况。须实现HttpSessionActivationListener接口。
* 此处由于篇幅限制仅演示监听HTTP会话活动情况。
*
* 通过监听http会话实现在限人数统计
*
* @author Leizhi 2016/5/25
* @see
* @since 1.0
*/
public class HttpSessionListenerDemo implements HttpSessionListener
{
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent)
{
System.out.println("-----------------监听到session创建-----------------");
ServletContext context = httpSessionEvent.getSession().getServletContext();
Integer count = (Integer) context.getAttribute("count");
if (null == count)
{
count = 1;
}
else
{
count += 1;
}
context.setAttribute("count", count);//保存人数
}

@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent)
{
System.out.println("-----------------监听到session销毁-----------------");
ServletContext context = httpSessionEvent.getSession().getServletContext();
Integer count = (Integer) context.getAttribute("count");
count = count-1;
context.setAttribute("count", count);//保存人数
}
}

演示对Servlet上下文进行监听(Application级)

[code=language-java]package com.springapp.mvc.Listener;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
* Servlet上下文进行监听(Application级)
*
* 监听 ServletContext对象的创建和删除,需要实现ServletContextListener。
* 监听ServletContext属性的添加、删除和修改等操作,需要实现ServletContextAttributeListener。
*
* @author Leizhi 2016/5/25
* @see
* @since 1.0
*/
public class ServletContextListenerDemo implements ServletContextListener, ServletContextAttributeListener
{
@Override
public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent)
{
System.out.println("------------监听到application范围内属性的添加--------------");
System.out.println("application范围内添加了名为"+servletContextAttributeEvent.getName()+",值为"+servletContextAttributeEvent.getValue()+"的属性");
}

@Override
public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent)
{
System.out.println("------------监听到application范围内属性的删除--------------");
System.out.println("application范围内删除了名为"+servletContextAttributeEvent.getName()+",值为"+servletContextAttributeEvent.getValue()+"的属性");
}

@Override
public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent)
{
System.out.println("------------监听到application范围内属性的替换--------------");
System.out.println("application范围内替换了名为"+servletContextAttributeEvent.getName()+",值为"+servletContextAttributeEvent.getValue()+"的属性");
}

@Override
public void contextInitialized(ServletContextEvent servletContextEvent)
{
System.out.println("--------------监听到容器初始化----------------");
}

@Override
public void contextDestroyed(ServletContextEvent servletContextEvent)
{
System.out.println("--------------监听到容器初销毁----------------");
}
}

最后在web.xml中对监听器进行配置

[code=language-java]<!--监听器-->
<listener>
<description>Session监听器</description>
<listener-class>com.springapp.mvc.Listener.HttpSessionListenerDemo</listener-class>
</listener>
<listener>
<description>上下文监听器</description>
<listener-class>com.springapp.mvc.Listener.ServletContextListenerDemo</listener-class>
</listener>
<listener>
<description>会话监听器</description>
<listener-class>com.springapp.mvc.Listener.ServletRequestListenerDemo</listener-class>
</listener>

运行截图

启动Tomcat时





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息