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

java 监听器(监听用户监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可 以自动激发一些操作,比如监听在线的用户的数量。当增加一在线人数)

2014-06-12 10:35 691 查看
监听器也叫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)   方法。 

下面帖上一个简单的配置

Xml代码

<listener>  

      <listener-class>listener.MySessionListener</listener-class>  

  </listener>  

Xml代码 

<listener>  

      <listener-class>listener.MySessionListener</listener-class>  

  </listener>  

 把它放到<web-app>里

再建一个监听类

Java代码 

package listener;   

  

import javax.servlet.http.HttpSessionEvent;   

import javax.servlet.http.HttpSessionListener;   

  

public class MySessionListener implements HttpSessionListener {
  

 public void sessionCreated(HttpSessionEvent se) {
  

  // 当session建立时触发   

  System.out.println("当session建立时触发");   

 }   

  

 public void sessionDestroyed(HttpSessionEvent se) {
  

  // 当session销毁时触发   

  System.out.println("当session销毁时触发");   

 }  

这样就配置成功了,打开页面时就会输出当session建立时触发,退出时输出当session销毁时触发!

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

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

              

  HttpSessionListener   

              

  ServletContextListener   

              

  ServletContextAttributeListener     

    

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

    

          【程序源代码】     

   

Java代码 

 //   ====================   Program   Discription   ==================  

 //   程序名称:示例14-9   :   EncodingFilter   .java      

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

//   ==============================================================      

 import   javax.servlet.http.*;      

 import   javax.servlet.*;      

      

 public   class   OnLineCountListener   implements   HttpSessionListener,   
  

ServletContextListener,ServletContextAttributeListener      

 {      

 private   int   count;   
  

 private   ServletContext   context   =   null;   
  

      

 public   OnLineCountListener()      

 {      

 count=0;      

 //setContext();      

 }      

 //创建一个session时激发      

public   void   sessionCreated(HttpSessionEvent   se)     
  

 {      

 count++;      

 setContext(se);      

      

 }      

 //当一个session失效时激发      

public   void   sessionDestroyed(HttpSessionEvent   se)     
  

 {      

 count--;      

 setContext(se);      

 }      

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

public   void   setContext(HttpSessionEvent   se)   
  

 {      

 se.getSession().getServletContext().      

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

 }      

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

public   void   attributeAdded(ServletContextAttributeEvent   event)   {   
  

      

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

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

      

         }      

              

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

        public   void   attributeRemoved(ServletContextAttributeEvent   event)   {   
  

      

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

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

      

         }      

      

 //属性被替代时激发      

        public   void   attributeReplaced(ServletContextAttributeEvent   event)   {   
  

      

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

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

         }      

         //context删除时激发      

          public   void   contextDestroyed(ServletContextEvent   event)   {   
  

      

 log("contextDestroyed()");      

 this.context   =   null;   
  

      

         }      

      

         //context初始化时激发      

        public   void   contextInitialized(ServletContextEvent   event)   {   
  

      

 this.context   =   event.getServletContext();      

 log("contextInitialized()");      

      

         }      

         private   void   log(String   message)   {   
  

      

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

         }            

 }  

Xml代码 、

<listener>      

                  <listener-class>OnLineCountListener</listener-class>   
  

          </listener>     

Xml代码  

<listener>     

                  <listener-class>OnLineCountListener</listener-class>     

          </listener>     

     

  测试程序:     

    

 

Html代码 

<%@   page   contentType="text/html;charset=gb2312"   %>   
  

       

  目前在线人数:        

       

  <font   color=red><%=getServletContext().getAttribute("onLine")%></font><br>   
  

       

  退出会话:        

       

  <form   action="exit.jsp"   method=post>   
  

  <input   type=submit   value="exit">   
  

  </form>      

       

  getServletContext().getAttribute("onLine")获得了count的具体值。客户端调用        

       

  <%session.invalidate()   ;%>     

Html代码

<%@   page   contentType="text/html;charset=gb2312"   %>     

      

  目前在线人数:       

      

  <font   color=red><%=getServletContext().getAttribute("onLine")%></font><br>     

      

  退出会话:       

      

  <form   action="exit.jsp"   method=post>     

  <input   type=submit   value="exit">     

  </form>     

      

  getServletContext().getAttribute("onLine")获得了count的具体值。客户端调用       

      

  <%session.invalidate()   ;%>     

 

    

          使Session失效,这样监听器就会使count减1。     

    

          【运行程序】   

          web.xml做好以上的配置,把OnLineCountListener放在WEB-INF/class目录下,启动Web服务器,在浏览器里输入以下URL(根据具体

情况不同):

    

          浏览器将会打印目前在线人数。在服务器端有以下输出:     

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