MLDN
课程咨询[孔老师]QQ 1031143579孔老师QQ课程咨询留言 课程咨询[徐老师 ]QQ 945313230
徐老师QQ课程咨询留言
课程咨询[刘老师 ]QQ 514543793
刘老师QQ课程咨询留言
java培训
北京java培训
IT电子教育门户 高端JAVA培训 -=> 资源中心 -=> J2EE技术专区 -=> JSP/Servlet -=> 正文

Servlet中Listener的应用(一)

 发布日期:2009-4-13 9:13:00 发布者:[IT电子教育门户]   评论:[]  浏览:

Listener 是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个 HttpSession时,就激发sessionCreated(HttpSessionEvent se)方法,这样就可以给在线人数加1。常用的监听接口有以下几个:

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

  ServletContextListener 监听ServletContext。当创建ServletContext时,激发contextInitialized (ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法。

  HttpSessionListener 监听HttpSession的操作。当创建一个Session时,激发session Created(HttpSessionEvent se)方法;当销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se)方法。

  HttpSessionAttributeListener 监听HttpSession中的属性的操作。当在Session增加一个属性时,激发attributeAdded (HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se) 方法。

  下面我们开发一个具体的例子,这个监听器能够统计在线的人数。在ServletContext初始化和销毁时,在服务器控制台打印对应的信息。当ServletContext里的属性增加、改变、删除时,在服务器控制台打印对应的信息。

  要获得以上的功能,监听器必须实现以下3个接口:

  HttpSessionListener

  ServletContextListener

  ServletContextAttributeListener

  我们看具体的代码,见示例14-9。

  【程序源代码】

  

      1 // ==================== Program Discription =====================
  2 // 程序名称:示例14-9 : EncodingFilter .java

  3 // 程序目的:学习使用监听器

  4 // ==============================================================

  5 import javax.servlet.http.*;

  6 import javax.servlet.*;

  7

  8 public class OnLineCountListener implements HttpSessionListener,

  ServletContextListener,ServletContextAttributeListener

  9 {

  10 private int count;

  11 private ServletContext context = null;

  12

  13 public OnLineCountListener()

  14 {

  15 count=0;

  16 //setContext();

  17 }

  18 //创建一个session时激发

  19 public void sessionCreated(HttpSessionEvent se)

  20 {

  21 count++;

  22 setContext(se);

  23

  24 }

  25 //当一个session失效时激发

  26 public void sessionDestroyed(HttpSessionEvent se)

  27 {

  28 count--;

  29 setContext(se);

  30 }

  31 //设置context的属性,它将激发attributeReplaced或attributeAdded方法

  32 public void setContext(HttpSessionEvent se)

  33 {

  34 se.getSession().getServletContext().

  setAttribute("onLine",new Integer(count));

  35 }

  36 //增加一个新的属性时激发

  37 public void attributeAdded(ServletContextAttributeEvent event) {

  38

  39 log("attributeAdded('" + event.getName() + "', '" +

  40 event.getValue() + "')");

  41

  42 }

  43

  44 //删除一个新的属性时激发

  45 public void attributeRemoved(ServletContextAttributeEvent event) {

  46

  47 log("attributeRemoved('" + event.getName() + "', '" +

  48 event.getValue() + "')");

  49

  50 }

  51

  52 //属性被替代时激发

  53 public void attributeReplaced(ServletContextAttributeEvent event) {

  54

  55 log("attributeReplaced('" + event.getName() + "', '" +

  56 event.getValue() + "')");

  57 }

  58 //context删除时激发

  59 public void contextDestroyed(ServletContextEvent event) {

  60

  61 log("contextDestroyed()");

  62 this.context = null;

  63

  64 }

  65

  66 //context初始化时激发

  67 public void contextInitialized(ServletContextEvent event) {

  68

  69 this.context = event.getServletContext();

  70 log("contextInitialized()");

  71

  72 }

  73 private void log(String message) {

  74

  75 System.out.println("ContextListener: " + message);

  76 }

  77 }
 

【程序注解】

  在OnLineCountListener 里,用count代表当前在线的人数,OnLineCountListener将在Web服务器启动时自动执行。当 OnLineCountListener构造好后,把count设置为0。每增加一个Session,OnLineCountListener会自动调用 sessionCreated(HttpSessionEvent se)方法;每销毁一个Session,OnLineCountListener会自动调用sessionDestroyed (HttpSessionEvent se)方法。当调用sessionCreated(HttpSessionEvent se)方法时,说明又有一个客户在请求,此时使在线的人数(count)加1,并且把count写到ServletContext中。 ServletContext的信息是所有客户端共享的,这样,每个客户端都可以读取到当前在线的人数。

  从作用域范围来说,Servlet的作用域有ServletContext,HttpSession,ServletRequest.

  Context范围:

  ServletContextListener:

  对一个应用进行全局监听.随应用启动而启动,随应用消失而消失主要有两个方法:

  contextDestroyed(ServletContextEvent event)

  在应用关闭的时候调用

  contextInitialized(ServletContextEvent event)

  在应用启动的时候调用

  这个监听器主要用于一些随着应用启动而要完成的工作,也就是很多人说的我想在容器

  启动的时候干..........

  一般来说对"全局变量"初始化,如

         public void contextInitialized(ServletContextEvent event){
  ServletContex sc = event.getServletContext();

  sc.setAttribute(name,value);

  }
 
  以后你就可以在任何servlet中getServletContext().getAttribute(name);

  我最喜欢用它来做守护性工作,就是在contextInitialized(ServletContextEvent event)

  方法中实现一个Timer,然后就让应用在每次启动的时候让这个Timer工作:

  程序代码:

         public void contextInitialized(ServletContextEvent event){
  timer = new Timer();

  timer.schedule(new TimerTask(){

  public void run(){

  //do any things

  }

  },0,时间间隔);

  }
 
  有人说Timer只能规定从现在开始的多长时间后,每隔多久做一次事或在什么时间做

  一次事,那我想在每月1号或每天12点做一项工作如何做呢?

java视频教程
JAVA核心_75对象序列化练习
 JAVA核心_75对象序列化..
JAVA核心_74对象序列化
 JAVA核心_74对象序列化..
JAVA核心_73字符编码
 JAVA核心_73字符编码 ..
JAVA核心_72Scanner
 JAVA核心_72Scann..
JAVA核心_71 IO练习 二
 JAVA核心_71 IO练习..
相关文章 推荐文章
Servlet中Listener..[4.13]
Servlet容器启动后创建的对..[1.14]
Servlet容器启动后创建的对..[1.14]
Servlet程序设计(二)[11.11]
Servlet程序设计(一)[11.11]
Servlet中Listener的应用..
Servlet中Listener的应用..
JSP页面中使用FCKeditor控件..
Jsp Check List(Jsp代..
Servlet容器启动后创建的对象集合..
热门文章
JSP的九个隐含对象
Java Servlet API类库中..
在JSP客户端限制表单重复提交
用JSTL实现JSP应用程序快速开发
JSP彩色验证码
Servlet中Listener的应用..
JSP语法简表
创建JSP站点
用Servlet 动态生成图片
JSP编程进度条设计实例
今日更新
Servlet中Listener的应用..
Servlet中Listener的应用..
JSP页面中使用FCKeditor控件..
Jsp Check List(Jsp代..
Servlet容器启动后创建的对象集合..
Servlet容器启动后创建的对象集合..
JSP自定义标签开发流程
Java中用Servlet Liste..
JSP技术优缺点详解(二)
JSP技术优缺点详解(一)
JAVA招聘网
 评一评
正在读取…
  姓名:
  评论:
    
【注】 发表评论必需遵守以下条例: !!!
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
关于我们 | 商务合作 | 招聘信息 | 客服中心 | 服务条款 | 免责声明 | 网站导航 QQ留言
Copyright 2009 魔乐培训MLDN.CN all rights reserved 版权所有 京ICP备07008611号