java web 监听器详解
来源:互联网 发布:网络推广人员绩效考核 编辑:程序博客网 时间:2024/05/22 07:59
一、监听器原理:
监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。
简单的说,被监听对象A中,关联着B对象。事件源A类对外提供一个方法,用于设置监听器对象B到A类的某一实例变量中。在需要监听事件源的方法中,方法体的某一处先构造创建一个Event对象,将this即B与相关的动作封装进Event对象中,然后调用监听器B对象的doXXXX(event)方法,将事件对象传入方法实参中。
简单的类图示例:
二、简介:
在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为SerlvetConext,HttpSession和ServletRequest这三个域对象。
Servlet规范针对这三个对象上的操作,又把这多种类型的监听器划分为三种类型:
1>监听三个域对象创建和销毁的事件监听器
2>监听域对象中属性的增加和删除的事件监听器
3>监听绑定到HttpSession域中的某个对象的状态的时间监听器。
a、如三个域对象的创建与销毁方法签名:
ServletRequestListener有以下两个方法
void requestDestroyed(ServletRequestEvent sre)
void requestInitialized(ServletRequestEvent sre)
HttpSessionListener有以下两个方法
void sessionCreated(HttpSessionEvent se)
void sessionDestroyed(HttpSessionEvent se)
ServletContextListener
void contextDestroyed(ServletContextEvent sce)
void contextInitialized(ServletContextEvent sce)
b、三个类型对象域中增、删、改的监听器(3个)
ServletContextAttributeListener,
HttpSessionAttributeListener,
ServletRequestAttributeListener
c、感知型监听器(2个):监听自己何时被帮到session上,何时解绑了;何时被钝化了,何时被活化了(序列化到某个存储设置中)。
注意:这种监听器不需要注册。某个javabean实现这些接口后就可以监听何时被绑定、解绑或被激活或钝化。
HttpSessionBindingListener:实现该接口的类,能检测自己何时被Httpsession绑定,和解绑
HttpSessionActivationListener:实现该接口的类(要求些javabean必须是实现了Serializable接口的),能监测自己何时随着HttpSession一起激活和钝化。
三、Listenner的注册
Javaweb的这些特别的监听器注册比较简单,因为ServletRequest、HttpSession、ServletContext对象都是容器创建的,所以需要它们的监听器的话,只需要在应用的web-info的web.xml里配置即可:
<listener>
<listener-class>com.test.listener.MyHttpSessionAttributeListener</listener-class>
<listener-class>com.test.listener.MyServletContextAttributeListener</listener-class>
<!-- 多个实现相同的Listenner接口,在执行时是按web.xml注册出现的来决定。 -->
</listener>
注意:感知型监听器HttpSessionBindingListener、HttpSessionActivationListener不需要注册。
三、应用场景:
由于ervletRequest、HttpSession、ServletContext对象都是容器创建的,什么时候创建,用户都不知道。通过实现这些对象的监听器后,就可以得知了。比如:
1>在ServletContextLintener监听器的contextInitialized方法中,进行应用级的资源初始化以便提高效率,在contextDestroyed方法中对应用级的资源进行释放。
2>又比如web应用中,会存在会话,通常的作法是将当前登录的用户存放在session会话中。那么如何统计在线人数话,如何显示出当前登录的用户呢。如何踢出某些已登录的用户呢。就可以通过HttpSessionAttributeListener监听器的attributeAdded方法。
等等。
===================自己的例子====================
web.xml
<context-param><param-name>DB-URL</param-name><param-value>jdbc:oracle:thin:@195.2.199.5:1521:cqcgsorcl</param-value></context-param><context-param><param-name>DB-USERNAME</param-name><param-value>cgsappuser</param-value></context-param><context-param><param-name>DB-PASSWORD</param-name><param-value>cgsappuser</param-value></context-param><!-- <context-param><param-name>DB-URL</param-name><param-value>jdbc:oracle:thin:@172.16.101.80:1521:orcl</param-value></context-param><context-param><param-name>DB-USERNAME</param-name><param-value>cgsappuser</param-value></context-param><context-param><param-name>DB-PASSWORD</param-name><param-value>cdmcs20121113</param-value></context-param>--><listener> <listener-class> com.cdmcs.cqjgj.app.listener.DataTransferListener </listener-class> </listener>
listener
package com.cdmcs.cqjgj.app.listener;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import com.cdmcs.cqjgj.app.hpsw.HpswSjzdWorker;import com.cdmcs.cqjgj.app.util.TransferDB;public class DataTransferListener implements ServletContextListener {public void contextDestroyed(ServletContextEvent arg0) {// TODO Auto-generated method stub}public String getContextValue(ServletContextEvent event , String name){return event.getServletContext().getInitParameter(name);}public void contextInitialized(ServletContextEvent event) {TransferDB.dbUrl = getContextValue(event , "DB-URL");TransferDB.dbUserName = getContextValue(event , "DB-USERNAME");TransferDB.dbPwd = getContextValue(event , "DB-PASSWORD");new HpswSjzdWorker().start();//继承线程类}//private void monitorDataTransferHandler(final HpswSjzdWorker dataTransferHandler){//new Timer(true).schedule(new TimerTask(){//public void run() {//try{//long nowTime = System.currentTimeMillis();//if(nowTime - dataTransferHandler.getLastStartTaskTime() > 20*60*1000){//dataTransferHandler.interrupt();//}//}catch(Exception e){//e.printStackTrace();//}//}//}, 5*60*1000, 15*60*1000);//}}
- java web 监听器详解
- java web 监听器详解
- java web 监听器详解
- java web 监听器详解
- Java Web 监听器详解
- java web 监听器详解
- java web监听器详解
- java web 监听器详解
- java web 监听器详解
- java web 监听器listener详解
- Java深入 - WEB容器监听器详解 ServletContextListener
- java web listener 监听器
- java web中的监听器
- java web 的监听器
- java web listener 监听器
- java web 监听器学习
- Java web----监听器
- Java Web监听器
- NSInvocation、NSMethodSignature 的介绍及使用
- Sublime 的使用
- 给最爱的人最好的礼物——味芙西饼
- 开发Qt Plugin 2
- wince sdk 文件夹
- java web 监听器详解
- Java Gui
- MFC 中怎样使用时钟
- linux下编译FFmpeg
- visio2007 uml模板包
- MVC
- linux启动weblogic,并且查看启动日志
- 什么是极客?听听他们怎么说
- eclipse+webservice开发实例