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。
针对监听器类型分类进行代码演示
演示对客户端请求进行监听
演示对Servlet上下文进行监听(Application级)
最后在web.xml中对监听器进行配置
运行截图
启动Tomcat时
监听器的作用
监听你的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时
相关文章推荐
- 浅析JAVA中过滤器、监听器、拦截器的区别
- Android编程之监听器的实现方法
- Android编程之监听器用法实例分析
- 利用java监听器实现在线人数统计
- Oracle监听口令及监听器安全详解
- ContextLoaderListener监听器的作用
- spring 监听器 IntrospectorCleanupListener
- Oracle监听器
- Android按钮调用setOnClickListener监听方法报错的原因
- 对象作用域与servlet事件监听器
- JAVA笔记【20131217】
- Java Web监听器Listener
- JAVA Web定时执行任务
- PASSION之WEB监听器
- The method setOnClickListener(View.OnClickListener)解决办法
- 【学习笔记】慕课网——web监听器
- 过滤器 监听器
- WindowListener 窗体监听器
- DWR监听器类无法加载。DwrServlet 无法加载
- 黑马程序员--2015.6.29java基础笔记---GUI总结