zoukankan      html  css  js  c++  java
  • Listener

    3、Listener功能

    它是基于观察者模式设计的,Listener 的设计对开发 Servlet 应用程序提供了一种快捷的手段,能够方便的从另一个纵向维度控制程序和数据。目前 Servlet 中提供了 5 种两类事件的观察者接口,它们分别是:4 个 EventListeners 类型的,ServletContextAttributeListener、ServletRequestAttributeListener、ServletRequestListener、HttpSessionAttributeListener  和 2 个 LifecycleListeners 类型的,ServletContextListener、HttpSessionListener

     

    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

    jsp页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"  

    •     pageEncoding="UTF-8"%>  
    • <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    • <html>  
    • <head>  
    • <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
    • <title>主页</title>  
    • </head>  
    • <body>  
    •     <h4>你好!</h4>  
    •     在线人数:<h1><%=request.getSession().getAttribute("onlineUserCount") %></h1>  
    • </body>  
    • </html>  

     

    Web.xml

    [html] view plaincopy
     
    1. <listener>  
    2.     <listener-class>com.ee.listener.OnlineUserListener</listener-class>  
    3. </listener>  

    /** 

    •  *  
    •  */  
    • package com.ee.listener;  
    •   
    • import javax.servlet.ServletContextAttributeEvent;  
    • import javax.servlet.ServletContextAttributeListener;  
    • import javax.servlet.ServletContextEvent;  
    • import javax.servlet.ServletContextListener;  
    • import javax.servlet.http.HttpSessionEvent;  
    • import javax.servlet.http.HttpSessionListener;  
    •   
    • /** 
    •  * @author Administrator 
    •  * 
    •  */  
    • public class OnlineUserListener implements HttpSessionListener,  
    •         ServletContextListener, ServletContextAttributeListener {  
    •     private long onlineUserCount = 0;  
    •   
    •     public long getOnlineUserCount() {  
    •         return onlineUserCount;  
    •     }  
    •   
    •     /* (non-Javadoc) 
    •      * @see javax.servlet.ServletContextAttributeListener#attributeAdded(javax.servlet.ServletContextAttributeEvent) 
    •      */  
    •     @Override  
    •     public void attributeAdded(ServletContextAttributeEvent arg0) {  
    •   
    •     }  
    •   
    •     /* (non-Javadoc) 
    •      * @see javax.servlet.ServletContextAttributeListener#attributeRemoved(javax.servlet.ServletContextAttributeEvent) 
    •      */  
    •     @Override  
    •     public void attributeRemoved(ServletContextAttributeEvent arg0) {  
    •   
    •     }  
    •   
    •     /* (non-Javadoc) 
    •      * @see javax.servlet.ServletContextAttributeListener#attributeReplaced(javax.servlet.ServletContextAttributeEvent) 
    •      */  
    •     @Override  
    •     public void attributeReplaced(ServletContextAttributeEvent attributeEvent) {  
    •         System.err.println("...attributeReplaced...");  
    •     }  
    •   
    •     /* (non-Javadoc) 
    •      * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent) 
    •      */  
    •     @Override  
    •     public void contextDestroyed(ServletContextEvent arg0) {  
    •   
    •     }  
    •   
    •     /* (non-Javadoc) 
    •      * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent) 
    •      */  
    •     @Override  
    •     public void contextInitialized(ServletContextEvent arg0) {  
    •   
    •     }  
    •   
    •     /* (non-Javadoc) 
    •      * @see javax.servlet.http.HttpSessionListener#sessionCreated(javax.servlet.http.HttpSessionEvent) 
    •      */  
    •     @Override  
    •     public void sessionCreated(HttpSessionEvent httpSessionEvent) {  
    •         onlineUserCount ++;  
    •         toUpdateCount(httpSessionEvent);  
    •     }  
    •   
    •     /* (non-Javadoc) 
    •      * @see javax.servlet.http.HttpSessionListener#sessionDestroyed(javax.servlet.http.HttpSessionEvent) 
    •      */  
    •     @Override  
    •     public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {  
    •         onlineUserCount --;  
    •         toUpdateCount(httpSessionEvent);  
    •     }  
    •   
    •     private void toUpdateCount(HttpSessionEvent httpSessionEvent){  
    •         httpSessionEvent.getSession().setAttribute("onlineUserCount", onlineUserCount);  
    •     }  
    • }  

     

    总结很重要哦 方法得当,坚持会有奇迹哦
  • 相关阅读:
    7.12.2
    7.12.1
    7.11.8
    循环测试条件前缀和后缀的区别
    7.11.7 两个版本
    7.11.5
    7.12 vowels.c 程序
    7.11 animals.c 程序
    7.6.2 break 语句
    7.10 break.c 程序
  • 原文地址:https://www.cnblogs.com/sunyuhuan/p/7232666.html
Copyright © 2011-2022 走看看