网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.JAVA 树中 按最长路径行驶.
.编写一个基于Java Robot类的屏幕.
.企业Java技术开发技巧2则.
.solaris上开发J2EE应用中文问题的.
.快速在应用程序中将文件压缩成Zi.
.Java Applet 入门第二天.
.Sun年底推Solaris 10第一个升级包.
.理解Java面向对象的程序设计思想.
.发布Hibernate 3.1.1改进数.
.用Java类实现JavaMail发送邮件的.
.抓住时机,利用Java,使之成为信.
.JAVA几个常见错误简析(上).
.Java技术与XML常见问题之JAXR.
.EJB设计模式(2).
.java指南之使用图形:使用图像.
.JBuilder2005实现重构之杂项重构.
.J2ME程序开发中随机数字处理全攻.
.常用基础函数.
.Java语言编程中更新XML文档的常用.
.Class文件详解 (2).

Servlet中的Listener的应用

发表日期:2008-1-5



由于工作需要,最近在找一些解决方案,发现Listener是一个很好的东西,

能够监听到session,application的create,destroy,可以监听到session,application

 属性绑定的变化,考虑了一下,可以应用在"在线人数统计","数据缓存"等各个方面,

下面是整理的一些资料.


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 }
 

Photoshop教程 数据结构 五笔输入法专题 QQ病毒专题 共享上网专题 Google工具和服务专题


上一篇:J2EE的安全认证机制 人气:1159
下一篇:WebLogic树形结构的实现 人气:987
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐